Marathon vs Kubernetes vs Docker Swarm em DC / OS com contêineres Docker

101

Estou procurando alguns prós e contras de escolher Marathon e Chronos, Docker Swarm ou Kubernetes ao executar contêineres Docker no DC / OS.

Por exemplo, quando é melhor usar Marathon / Chronos do que Kubernetes e vice-versa?

No momento, estou principalmente experimentando, mas espero começar a usar um desses serviços em produção após o verão. Isso pode desqualificar o Docker Swarm, pois não tenho certeza se ele estará pronto para a produção até lá.

O que eu gosto no Docker Swarm é que é essencialmente apenas "comandos do Docker" e você não precisa aprender algo completamente novo. Já estamos usando docker-composee isso funcionará imediatamente com o Docker Swarm (pelo menos em teoria), então seria uma grande vantagem. Minha principal preocupação com o Docker Swarm é se ele cobrirá todos os casos de uso necessários para executar um sistema em produção.

João
fonte

Respostas:

167

Tentarei analisar os aspectos exclusivos de cada estrutura de orquestração de contêiner no Mesos.

Use Docker Swarm se:

Use Kubernetes-Mesos se:

  • Você deseja lançar K8s Pods, que são grupos de contêineres programados e localizados juntos, compartilhando recursos.
  • Você deseja iniciar um serviço junto com um ou mais containers auxiliares (por exemplo, arquivador de log, monitor de métricas) que residem ao lado do container pai.
  • Você deseja usar o controle de replicação, balanceamento de carga e descoberta de serviço baseado em rótulo K8s.
  • Consulte http://kubernetesio.blogspot.com/2015/04/kubernetes-and-mesosphere-dcos.html

Use o Marathon se:

  • Você deseja iniciar aplicativos / serviços de longa duração do Docker ou não Docker.
  • Você deseja usar os atributos Mesos para agendamento baseado em restrições.
  • Você deseja usar grupos de aplicativos e dependências para iniciar, dimensionar ou atualizar serviços relacionados.
  • Você deseja usar verificações de integridade para reiniciar automaticamente serviços não saudáveis ​​ou reverter implantações / atualizações não saudáveis.
  • Você deseja integrar o HAProxy ou Consul para descoberta de serviço.
  • Você deseja iniciar e monitorar aplicativos por meio de uma IU da web ou API REST.
  • Você deseja usar uma estrutura construída desde o início com o Mesos em mente.

Use o Chronos se:

  • Você deseja iniciar tarefas Docker ou não Docker que devem sair.
  • Você deseja agendar uma tarefa para ser executada em um horário / horário específico (a la cron).
  • Você deseja agendar um fluxo de trabalho DAG de tarefas dependentes.
  • Você deseja iniciar e monitorar trabalhos por meio de uma IU da web ou API REST.
  • Você deseja usar uma estrutura construída desde o início com o Mesos em mente.
Adão
fonte
1
Eu só queria adicionar isso a partir do K8s 1.6 para oferecer suporte ao seguinte (alguns deles por um longo tempo): * Docker-CRI (beta) e cri-o, frakti, rkt (alpha) para contêineres não Docker. * Verificações de saúde para ver quando um contêiner foi iniciado / não está mais respondendo. * Recriação de pods insalubres. * Trabalhos do tipo Cron, recorrentes e únicos. * Trabalhos em lote (iniciados manualmente e executados até a conclusão uma vez). Uma vez que a própria Mesosfera diz que K8s é um cidadão de primeira classe no Mesos, o argumento "construído desde o início" parece um pouco desgastado também ...
Jonas Schubert Erlandsson
15

Embora esteja um pouco desatualizado, pode ser útil ler Qual é a diferença entre Mesos do Apache e Kubernetes do Google , para obter alguns dos fundamentos corretos. Além disso, observe que o Mesos opera em um nível diferente do Kubernetes / Marathon / Chronos. Por último, mas não menos importante, veja Docker Swarm + Mesos de Timothy Chen, tendo em mente que Marathon e Swarm podem operar simultaneamente no mesmo cluster Mesos.

Michael Hausenblas
fonte