Se você estiver conteinerizando seu fluxo de trabalho de desenvolvimento, concordará que o Docker é uma das melhores opções para controle de versão. No entanto, o Docker Swarm é um dos recursos do Docker usados para orquestrar aplicativos complexos.
O mecanismo de trabalho do Docker Swarm pode ser difícil de quebrar no início. Mas não se preocupe, vamos detalhar isso neste artigo. Então, o que é o Docker Swarm? Por que usá-lo? E como funciona?
O que é o Docker Swarm e como funciona?
Docker Swarm refere-se a um grupo de hosts Docker (computadores) em rede como um cluster para entregar tarefas especificadas. Cada host do Docker neste cluster é um nó, também chamado de nó do trabalhador.
Para garantir a distribuição eficiente de tarefas, você precisa de um nó gerenciador. Idealmente, uma inicialização do modo Docker Swarm começa com o nó do gerenciador e os nós subsequentes se tornam trabalhadores.
Como operador, você só precisa interagir com o nó do gerenciador, que passa as instruções para os trabalhadores. Invariavelmente, os nós do trabalhador recebem alocação de tarefas do nó gerenciador e as executam de acordo.
No entanto, o nó do gerenciador também pode participar da execução da tarefa (como um trabalhador) ou enfrentar o gerenciamento diretamente. Você pode impedir o agendamento de tarefas no gerenciador alterando seu estado de ativo para ralo. Mas sua decisão de atribuir essa função dupla pode depender de vários fatores. Essencialmente, você quer ter certeza de que tem recursos suficientes para lidar com várias funções antes de fazer isso.
Os nós falham. Assim, o nó do gerenciador monitora ativamente o estado de cada nó do trabalhador e ativa um mecanismo tolerante a falhas para reprogramar a tarefa de um nó com falha para outro.
Mas e se o nó do gerenciador também travar? Curiosamente, o enxame continua correndo. A única armadilha é que você não poderá mais se comunicar com o nó do gerenciador para controlar o cluster.
A abordagem à prova de falhas comum para evitar isso é atribuir a função de gerente a muitos nós (o Docker recomenda no máximo sete por cluster). Você pode então selecionar o nó do gerenciador primário a partir deles. Quando o gerenciador principal trava, um dos gerenciadores em espera assume a função.
No entanto, você não precisa se preocupar com alternância de função entre nós ou manutenção de estado em um cluster. O algoritmo de consenso de jangada (um método tolerante a falhas) integrado ao Docker SwarmKit cuida disso.
Por que usar o Docker Swarm?
O Docker Swarm é útil para implantar aplicativos complexos com perspectivas de alta escalabilidade. Um de seus principais casos de uso é descentralizar microsserviços. Cada microsserviço compartilha um contêiner semelhante com os de outros nós do trabalhador.
Outro motivo para usar o Docker Swarm é que vários hosts executam tarefas simultaneamente em um cluster. Isso contrasta com o Docker Compose, que só permite executar vários contêineres em um mecanismo do Docker.
Esse atributo escalável do Docker Swarm permite que os aplicativos estejam disponíveis de forma consistente com latência zero. É mesmo uma das razões pelas quais você quer escolha o Docker em vez de outras ferramentas de virtualização.
E o que mais? Ao contrário dos Docker Containers únicos, em que um contêiner para quando falha, o Docker Swarm redistribui automaticamente as tarefas entre os nós do trabalhador disponíveis sempre que uma falha.
O Docker Swarm também mantém um backup de cada estado. Assim, você sempre pode reverter novas configurações de enxame para o estado anterior. Digamos que o nó do gerenciador em um enxame anterior falhe; você pode iniciar um novo cluster com mais nós gerenciadores e revertê-lo para adaptar a configuração do anterior.
Também é importante mencionar que a interação entre o nó do gerenciador e os nós do trabalhador é segura.
O Docker tem muitas alternativas, e um dos mais próximos é o Kubernetes. No entanto, o Docker Swarm é fácil de usar e mais automatizado. Por exemplo, embora você precise balancear a carga manualmente em algumas outras ferramentas de orquestração, como Kubernetes, o Docker Swarm apresenta balanceamento de carga automático, o que facilita a vida do DevOps.
A arquitetura do Docker Swarm
A arquitetura do Docker Swarm gira em torno de serviços, nós e tarefas. No entanto, cada um tem um papel a desempenhar na execução bem-sucedida da pilha.
Serviços
O serviço Docker Swarm detalha a configuração da imagem do Docker que executa todos os contêineres em um swarm. Inclui informações sobre as tarefas em um cluster. Por exemplo, um serviço pode descrever um Configuração do SQL Server Dockerizado.
Quando você executa um serviço, ele obriga o nó do gerenciador a sincronizar com suas configurações. O nó do gerenciador executa o restante dos nós do trabalhador com base nas configurações especificadas no serviço.
Os serviços no Docker Swarm podem ser globais ou replicados.
A diferença entre eles é que enquanto os serviços globais definem apenas uma tarefa para todos os nós em um cluster, os serviços replicados especificam o número de tarefas por nó.
Nós
Um nó no Docker Swarm é uma instância de todo o tempo de execução do Docker, também conhecido como mecanismo do Docker. Os nós do enxame podem ser máquinas físicas ou virtuais. Pense nisso como uma rede de computadores executando processos semelhantes (contêineres).
Normalmente, porém, os nós abrangem vários computadores e servidores que executam o mecanismo Docker em aplicativos da vida real. E, como mencionado anteriormente, um nó pode ser um nó de gerente ou de trabalhador, dependendo da função.
O nó do gerenciador atende a pulsação do swarm e controla os nós do trabalhador, que executam tarefas atribuídas a eles pelo nó do gerenciador. Como dito anteriormente, você pode ter mais de um nó gerenciador em um enxame. Mas, idealmente, tente limitar o número a menos de sete, pois adicionar muitos nós gerenciadores pode reduzir o desempenho do enxame.
Tarefas
Uma tarefa define o trabalho atribuído a cada nó em um Docker Swarm. Em segundo plano, o agendamento de tarefas no Docker Swarm é iniciado quando um orquestrador cria tarefas e as passa para um agendador, que instancia um contêiner para cada tarefa.
O nó do gerenciador usa o agendador para atribuir e reatribuir tarefas aos nós conforme necessário e especificado no serviço Docker.
Enxame Docker vs. Docker Compose: Quais são as diferenças?
As pessoas costumam usar o Docker Compose e o Docker Swarm de forma intercambiável. Embora ambos envolvam a execução de vários contêineres, eles são diferentes.
Enquanto o Docker Compose permite executar vários contêineres em um único host, o Docker Swarm os distribui em vários mecanismos do Docker em um cluster.
Você usa o Docker Compose quando precisa criar contêineres separados para cada serviço em seu aplicativo. Assim, quando um componente falha, ele não interfere nos outros. No entanto, quando a máquina host falha, todo o aplicativo também falha.
O Docker Swarm, no entanto, ajuda você a executar muitos contêineres em nós clusterizados. Portanto, cada componente do seu aplicativo fica em vários nós. E quando um nó que lida com um componente de aplicativo falha, o enxame aloca sua tarefa para outro nó dentro do cluster e reagenda as tarefas em execução, evitando tempo de inatividade.
Portanto, embora você possa ter tempo de inatividade no Docker Compose, o Docker Swarm garante que seu aplicativo continue em execução com a ajuda de servidores de backup (nós de trabalho). No entanto, o Docker 1.13 oferece suporte à implantação do Docker Compose no modo Swarm usando o implantação da pilha do docker comando.
O Docker Swarm ajuda você a implantar aplicativos complexos
A conteinerização superou as máquinas virtuais no design de software de integração contínua e entrega contínua (CI/CD). Portanto, entender os detalhes do mecanismo do Docker Swarm é uma habilidade adicional se você deseja se tornar um especialista em DevOps inestimável.
Você provavelmente sabe como ativar um contêiner do Docker ou até mesmo executar um Docker Compose para vários contêineres em um host. Mas o Docker Swarm é mais prático para implantar aplicativos com arquitetura complexa. Ele divide os processos em unidades, melhora o acesso ao tempo de execução e reduz ou até elimina as chances de tempo de inatividade.