Inicie seus estudos criando um Cluster Kubernetes local com Kind

Se você está aqui é porque está procurando uma forma rápida para criar clusters Kubernetes e dar início aos seus estudos sem se preocupar com o custo de infraestrutura em nuvem ou com um hardware robusto.

Neste post você vai aprender como criar um cluster de forma simples usando uma ferramenta chamada Kind. 

Sobre o Kind

O Kind é uma ferramenta que permite criar clusters Kubernetes local usando o Docker como infraestrutura, ou seja, no lugar de máquinas virtuais ele usa containers docker para fazer o deploy dos control-planes e worker-nodes. Isso significa que você pode usar o Docker instalado na sua máquina para criar um cluster Kubernetes sempre que precisar! Vamos começar?

Caso não tenha o docker instalado em seu computador, segue o passo a passo:

Passo 1 – Instalando o Kind

Abra o terminal e execute os seguintes comandos:

No Windows:

curl.exe -Lo kind-windows-amd64.exe https://kind.sigs.k8s.io/dl/v0.11.1/kind-windows-amd64Move-Item .\kind-windows-amd64.exe c:\some-dir-in-your-PATH\kind.exe

No MacOS:

curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.11.1/kind-darwin-amd64
chmod +x ./kind
mv ./kind /some-dir-in-your-PATH/kind

Também é possível instalar usando o Brew.sh no MacOS e o Chocolatey no Windows:

No Windows:

choco install kind

No MacOS:

brew install kind

Passo 2 – Instalando o kubectl

Para interagir com o cluster vamos precisar do kubectl, caso já tenha esta ferramenta pode pular este passo.

No Windows:

curl -LO "https://dl.k8s.io/release/v1.23.0/bin/windows/amd64/kubectl.exe"

kubectl version --client

No MacOS:

curl -LO "https://dl.k8s.io/release/v1.23.0/bin/darwin/amd64/kubectl"

chmod +x ./kubectl

sudo mv ./kubectl /usr/local/bin/kubectl
sudo chown root: /usr/local/bin/kubectl

kubectl version --client

Passo 3 – Preparando a configuração do cluster

Nosso cluster de exemplo terá um control-plane e dois workers-nodes, além disso, vamos deixá-lo preparado para usar um Registry Local que será criado logo em seguida.

Para facilitar nosso setup, vamos criar um arquivo de configuração contendo as características que precisamos. Crie um arquivo chamado cluster-config.yaml com o seguinte conteúdo:

kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
networking:
  apiServerAddress: "127.0.0.1"
  apiServerPort: 6443
containerdConfigPatches:
- |-
  [plugins."io.containerd.grpc.v1.cri".registry.mirrors."localhost:5000"]
    endpoint = ["http://registry:5000"]
nodes:
- role: control-plane
- role: worker
- role: worker

Passo 4 – Criando o cluster

Para criar o cluster execute o comando abaixo chamando o arquivo de configuração:

Nota: Antes de executar o comando certifique-se que seu docker está rodando. Na primeira vez este processo deve demorar alguns minutos porque as imagens docker do Kind precisam ser “baixadas”.

kind create cluster --config=cluster-config.yaml

Resultado:

Creating cluster "kind" ...
 ✓ Ensuring node image (kindest/node:v1.21.1) 🖼 
 ✓ Preparing nodes 📦 📦 📦  
 ✓ Writing configuration 📜 
 ✓ Starting control-plane 🕹️ 
 ✓ Installing CNI 🔌 
 ✓ Installing StorageClass 💾 
 ✓ Joining worker nodes 🚜 
Set kubectl context to "kind-kind"
You can now use your cluster with:

kubectl cluster-info --context kind-kind

Have a nice day! 👋

Passo 5 – Interagindo com o cluster

Abra o terminal e execute os seguintes comandos:

# Configura o contexto local para acessar o cluster
kubectl cluster-info --context kind-kind

# Lista todos os Pods, em todos os namespaces
kubectl get po -all-namespaces

O resultado esperado será parecido com o que vimos neste post: Como listar os Pods de todos namespaces

Passo 6 – Criando um registry local

Importante: Se você está usando o MacOS na última versão é preciso fazer um pequeno ajuste antes de executar o comando abaixo. Em seu macOS, navegue até a Maça -> System Preferences -> Sharing. E desabilite AirPlay Receiver

Agora que seu cluster foi criado, vamos criar um registry local para subir nossas imagens Docker. Execute os seguintes comandos para criar e verificar se está rodando:

# Cria um registry local
docker run -d -p 5000:5000 --restart=always --name registry registry:2

# Lista os containers 
docker ps -a | grep registry

Resultado:

7687573b6fb7   registry:2             "/entrypoint.sh /etc…"   About a minute ago   Up About a minute          0.0.0.0:5000->5000/tcp     registry

Passo 7 – Publicando uma imagem docker no registry

Vamos publicar uma imagem docker para o registry, essa imagem contém uma aplicação de exemplo que usaremos para o teste de deploy no cluster, execute os seguintes comandos:

# Download da imagem a partir do repositório do google
docker pull gcr.io/google-samples/hello-app:1.0

# Rotulando a imagem para o registry local
docker tag gcr.io/google-samples/hello-app:1.0 localhost:5000/hello-app:1.0

# Subindo a imagem para o registry local
docker push localhost:5000/hello-app:1.0

# colocando o kind e registry na mesma rede
docker network connect "kind" "registry" || true

Passo 7 – Deploy da aplicação no Kubernetes

# Faz o deploy da aplicação no cluster
kubectl create deployment hello-server --image=localhost:5000/hello-app:1.0

# Lista os pods criados no namespace default
kubectl get po

Resultado:

NAME                            READY   STATUS    RESTARTS   AGE
hello-server-64679d86dd-tnk5v   1/1     Running   0          4s

Conclusão

Seu ambiente para estudos e testes está pronto! Neste tutorial aprendemos:

  1. Como criar um cluster Kubernetes local usando uma ferramenta chamada Kind;
  2. Como criar um registry local usando o docker;
  3. Como fazer o deploy de uma aplicação no cluster que criamos.

Agora que tem um cluster para testes não tem desculpa, vamos praticar o máximo possível! Neste post Guia rápido Kubernetes – Os comandos mais usados por administradores! vc vai encontrar uma lista de comandos que vão ajudar você na sua jornada de aprendizado.

Espero que tenha gostado e até o próximo post!

Aproveitando… Faça parte da minha rede: www.linkedin.com/in/eduardofrancellino

Deixe um comentário

O seu endereço de e-mail não será publicado.