Seidor
Kubernetes vs Docker Swarm

20 de março de 2024

Kubernetes vs Docker Swarm! qual é a melhor opção?

Durante a criação desta entrada de blog tentaremos fazer uma comparação linear das diferenças e capacidades desses sistemas de gerenciamento de contêineres. De um lado teremos o Kubernetes v1.9 e do outro Docker Swarm 1.2.9 também conhecido como Docker Engine.

O que é Kubernetes?

Não é nada mais do que um sistema de código aberto que nos ajuda com a implementação, escalonamento e administração de aplicações em contêineres. Foi construído pelo Google utilizando um sistema interno de administração de clusters chamado Borg “Omega”. E sua base de trabalho pode ser diagramada da seguinte maneira:

diagrama-kubernetes-web

O nó Master, localiza as cargas de trabalho do contêiner em grupos de usuários em nós de trabalhadores ou em si mesmo. Os demais componentes são:

  • Etcd: Armazena os dados de configuração aos quais o Servidor API do Kubernetes Master pode acessar utilizando HTTP simples ou API JSON.
  • Kube-Apiserver: é o centro de gestão para o nó Master, facilita a comunicação entre os diversos componentes mantendo assim a saúde do cluster.
  • Kube-Controller-Manager: é o encarregado de assegurar a correspondência entre o estado desejado do cluster e o estado atual, isso consegue escalando cargas de trabalho para cima e para baixo.
  • Kube-Scheduler: coloca a carga de trabalho no nó que corresponde; neste diagrama particular, todas as cargas de trabalho são localizadas localmente em seu host.
  • Kubelet: recebe as especificações do pod do servidor API e gerencia os pods que são executados no host.

Para estar em consonância com os termos utilizados comumente quando se fala de Kubernetes, utilizaremos a seguinte lista:

  • Pods: Kubernetes implementa e programa contêineres em grupos chamados pods. Os contêineres em um pod são executados no mesmo nó e compartilham recursos como sistemas de arquivos, espaço de nomes no kernel e um endereço IP.
  • Implantações: esses blocos de construção podem ser usados para criar e gerenciar um grupo de pods. As implantações podem ser usadas a nível de serviço para escalar horizontalmente garantindo disponibilidade.
  • Serviços: são os pontos finais que podem ser endereçados por nome e podem se conectar aos pods utilizando os seletores de etiquetas. O serviço automaticamente enviará solicitações por turnos entre pods. Kubernetes configurará um servidor DNS para o cluster que busca novos serviços e lhes permite ser endereçados por seu nome. Os serviços são a parte frontal das cargas de trabalho do seu contêiner.
  • Etiquetas: são pares de chave-valor unidos a objetos e podem ser usados para buscar e atualizar múltiplos objetos como um conjunto.

O que é Docker Swarm?

É uma ferramenta que permite aos desenvolvedores implementar contêineres no modo swarm. Um cluster Swarm consiste no Docker Engine implementado em múltiplos nós. Os nós de gerenciamento realizam a orquestração e a administração do cluster. Os nós de trabalho recebem e executam tarefas dos nós de gerenciamento.

Um serviço consiste em tarefas que podem ser executadas em nós do Swarm. Os serviços podem ser replicados para serem executados em múltiplos nós. No modelo de serviço replicado, o balanceamento de carga de entrada e o DNS interno podem ser usados para fornecer pontos de extremidade de serviço altamente disponíveis.

Swarm Architecture

O usuário pode especificar declarativamente o estado de vários serviços para executar no cluster utilizando arquivos do tipo YAML. Para esta arquitetura, também listaremos alguns termos comumente mencionados.

  • Nó: nada mais é do que uma instância de um enxame. Os nós podem ser distribuídos nas instalações ou em nuvens públicas.
  • Swarm: é formado por um grupo de nós (Docker Engine). Neste modelo, orquestram-se serviços em vez de executar comandos de contêineres.
  • Nós de administração: recebem as definições de serviço do usuário e distribuem o trabalho para os nós de trabalhadores. Os nós de administração também podem realizar as tarefas dos nós de trabalhadores.
  • Nós de trabalhadores: coletam e executam tarefas dos nós de administração.
  • Tarefa: é uma unidade atômica de um serviço programado em um nó trabalhador.

Já conhecendo as arquiteturas e componentes do Kubernetes e Docker Swarm, passaremos a realizar uma comparação de ambos os ecossistemas.

Conclusões

Em termos de popularidade e uso atual, o Kubernetes é líder em todas as métricas quando comparado com o Docker Swarm, tendo mais de 80% do interesse em artigos de notícias, popularidade em ferramentas como o Github e buscas na web.

Por outro lado, não é menos verdade a diferença na complexidade envolvida na implementação do Kubernetes em comparação com o Docker Swarm, mas o Kubernetes tem tentado mitigar esse inconveniente incorporando uma variedade de opções de implementação como Minikube e Kubeadm.