mikikube, kind e k3s como ambiente local de testes e desenvolvimento

project

Então, o que é K8s?

Apenas uma abreviatura de Kubernetes ("K" seguido por 8 letras "ubernete" seguidas por "s"). No entanto, normalmente, quando as pessoas falam sobre Kubernetes ou K8s, elas estão falando sobre o projeto original, projetado como uma plataforma altamente disponível e altamente escalonável pelo Google.

O problema é que, embora você possa executar o Kubernetes em sua máquina de desenvolvedor local com o minikube, se for executá-lo na produção, você entrará rapidamente no reino das "práticas recomendadas" com conselhos como:

Atualmente, existem algumas ferramentas que pretendem parcialmente substituir um cluster Kubernetes totalmente desenvolvido.

Cada desenvolvedor deve ter sua própria instância de cluster local em execução para realizar seus testes e laboratórios com ele, implantar seu aplicativos ou executar testes em aplicativos em execução em uma esteira CI/CD.

Neste artigo, daremos um panorama em três deles, comparando seus prós e contras e identificando casos de uso para cada um deles.

minikube

Solução que a documentação do projeto Kubernetes recomenda que você utilize, o qual implementa uma VM com um cluster com um node único.

Pode ser usado em todos os principais sistemas operacionais, isso também permite que você crie várias instâncias em paralelo.

Da perspectiva do usuário, o minikube é uma ferramenta amigável para iniciantes, inicia o cluster usando minikube start, aguarde um alguns minutos e seu kubectl está pronto para funcionar.

kind

Outra abordagem do Kubernetes SIG para implantar um cluster localmente, pois faz o uso de container docker e isso leva a uma velocidade de inicialização significativamente mais rápida em comparação com a geração da VM.

Criado antes de tudo para teste de conformidade e para uso em pipelines de CI, que oferecem alguns recursos interessantes, como a capacidade de carregar imagens Docker diretamente dentro do cluster sem a necessidade de enviar para um registry externo.

A criação de um cluster é muito semelhante à abordagem do minikube e um recurso que eu pessoalmente gosto é a capacidade de carregar imagens locais diretamente no cluster.

k3s

um cluster leve totalmente compatível. Para atingir esse minimalismo, alguns trade-offs são feitos, incluindo:

     - Armazenamento padrão para o Kube-apiserver usa SQLite em vez de etcd;

     - Componentes do plano de controle são empacotados em um único binário;

     - Números de dependências externas são mantidos sob controle;

Projetado para ser um único binário de menos de 40 MB que implementa completamente a API Kubernetes. Para conseguir isso, eles removeram muitos drivers extras que não precisavam fazer parte do núcleo e foram facilmente substituídos por complementos, pois é uma oferta de Kubernetes totalmente certificada pela CNCF (Cloud Native Computing Foundation). Isso significa que você pode escrever seu YAML para operar no Kubernetes, onde pode ser aplicado a um cluster K3s.

Devido aos seus baixos requisitos de recursos, é possível executar um cluster em máquinas de 512 MB de RAM para cima. Isso significa que podemos permitir que pods sejam executados no mestre, bem como nos nodes.

E, claro, como é um binário minúsculo, isso significa que podemos instalá-lo em uma fração do tempo necessário para iniciar um cluster normal do Kubernetes!

Geralmente alcançamos menos de dois minutos para iniciar um cluster k3s com vários nodes, o que significa que você pode implantar aplicativos para aprender ou testar de forma em geral.

Sua reputação e adoção também estão crescendo rapidamente, com quase 13 mil estrelas no Github desde seu lançamento no início de 2019, embora tenha sido recentemente coroado como a nova ferramenta de desenvolvedor número 1 de 2019 pela Stackshare.

Banco de dados padrão em node master do cluster é o SQLite, pois isso é ótimo para pequenos bancos de dados que não recebem muitos requests ou processamento, mas pode rapidamente se tornar um grande problema se estiverem sendo muito acessados!

No entanto, as mudanças que acontecem em um control plane do Kubernetes são mais sobre a atualização frequente de implantações, agendamento de pods etc. - portanto, a carga do banco de dados não é muito para um pequeno cluster de desenvolvimento ou de teste.

Pretende usar o k3s em plataforma mac, recomendamo o k3d, que seria o k3s rodando dentro de um docker.

O nome k3d significa K3s no Docker, pois conceitualmente seria semelhante ao Kind, porém ares. K3s é uma distribuição mais leve do Kubernetes projetada para ambientes leves e com recursos computacionais limitados.

Conclusão

Eu era um usuário de minikube de longa data, pois simplesmente não havia alternativas e para ser honesto, o mesmo faz um ótimo trabalho por ser um ambiente de desenvolvimento local do Kubernetes.

Você cria o cluster, espere alguns minutos e você está pronto para utilizar o mesmo. No entanto, para meus casos de uso (principalmente brincando com ferramentas que funcionam em K8s) eu poderia substituí-lo totalmente por um tipo devido ao tempo de configuração mais rápido.

Se você está trabalhando em um ambiente com um pool de recursos restrito ou precisa de um tempo de inicialização ainda mais rápido, o K3s é definitivamente uma ferramenta que você deve considerar.

Ao todo, essas três opções estão fazendo o trabalho ao mesmo tempo em que usam diferentes abordagens e se concentram em usos diferentes.

Espero que você tenha entendido melhor como eles funcionam e qual é o melhor candidato para resolver seu próximo problema.

Sinta-se à vontade para compartilhar sua experiência e me informar sobre os casos de uso que você está realizando com minikube, kind ou k3s.

  minikube kind k3s
Runtime VM Container Nativo
Arquitetura AMD64 AMD64 AMD64, ARMv7, ARM64
Suporta docker Docker, CRI-O, Containerd, gVisor Docker Docker, Containerd
Tempo de warm up 5 minutos 3 Minutos 2 minutos
Memória Requerida 2 GB 8 GB 512 MB
Root Requerido Não Não Sim, porém rootless está em fase experimental
Multi-Cluster Sim Sim Não, mas é alcançável via Agents
Multi-Nodes Não Sim Sim
Website https://minikube.sigs.k8s.io/ https://kind.sigs.k8s.io/ https://k3s.io/

Resume

Para quem não sabe, o Kubernetes é uma plataforma de orquestração de containers. Escolher em qual máquina executar esse container é o que apresentaremos neste artigo...

Technology