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:
- Como criar um cluster Kubernetes local usando uma ferramenta chamada Kind;
- Como criar um registry local usando o docker;
- 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