Garota em uma scooter. Ilustração de freepik , logotipo Nomad por HashiCorpKubernetes é um gorila de 300 kg para orquestração de contêineres. Ele funciona em alguns dos maiores sistemas de contêineres do mundo, mas é caro.
Especialmente caro para equipes pequenas que precisam gastar muito tempo com suporte e uma curva de aprendizado acentuada. Para nossa equipe de quatro pessoas, isso é demais. Então começamos a procurar alternativas - e nos apaixonamos pelo
Nomad .
O que voce quer
Nossa equipe oferece suporte a vários serviços típicos para monitorar e analisar o desempenho: pontos de extremidade da API para métricas Go, exportação de Prometheus, analisadores de log como Logstash e
Gollum , além de bancos de dados como InfluxDB ou Elasticsearch. Cada um desses serviços é executado em seu próprio contêiner. Precisamos de um sistema simples para manter tudo isso operacional.
Começamos com uma lista de requisitos para orquestração de contêiner:
- Inicie um conjunto de serviços em muitas máquinas.
- Visão geral dos serviços em execução.
- Comunicação entre serviços.
- Reinicialização automática se o serviço travar.
- Manutenção de infraestrutura por uma pequena equipe.
Além disso, as seguintes coisas serão boas, mas não as adições obrigatórias:
- Máquinas de marcação de acordo com suas capacidades (por exemplo, máquinas de marcação com discos rápidos para serviços pesados de E / S).
- A capacidade de iniciar serviços, independentemente da orquestra (por exemplo, durante o desenvolvimento).
- Um lugar comum para compartilhar configurações e segredos.
- Ponto final para métricas e logs.
Por que o Kubernetes não combina conosco
Ao criar um protótipo com o Kubernetes, percebemos que começamos a adicionar camadas de lógica cada vez mais complexas, nas quais dependíamos incondicionalmente.
Como um exemplo, o Kubernetes suporta configurações de serviço internas através do
ConfigMaps . Você pode se confundir rapidamente, especialmente ao mesclar vários arquivos de configuração ou adicionar serviços adicionais ao pod. O Kubernetes (ou
helm neste caso) permite implementar configurações externas dinamicamente para separar interesses. Mas isso leva a uma conexão secreta difícil entre seu projeto e o Kubernetes. No entanto, Helm e ConfigMaps são opções adicionais, portanto você não precisa usá-los. Você pode simplesmente copiar a configuração na imagem do Docker. No entanto, é tentador seguir esse caminho e criar abstrações desnecessárias, das quais você pode se arrepender mais tarde.
Além disso, o ecossistema Kubernetes está crescendo rapidamente. É preciso muito tempo e energia para manter-se atualizado com as melhores práticas e as ferramentas mais recentes. Kubectl, minikube, kubeadm, leme, leme, kops, oc - a lista continua. No início do trabalho, nem todas essas ferramentas são necessárias, mas você não sabe o que é necessário e, portanto, precisa estar ciente de tudo. Por esse motivo, a curva de aprendizado é bastante acentuada.
Quando usar o Kubernetes
Na nossa empresa, muitos usam o Kubernetes e estão muito felizes com isso. Essas instâncias são gerenciadas pelo Google ou Amazon, que possuem recursos de suporte suficientes.
O Kubernetes vem com
recursos incríveis que o tornam mais gerenciável e com a orquestração de contêineres em larga escala:
A questão é se você realmente precisa de todos esses recursos. Você não pode apenas confiar na abstração;
você tem que descobrir o que está acontecendo sob o capô .
Nossa equipe fornece a maioria dos serviços remotamente (devido à estreita conexão com a infraestrutura principal), portanto, não queremos criar nosso próprio cluster Kubernetes. Nós apenas queríamos prestar serviços.
Pilhas não incluídas
Nômade é 20% da orquestração, o que dá 80% do necessário. Tudo o que ele faz é gerenciar implantações. O Nomad cuida das implantações, reinicia os contêineres em caso de erros ... e é isso.
O ponto principal do Nomad é que ele faz um
mínimo : nenhum gerenciamento detalhado de direitos ou
políticas avançadas de rede são tão especialmente concebidas. Esses componentes são fornecidos ou não são fornecidos.
Acho que o Nomad encontrou o compromisso perfeito entre facilidade de uso e utilidade. É bom para serviços pequenos e independentes. Se você precisar de mais controle, precisará aumentá-los ou usar uma abordagem diferente. Nomad é
apenas uma orquestra.
A melhor coisa sobre o Nomad é que é fácil
de substituir . Praticamente não há vinculação ao fornecedor, pois suas funções são facilmente integradas a qualquer outro sistema que gerencia serviços. Funciona como um binário comum em todas as máquinas de um cluster, é isso!
Ecossistema nômade de componentes fracamente acoplados
O verdadeiro poder do Nomad em seu ecossistema. Ele se integra muito bem a outros produtos - completamente opcionais -, como
Consul (armazenamento de valor-chave) ou
Vault (processamento de segredos). Dentro do arquivo Nomad, existem seções para extrair dados desses serviços:
template { data = <<EOH LOG_LEVEL="{{key "service/geo-api/log-verbosity"}}" API_KEY="{{with secret "secret/geo-api-key"}}{{.Data.value}}{{end}}" EOH destination = "secrets/file.env" env = true }
Aqui lemos a chave
service/geo-api/log-verbosity
da Consul e no processo a representamos com a variável de ambiente
LOG_LEVEL
. Também representamos a
secret/geo-api-key
do Vault como
API_KEY
. Simples, mas poderoso!
Devido à sua simplicidade, o Nomad é facilmente extensível através de outros serviços através da API. Por exemplo, tags para tarefas são suportadas. Marcamos todos os serviços com métricas com a tag
trv-metrics
. Assim, o Prometheus encontra esses serviços com facilidade através do Consul e verifica periodicamente o terminal
/metrics
para novos dados. O mesmo pode ser feito, por exemplo, para logs usando o
Loki .
Existem muitos outros exemplos de extensibilidade:
- Executando o trabalho Jenkins com um gancho, e o Consul acompanha a reimplantação do trabalho Nomad quando a configuração do serviço é alterada.
- O Ceph adiciona um sistema de arquivos distribuído ao Nomad.
- fabio para balanceamento de carga.
Tudo isso permite que você
desenvolva organicamente a infraestrutura sem nenhuma ligação específica ao fornecedor.
Aviso honesto
Nenhum sistema é perfeito. Não recomendo a introdução imediata dos recursos mais recentes na produção. Obviamente, existem bugs e recursos ausentes, mas o mesmo vale para o Kubernetes.
Comparado a Kubernetes, a comunidade nômade não é tão grande. O Kubernetes já possui cerca de 75.000 confirmados e 2.000 colaboradores, enquanto o Nomad possui cerca de 14.000 confirmados e 300 colaboradores. Nômade será pressionado para acompanhar Kubernetes em velocidade, mas talvez isso não seja necessário! Este é um sistema mais especializado e uma comunidade menor também significa que sua solicitação de recebimento é mais provável de ser notada e aceita do que o Kubernetes.
Sumário
Conclusão: Não use o Kubernetes apenas porque todo mundo faz. Avalie cuidadosamente seus requisitos e verifique qual ferramenta é mais lucrativa.
Se você planeja implantar uma tonelada de serviços homogêneos em uma infraestrutura de larga escala, o Kubernetes é uma boa opção. Lembre-se da complexidade e dos custos de manutenção. Alguns dos custos podem ser evitados usando um ambiente gerenciado do Kubernetes, como o
Google Kubernetes Engine ou o
Amazon EKS .
Se você está procurando apenas um orquestrador confiável, fácil de suportar e expansível, por que não experimentar o Nomad? Você pode se perguntar até onde isso vai levar você.
Se você comparar o Kubernetes com um carro, o Nomad será uma scooter. Às vezes você precisa de um, e outras vezes. Ambos têm o direito de existir.