Criando um cluster K8s local com Kind
Neste artigo, mostro como criar um cluster Kubernetes para desenvolvimento local usando as feramentas Kind e ctlptl.
Há vários casos em que é útil configurar um cluster Kubernetes local. Quando estamos aprendendo Kubernetes pela primeira vez, por exemplo, rodar a coisa toda localmente ajuda bastante. Ou talvez só queiramos testar alguma funcionalidade do Kubernetes sem impactar um cluster produtivo.
De um jeito ou de outro, precisamos escolher qual solução de cluster local usar, e temos várias a disposição:
Destas opções, a única que nunca testei foi o Microk8s. O Kind é bastante leve. Não tanto quanto o k3d, mas de longe, bem mais fácil de instalar e configurar. Neste artigo vamos focar no Kind.
#Kind
O Kind foi criado originalmente para testar o próprio Kubernetes. Ele roda nós do Kubernetes em containers Docker, e é útil para desenvolvimento local e até para CI.
#Instalação
Para instalar o Kind, é necessário ter instalados o Docker e o Go. O jeito mais fácil de instalar é rodando o seguinte comando no terminal:
O go get
vai colocar o kind
em $GOPATH/bin
. Pode ser que seja necessário adicionar o diretório do Kind no $Path
.
Na documentação do Kind, há outras formas instalar usando gerenciadores de pacotes, como através do Chocolatey no Windows ou do brew no Mac.
Uma vez instalado, estamos prontos para criar nosso primeiro cluster.
#Criando nosso primeiro cluster
Criar um novo cluster é tão fácil quanto rodar o comando kind create cluster
:

Também podemos criar outros clusters especificando o nome com o comando kind create cluster --name kind-2
.
E agora podemos listar nossos clusters com o comando kind get clusters
:

Listando os contêineres Docker com o comando docker ps
, podemos conferir que o Kind subiu um Control Plane do Kubernetes dentro de um container:

#Interagindo com um cluster Kind
Para interagir com um cluster Kind, basta especificar o nome do cluster como contexto no kubectl
:
Para conseguir fazer deploy no cluster de uma aplicação, primeiro precisamos carregar a imagem base nos nós do cluster usando o comando kind load
.
Para carregar uma imagem Docker, podemos usar o comando kind load docker-image minha-imagem-personalizada
. Por padrão, a imagem será carregada em todos os clusters, a não se que especifiquemos o cluster com o argumento --name <nome-cluster>
.
Alternativamente, podemos carregar um arquivo de imagens todo de uma vez usando o comando kind load image-archive /meu-arquivo-de-imagens.tar
. Esses arquivos podem ser gerados através do comando docker save [OPTIONS] imagem [imagem2...]
.
Isso permite um workflow como este:
#Trabalhando com um Docker Registry local
Existem duas formas de configurar um registro Docker local com o Kind. A primeira é executando um script disponibilizado na documentação:
Um jeito mais fácil, é utilizando a ferramenta ctlptl
.
#ctlptl
ctlptl
(pruncioado "cattle paddle") é uma CLI desenvolvida pelo time do Tilt para facilitar a configuração de clusters locais. Ele é compatível com Kind, Docker for Desktop e Minikube.
Pode ser instalado no Linux e Mac com Homebew:
E no Windows usando o Scoop:
Uma vez instalado, podemos usá-lo para criar um cluster Kind:
Ou melhor ainda, um cluster com um registry Docker já configurado:

Como pode ser visto na imagem acima, em adição ao processo de criação do cluster, o ctlptl
também criou um registry Docker, e imprimiu ao final instruções de como usá-lo.
O registry foi criado seguindo a mesma linha do script mais acima, com a diferença que o ctlptl
seleciona automaticamente uma porta disponível para o registry.

Agora podemos listar os clusters através do ctlptl
e conferir que o cluster e o repositório estão associados:

E agora o cluster Kind está pronto para ser usado.
Se quisermos excluir o cluster, isso pode ser feito facilmente através do comando ctlptl delete cluster nome-cluster
.