Nomad e Kubernetes destacam-se como duas das plataformas de orquestração mais utilizadas para gerenciar cargas de trabalho dinâmicas. Estas plataformas são essenciais para automatizar a configuração, o gerenciamento e a coordenação de diversos aplicativos em execução.
Tanto o Nomad quanto o Kubernetes simplificam a implantação e o gerenciamento de aplicações em contêineres. Ao usar uma plataforma de orquestração adequada, é possível gerenciar eficientemente os diferentes microsserviços e contêineres – desde a descoberta e implantação de serviços até a coordenação e o escalonamento.
Antes de optar por uma destas plataformas, vamos explorar as características de cada uma, Nomad e Kubernetes.
O que é o Nomad?
O Nomad, desenvolvido pela HashiCorp, é uma solução para orquestração de cargas de trabalho. Ele oferece flexibilidade, agendamento e orquestração na implantação e gerenciamento de contêineres, funcionando tanto na nuvem quanto em infraestruturas locais, além de suportar cargas de trabalho não conteinerizadas.
Uma das vantagens do Nomad é que ele é executado a partir de um único binário. Diferentemente de outras soluções, ele tem um consumo de recursos muito baixo e não sobrecarrega os servidores. Além de contêineres, o Nomad também pode executar cargas de trabalho como aplicações Windows, Java, Máquinas Virtuais e Docker.
Com o Nomad, é possível implantar e gerenciar contêineres em ambientes de produção, assim como executar aplicações não conteinerizadas no mesmo cluster, sem a necessidade de empacotá-las em contêineres. O Nomad também facilita o escalonamento e a execução de aplicações mais próximas geograficamente de seus usuários, além de permitir a execução eficiente de tarefas em lote de curta duração.
O Nomad está disponível em duas versões: Community Edition e Enterprise Edition. A Community Edition é gratuita e permite gerenciar o cluster Nomad por conta própria, sendo possível executá-la localmente ou na nuvem em poucos minutos. Já a Enterprise Edition oferece suporte técnico e funcionalidades adicionais, como colaboração, operações e governança.
O que é o Kubernetes?
O Kubernetes é uma plataforma de orquestração altamente eficiente, extensível e portátil. Também conhecido como K8s, foi inicialmente desenvolvido pelo Google e atualmente é gerenciado pela Cloud Native Computing Foundation (CNCF), sendo a plataforma de orquestração mais popular do mercado.
Com o Kubernetes, é possível mover cargas de trabalho de forma eficiente para diferentes ambientes: infraestruturas locais, nuvens públicas ou ambientes híbridos. Seu objetivo é fornecer todas as ferramentas necessárias para lidar com as necessidades de orquestração e gerenciamento de infraestrutura.
Esta é a plataforma de orquestração mais popular do mercado, com provedores de serviços de nuvem como a Amazon Web Services e o Google Cloud Platform oferecendo serviços gerenciados de Kubernetes: Amazon Elastic Kubernetes Service (AWS EKS) e Google Kubernetes Engine (GKE), respectivamente.
Leia também: Primeiros passos com Kubernetes: uma introdução para iniciantes
Mas qual plataforma escolher para as suas necessidades de orquestração? Vamos descobrir comparando as duas soluções.
Nomad vs Kubernetes
#1. Instalação
A facilidade de instalação é um fator importante na escolha de qualquer ferramenta ou tecnologia de software. Ao comparar Nomad e Kubernetes, é essencial analisar como é fácil começar a trabalhar com cada um.
Nomad
Para instalar o Nomad, você precisa baixar um binário pré-compilado ou um pacote. Para uma instalação manual em sua máquina local, é possível baixar e instalar o binário oficial. No Linux, você pode instalar o pacote oficial. Após a instalação, basta configurar os plugins CNI (Container Network Interface) pela linha de comando.
O processo é ainda mais simples em sistemas MacOS ou Windows, utilizando ferramentas de gerenciamento de pacotes como Homebrew e Chocolatey, respectivamente. Com apenas um comando, a instalação estará completa, incluindo os plugins CNI.
Kubernetes
No caso do Kubernetes, existem diversos componentes e clientes que podem ser instalados, dependendo das necessidades. Há binários para cada componente e diferentes imagens de contêiner para diferentes tempos de execução e arquiteturas de sistema.
Você pode consultar o repositório oficial para baixar o binário que corresponde à sua plataforma (Darwin, Linux ou Windows) e à arquitetura do sistema. Após a instalação da imagem de contêiner correta, é necessário instalar o kubectl – a ferramenta de linha de comando para interagir com os contêineres.
#2. Escalabilidade
A escalabilidade é fundamental para cargas de trabalho em contêineres, pois determina a capacidade do sistema de lidar com cargas de trabalho crescentes. Uma boa plataforma de orquestração deve ser capaz de adicionar recursos de forma fácil e rápida.
Nomad
O Nomad já demonstrou ser capaz de executar clusters com mais de 10.000 nós em ambientes de produção. Em 2020, o Nomad realizou um teste de stress com 2 milhões de contêineres Docker em 6.100 hosts, em mais de 10 regiões diferentes da AWS, durante um período de 22 minutos, superando a marca anterior de 1 milhão de contêineres.
O Nomad também oferece escalonamento automático horizontal através do Nomad Autoscaler, que pode ser executado como um processo separado quando necessário.
Kubernetes
A partir da versão 1.28, o Kubernetes permite escalar um cluster até 5.000 nós, com um total de 150.000 pods ou 300.000 contêineres.
No entanto, manter um cluster Kubernetes escalável pode ser mais complexo do que gerenciar um cluster Nomad. O Nomad oferece uma vantagem sobre o Kubernetes no número total de nós que podem ser executados.
#3. Desempenho
Ao escolher uma plataforma de orquestração, é importante buscar um equilíbrio entre recursos e desempenho. O desempenho da plataforma também afeta o consumo de recursos do sistema.
Nomad
O Nomad tem um baixo consumo de recursos devido à sua abordagem de binário único. Além disso, não é necessário instalar serviços separados para que a plataforma de orquestração funcione. Consequentemente, o Nomad consome menos CPU e memória nos nós, resultando em menor sobrecarga e melhor desempenho.
O Nomad é altamente adaptável e pode lidar com diversas cargas de trabalho, seja em infraestruturas locais ou na nuvem. Sua simplicidade, resiliência e eficiência garantem um bom desempenho à medida que o cluster cresce.
Kubernetes
O Kubernetes é otimizado para cargas de trabalho em contêineres. Ele se destaca no gerenciamento de microsserviços baseados em contêineres, com seus recursos de rede e ampla gama de integrações, acelerando e ajustando as necessidades de orquestração.
Devido ao seu extenso conjunto de recursos e configurações, o Kubernetes tende a consumir mais recursos do sistema. À medida que o tamanho do cluster aumenta, pode ocorrer sobrecarga e complexidade adicionais na gestão.
#4. Rede
A rede é um aspecto crucial na orquestração de contêineres, pois determina como os nós se localizam e se comunicam.
Nomad
O Nomad tem um foco principal na orquestração de cargas de trabalho, com uma abordagem minimalista à configuração da rede, tentando modificar o mínimo possível.
Em vez de depender da infraestrutura, o Nomad trabalha com configurações. As informações necessárias são obtidas diretamente da configuração, evitando a necessidade de componentes extras como servidores DNS ou balanceadores de carga. A unidade base de escalonamento no Nomad, chamada Allocations, pode solicitar portas utilizando o bloco de rede.
Kubernetes
No Kubernetes, a rede é um elemento central, com controle sobre diversos aspectos: comunicação de contêiner para contêiner via localhost, comunicação de pod para pod, comunicação de pod para serviço e comunicação externa para serviço.
Comparado às portas dinâmicas do Nomad, o Kubernetes usa uma abordagem diferente. Ele utiliza a API de serviço como uma abstração para expor um grupo de pods à rede.
#5. Requisitos
Os requisitos de sistema para executar uma plataforma de orquestração em escala dependem do tamanho do cluster e das cargas de trabalho. Além de CPU e memória, recursos de rede também são essenciais.
Nomad
Para servidores de produção, é recomendado utilizar instâncias de máquinas com boa capacidade. É aconselhável que cada instância de servidor tenha entre 4 a 8+ núcleos de CPU, 16 a 32 GB+ de memória e 40 a 80 GB+ de disco rápido, além de uma largura de banda de rede significativa.
Se você estiver utilizando um firewall, é necessário garantir que as três portas do Nomad estejam permitidas: API HTTP (padrão 4646), usada por servidores e clientes, RPC (padrão 4647), usada para comunicação interna, e Serf WAN (padrão 4648), usada para comunicação entre servidores.
Kubernetes
Clusters Kubernetes podem se tornar bastante complexos em ambientes de produção altamente conteinerizados. No entanto, é recomendado manter cada nó com no mínimo 2 a 4 núcleos de CPU e 8 a 16 GB de RAM.
Em clusters maiores, podem ser necessários mais recursos por nó, além de uma largura de banda de rede adequada.
Embora tanto o Nomad quanto o Kubernetes possam ser dimensionados para atender às necessidades, um cluster Kubernetes tende a consumir mais recursos em comparação com o Nomad.
#6. Codificação
A facilidade de codificação afeta a eficiência com que você interage com a plataforma. Além de definir a plataforma e os trabalhos, também é necessário aprender os comandos da CLI para interagir com a ferramenta de linha de comando.
Nomad
O Nomad utiliza a HCL (HashiCorp Configuration Language) como sua principal linguagem de configuração. A HCL busca um equilíbrio entre legibilidade por humanos e facilidade de uso por máquinas. É possível escrever as especificações de trabalho, incluindo tarefas, restrições e dependências do aplicativo ou serviço.
Além disso, é necessário aprender os comandos da CLI da ferramenta de linha de comando do Nomad para interagir com o cluster e realizar configurações.
Kubernetes
No Kubernetes, as configurações são feitas por meio de arquivos YAML, ou também JSON. Estes arquivos permitem descrever facilmente como o aplicativo deve ser executado, incluindo especificações para pods, serviços, implantações e outros recursos.
Para aplicativos Kubernetes complexos, o Helm é um gerenciador de pacotes que permite definir, instalar e atualizar esses aplicativos. Os gráficos do Helm são escritos em YAML e podem incluir modelos e arquivos de valores para personalizar implantações.
Para interagir com o cluster Kubernetes, é utilizada a ferramenta de linha de comando kubectl, que permite criar, modificar e gerenciar recursos.
#7. Integração
As plataformas de orquestração oferecem um conjunto de integrações suportadas. Também é possível encontrar diversas integrações de terceiros para aumentar suas funcionalidades.
Nomad
O Nomad oferece integrações com várias ferramentas e tecnologias. Ele se conecta ao Docker e outros tempos de execução de contêineres, facilitando a implantação de aplicações em contêineres. Para o provisionamento de infraestrutura, ele integra-se com o Terraform, simplificando a criação de recursos.
Como parte do ecossistema da HashiCorp, o Nomad também se integra com o HashiCorp Consul para descoberta de serviços e verificações de integridade, enquanto o HashiCorp Vault garante o gerenciamento seguro de segredos. As necessidades de monitoramento são atendidas por meio de integrações com Prometheus, Grafana e ELK Stack. O Nomad também se adapta a pipelines de CI/CD, permitindo a implantação automatizada de aplicativos.
Kubernetes
O Kubernetes, sendo uma solução consolidada, oferece uma longa lista de tecnologias para integração. Ele se conecta ao Docker para implantações de contêineres. Para as necessidades de rede, é possível usar soluções como Calico ou Cilium. Opções de armazenamento como Ceph e provedores nativos da nuvem, como AWS EKS (Amazon Elastic Kubernetes Service) e Google GKE (Google Kubernetes Engine), gerenciam o armazenamento persistente. Provedores nativos da nuvem também fornecem serviços adicionais.
Para dar suporte a cargas de trabalho sem servidor, o Kubernetes oferece frameworks como Knative e KEDA (escalonamento automático baseado em eventos).
#8. GUI
Uma GUI (Interface Gráfica do Usuário) permite visualizar a plataforma em execução sem recorrer à linha de comando e ao código.
Nomad
O Nomad oferece uma UI Web integrada como parte do binário. Ao instalar e executar o servidor Nomad, a GUI, API e CLI ficam disponíveis. Não é necessária nenhuma configuração para começar a usar a UI e inspecionar o cluster.
Após iniciar o servidor Nomad, basta digitar o endereço do servidor no navegador para acessar a UI da Web. Existe também o subcomando “ui” para acessar a página desejada diretamente da interface de linha de comando.
Kubernetes
O Kubernetes não vem com uma GUI por padrão. No entanto, é possível instalá-la de acordo com as necessidades. O próprio Kubernetes oferece uma UI oficial chamada Dashboard, que pode ser instalada utilizando a ferramenta kubectl. O Dashboard oferece uma visão geral do cluster.
É possível implantar aplicações em contêineres em um cluster Kubernetes, gerenciar e solucionar problemas através desta interface. Provedores nativos da nuvem, como AWS EKS e Google GKE, oferecem suas próprias ferramentas de UI, e existem também ferramentas de terceiros.
Nomad vs Kubernetes: tabela de resumo
Recurso | Nomad | Kubernetes |
Instalação | Um único binário pré-compilado | Diferentes binários para diferentes componentes e clientes |
Escalabilidade | Capacidade de executar 10.000 nós e 2 milhões de contêineres | 5.000 nós e 300.000 contêineres no total |
Desempenho | Simples e eficiente com um baixo consumo de recursos | Conjunto de recursos extenso, mas com maior consumo de recursos |
Rede | Configuração simples com alocação dinâmica de portas | Controle refinado e sem dependência de portas dinâmicas |
Requisitos | Requisitos de sistema mais baixos para clusters maiores | Clusters maiores necessitam de mais recursos de sistema |
Codificação | HCL para configuração | YAML ou JSON para configuração |
Integração | Boas integrações oficiais e de terceiros | Ampla gama de integrações e ferramentas |
GUI | Interface web integrada | Necessidade de instalação separada |
Escolha a plataforma certa para suas necessidades de orquestração
A escolha entre Nomad e Kubernetes depende das necessidades e prioridades de cada projeto. Ambas as plataformas oferecem suporte a vários casos de uso, como agendamento de implantação, implementações e recuperações automatizadas, e descoberta e gerenciamento de cluster.
Se a simplicidade for a prioridade e você tiver uma carga de trabalho menor, o Nomad pode ser a melhor opção. Com seu binário único e requisitos mínimos de recursos, o Nomad é fácil de configurar e operar. Além disso, ele permite escalar o cluster para suportar um grande número de nós.
Por outro lado, se você precisa de um conjunto abrangente de recursos, controle refinado e uma ampla gama de integrações, o Kubernetes é a melhor solução. Ele oferece uma solução robusta para cargas de trabalho em contêineres e pode ser integrado a diversas ferramentas e tecnologias. Você também pode aproveitar as soluções gerenciadas fornecidas pela AWS e Google Cloud.
Outros fatores a serem considerados são a necessidade de aprender uma nova linguagem (HCL) no caso do Nomad, enquanto as configurações do Kubernetes funcionam com YAML ou JSON. Além disso, a presença de uma UI Web para facilitar o uso pode ser relevante.
Considere os recursos de sistema disponíveis e os custos associados a eles. A escolha da plataforma de orquestração entre Nomad e Kubernetes deve ser baseada nas suas necessidades, experiência e recursos.
A seguir, confira as práticas recomendadas do Kubernetes para uma melhor orquestração de contêineres.