Criando um cluster Kubernetes com K3D

A instalação do Kubernetes é naturalmente em cluster, envolvendo pelo menos 2 nodos. Construir essa infraestrutura pode ser um desafio por si só e muitos acabam gastando dinheiro em alguma estrutura gerenciada como EKS, AKS ou GKS, mas isso não é necessário. Soluções como Minikube, kind ou k3d podem ser a melhor saída para começar a trabalhar com o k8s.

Soluções de instalação local

Instalar e configurar um cluster de Kubernetes pode ser um desafio além do necessário para quem está iniciando os estudos em Kubernetes. Por conta disso empresas existem soluções para instalação local.

A solução mais conhecida é o Minukube. Ela é baseada em maquinas virtuais, portanto ela depende de um Hyper-V, Hyperkit, VirtualBox e outros. Mas ele também pode ser instalado em containers com Docker ou Podman.

As soluções Kind e K3D só funcionam com sobre o Docker. Aparentemente também funciona com outros gerenciadores de container mas está numa fase experimental.

Esse artigo vai explicar como o K3D pode ser utilizado para a criação de um cluster com vários nós control-plane e vários nós worker.

Download do K3D

Nesse momento ao acessar o site da K3D ele me direciona para o link https://k3d.io/v5.4.1/ onde encontro vários métodos de download, seja para Windows, Linux ou Mac. Apenas para referência esse pode ser um método interessante para instalação em seu linux:

curl -s https://raw.githubusercontent.com/k3d-io/k3d/main/install.sh | bash

Criação do Cluster

Após instslado o programa, para criar o cluster é realmente bastante simples. A linha de comando a seguir cria o cluster com 3 workers. Além disso há a exposição da porta 31001 de dentro do cluster para fora através da porta 80. Essa última configuração é opicional mas pode ser útil se houver o interesse de publicar alguma porta do cluster para acesso de fora dele.

Vale ressaltar que se houver a necessidade da criação e exposição de um serviço não será possível acessar por fora do cluster, mesmo com port-foreward, caso essa porta não esteja indicada na configuração do cluster. Esse é um problema dessa solução, mas acho que vale a pena mesmo assim. Mas se você preferir utilizar um GKE por exemplo você não terá problemas desse tipo

k3d cluster create meucluster -a 3 -p 31001:80

Como verificar se tudo foi criado corretamente

A primeira coisa a fazer é verificar o seu Docker. Os containers devem estar criados e rodando, sem quaisquer problemas. Para verificar basta rodar o comando a seguir. Você deve observar container com nomes k3d-meucluster-agent-2, por exemplo

docker ps

Após isso você deve verificar como está o seu kubernetes. Para isso execute a linha de comando Kubectl (caso não tenha instalado: https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/). Ao rodar essa linha você conseguir observar o control-plane e os nodes worker criados.

kubectl get nodes

thiago@DESKTOP-9K9JS06:~$ kubectl get nodes
NAME                      STATUS   ROLES                  AGE     VERSION
k3d-meucluster-server-0   Ready    control-plane,master   8m13s   v1.23.8+k3s1
k3d-meucluster-agent-1    Ready    <none>                 8m9s    v1.23.8+k3s1
k3d-meucluster-agent-2    Ready    <none>                 8m9s    v1.23.8+k3s1
k3d-meucluster-agent-0    Ready    <none>                 8m10s   v1.23.8+k3s1

para finalizar um teste um pouco mais prático pode ser feito para ter certeza que ele realmente está funcionando. Utilize as seguintes linhas de comando e veja se é possível acessar um container de um pod com o nginx.

kubectl run nginx --image=nginx

kubectl get pods
# NAME    READY   STATUS    RESTARTS   AGE
# nginx   1/1     Running   0          5s

kubectl exec -it nginx -- bash

## -------------------------------------------------------

ls 
# bin  boot  dev  docker-entrypoint.d  docker-entrypoint.sh  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

Conclusão

Com esse artigo você aprendeu um pouco sobre o kubernetes e como criar um cluster de forma simples.


Thiago Anselme
Thiago Anselme - Gerente de TI - Arquiteto de Soluções

Ele atua/atuou como Dev Full Stack C# .NET / Angular / Kubernetes e afins. Ele possui certificações Microsoft MCTS (6x), MCPD em Web, ITIL v3 e CKAD (Kubernetes) . Thiago é apaixonado por tecnologia, entusiasta de TI desde a infância bem como amante de aprendizado contínuo.

Deixe um comentário