Caro amigo, você construiu um Kubernetes
(macchaffee.com)-
Uma carta para um amigo
- Explica que, embora tenha tentado evitar o Kubernetes, acabou construindo um sistema parecido.
- O amigo escolheu uma "tecnologia entediante" e queria uma execução simples de contêineres, mas no fim surgiram problemas por causa de scripts e configurações complexas.
- Mesmo migrando para o Docker Compose, não é possível resolver tudo, e ele percebeu que seriam necessárias soluções separadas para implantação, atualizações contínuas, rollback e escalonamento.
-
Expansão de servidores e complexidade de rede
- Surge a necessidade de expandir para um segundo servidor.
- Tenta usar uma rede overlay como o Tailscale para descoberta de serviços.
- Esforça-se para resolver a complexidade da rede, mas acaba enfrentando ainda mais problemas.
-
Manutenção e automação
- Surge a pergunta: se a pessoa que criou os scripts entrar de férias ou sair da empresa, quem vai gerenciar as configurações complexas e as mudanças de configuração não documentadas?
- Para resolver os problemas de manutenção dos scripts customizados, usa o Ansible para tornar as VMs imutáveis e versionáveis.
- Acredita que, por não usar Kubernetes, será mais fácil fazer a manutenção.
-
Criação de contêineres e problemas de segurança
- Aparece a necessidade de criar programaticamente outros contêineres.
- Como montar o socket do Docker em uma aplicação web é um risco de segurança, ele escreve um serviço separado para resolver isso.
- Resolve o problema criando um serviço separado que expõe apenas a parte segura da API do Docker.
-
Conclusão
- No fim, percebe que acabou construindo um sistema semelhante ao Kubernetes.
- Conclui um sistema complexo que inclui formato padrão de configuração, método de implantação, rede overlay, descoberta de serviços, nós imutáveis e servidor de API
- No fim, percebe que acabou construindo um sistema semelhante ao Kubernetes.
-
PS
- Isso não significa negar a possibilidade de existirem soluções melhores para substituir o Kubernetes.
- Ainda assim, recomenda entender bem os problemas que ele tenta resolver antes de concluir que o Kubernetes é simplesmente complexo.
8 comentários
Não entendo muito bem essa ideia de adotar o Kubernetes para resolver a transferência de implantação.
A manutenção e a automação podem ser feitas facilmente em nível de código.
Infra as code também é possível.
Em ambientes de serviços gerenciados de k8s como o EKS, há load balancer e também é possível integrar com o Route 53, mas no k8s self-hosted não há implementação de load balancer e a integração com DNS também é limitada. Em empresas que têm uma equipe dedicada só para administrar k8s, as vantagens que você mencionou podem realmente ser válidas.
À primeira vista parece uma solução razoável, mas quando você realmente usa, ela não funciona em todas as situações.
É fácil de usar mesmo sem uma equipe para gerenciar o k8s. Basta usar o EKS.
Não é basicamente a mesma alegação de que, se você entregar só o código-fonte, a transferência de conhecimento está concluída? Ainda parece que o manual de trabalho e o histórico de execução das tarefas continuam sendo necessários.
Infra as Code em si existe justamente para tentar resolver tudo só entregando o código-fonte.
Ah, claro, como com qualquer código, a documentação básica precisa existir.
É possível se o código-fonte estiver bem escrito e a documentação for boa.
Ter um manual de trabalho e um histórico de execução das tarefas separados ajudaria, mas isso parece ser outra história, diferente deste texto.
Comentários do Hacker News
Já houve experiências bem-sucedidas de deploy em várias empresas usando scripts de shell
Kubernetes exige duas ou três pessoas dedicadas só para gerenciar arquivos YAML
A ideia de que o simples é frágil está errada
Há casos em que Kubernetes não é necessário
Com scripts de shell, dá para gerenciar facilmente regras de iptables e editar
sysctlCriticar Kubernetes é visto como algo pouco profissional
É errado supor que todas as limitações de sistemas feitos em casa são custo, e que toda a flexibilidade de soluções genéricas é uma vantagem
O problema do Kubernetes é que inúmeras bibliotecas open source tornam o sistema difícil de entender e causam bugs
Quem já passou da curva de aprendizado do Kubernetes diz que a complexidade não é tão ruim