Contents

Kubernetes - Criando um cluster local com Kind

Olá pessoal

Hoje vou demonstrar como baixar, instalar e configurar o Kind, uma forma de construir um Cluster local do Kubernetes.

O que é?

O Kind é uma ferramenta para executar clusters locais do Kubernetes usando “nós” de contêiner Docker. Kind foi projetado principalmente para testar o próprio Kubernetes, mas pode ser usado para desenvolvimento local ou CI.

Como é o Kind?

Ele consiste em:

  • Pacotes Go que implementam criação de cluster, construção de imagem, etc.
  • Uma interface de linha de comando (kind) construída sobre esses pacotes.
  • Imagens Docker escritas para executar systemd, Kubernetes, etc.
  • A integração do kubetest também construída nesses pacotes (WIP) tipo bootstrap cada em “nó” com kubeadm.

O Kind ainda é um trabalho em em construção. Para acompanhar, consulte 1.0 Roadmap

Instalação

Para seguir o passo a passo de instalação, utilize o manual de instação. Para o nosso ambiente, vou demonstrar usando o modo via binários no Linux.

Antes de escutar a criação do cluster, você precisa ter instalado o Docker ou o Podman em sua máquina.

Bora instalar o Kind.

Execute:

# para AMD64/x86_64

[ $(uname -m) = x86_64 ] && curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.22.0/kind-linux-amd64

# Para ARM64
[ $(uname -m) = aarch64 ] && curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.22.0/kind-linux-arm64
chmod +x ./kind
sudo mv ./kind /usr/local/bin/kind

Criando nosso cluster local

Antes de criar o nosso cluster, vamos criar um arquivo yaml com as informações do nosso cluster.

kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
name: sparta
nodes:
  - role: control-plane
  - role: worker
  - role: worker

Execute o comando de criar o cluster usando o arquivo de configuração que criamos:


$ kind create cluster --config cluster.yaml

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

kubectl cluster-info --context kind-sparta

Have a nice day! 

Feito, agora visualize que o nosso cluster está em execução localmente com o cluster-info

$ kubectl cluster-info --context kind-sparta

Kubernetes control plane is running at https://127.0.0.1:39911
CoreDNS is running at https://127.0.0.1:39911/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.

Listando nodes criados

Agora que passamos da etapa de criação do nosso cluster local, vamos listar os nós criados e visualizar suas informações.

Listando nós:

$ kubectl get nodes

NAME                   STATUS   ROLES           AGE     VERSION
sparta-control-plane   Ready    control-plane   3m51s   v1.29.2
sparta-worker          Ready    <none>          3m28s   v1.29.2
sparta-worker2         Ready    <none>          3m27s   v1.29.2

Visualizando informações de um dos nodes:


$ kubectl describe node sparta-control-plane

Name:               sparta-control-plane
Roles:              control-plane
Labels:             beta.kubernetes.io/arch=amd64
                    beta.kubernetes.io/os=linux
                    kubernetes.io/arch=amd64
                    kubernetes.io/hostname=sparta-control-plane
                    kubernetes.io/os=linux
                    node-role.kubernetes.io/control-plane=
                    node.kubernetes.io/exclude-from-external-load-balancers=
Annotations:        kubeadm.alpha.kubernetes.io/cri-socket: unix:///run/containerd/containerd.sock
                    node.alpha.kubernetes.io/ttl: 0
                    volumes.kubernetes.io/controller-managed-attach-detach: true
CreationTimestamp:  Thu, 22 Feb 2024 15:53:11 -0300
Taints:             node-role.kubernetes.io/control-plane:NoSchedule
Unschedulable:      false

(...)

Criando nosso primeiro deploy

Agora que visualizamos as informações dos nodes, vamos realizar um deploy para teste.

Criando deploy

$ kubectl create deploy webserver --image nginx

deployment.apps/webserver created

Validando aplicação:

Crie um port-forward:


$ kubectl port-forward webserver-667ddc69b6-5qnp2 8081:80

Forwarding from 127.0.0.1:8081 -> 80
Forwarding from [::1]:8081 -> 80

Agora, execute um curl em outro terminal no endereço http://127.0.0.1:8081

$ curl http://127.0.0.1:8081 

<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

Feito, viram como foi tranquilo a criação de um cluster local com o Kind e ainda realizar um deploy? Rápido, leve e prático.

Espero que vocês tenham gostado do post prático de hoje. Nos veremos em breve.

Se púderem, compartilhem em suas redes sociais.

Abraço.

Referências

https://kind.sigs.k8s.io/