Introdução
Vivemos em uma era onde simular ambientes de produção durante o desenvolvimento é viável e acessível. Antes do 🐳 Docker, lançado em 2013, máquinas virtuais eram necessárias para iniciar projetos, tornando a configuração complexa e impactando o desempenho. Hoje, ferramentas como Kubernetes facilitam essa replicação sem as limitações de antes.
Para desenvolvimento local, existem várias opções que permitem replicar um ambiente de produção em sua máquina. Uma das mais populares é o Kind, que exploraremos neste artigo.
E chega de “funciona na minha máquina”…
Mas afinal, o que é KIND?
Kind (Kubernetes in 🐳 Docker) é uma ferramenta open source desenvolvida para simplificar a criação de clusters ☸️ Kubernetes, utilizando Docker “por baixo dos panos” para emular nós de rede. Embora tenha sido criada inicialmente para testes do próprio ecossistema Kubernetes, tornou-se essencial para o desenvolvimento de aplicações e processos de integração contínua (CI).
Por que eu optaria por KIND em vez de K3s ou Minikube?
O kind oferece uma série de benefícios importantes para desenvolvedores que precisam de um ambiente ☸️ Kubernetes local eficaz e seguro. As vantagens são as seguintes:
Simplicidade e Rapidez na Configuração: Criar um cluster no kind é extremamente simples. Com um gerenciador de containers 📦 instalado (🐳 Docker, Podman ou nerdctl), você pode provisionar um cluster completo com um único comando:
kind create cluster.Eficiência de Recursos: Diferentemente de outras ferramentas que usam máquinas virtuais, o kind utiliza containers 📦 Docker como “nós” do cluster, oferecendo maior leveza e desempenho. Isso o torna ideal para desenvolvimento local e ambientes de Integração Contínua (CI).
Suporte a Topologias Avançadas: Permite a criação de clusters multi-nó totalmente configuráveis conforme suas necessidades.
Compatibilidade Multiplataforma: Funciona nativamente em sistemas 🐧 Linux, 🍎 macOS e 🪟 Windows.
Desenvolvimento e Testes do Próprio Kubernetes: O kind foi projetado originalmente para testar o Kubernetes. Ele permite que desenvolvedores criem clusters a partir do código-fonte do Kubernetes e construam suas próprias imagens de nó customizadas.
Conformidade Certificada: Certificado pela CNCF (Cloud Native Computing Foundation), garantindo que seu ambiente local seja totalmente fiel aos padrões e especificações do Kubernetes.
Ambiente de Teste Versátil: Sua arquitetura o torna ideal para fluxos de CI (Integração Contínua), permitindo testes automatizados em clusters efêmeros e descartáveis.
Leitura Recomendada
Se você está interessado em explorar outras opções para criar ambientes ☸️ Kubernetes locais, confira meu artigo sobre K3s:
Como instalar o KIND?
Via Go
go install sigs.k8s.io/[email protected]
Via Package Manager
macOS:
brew install kind
Arch:
pacman -S kind
Instalação manual
# AMD64 / x86_64
[ $(uname -m) = x86_64 ] && curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.31.0/kind-linux-amd64
# ARM64
[ $(uname -m) = aarch64 ] && curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.31.0/kind-linux-arm64
chmod +x ./kind
sudo mv ./kind /usr/local/bin/kind
Criando um cluster local
Antes de criar nosso cluster, é importante entender dois componentes fundamentais do ☸️ Kubernetes:
Control Plane: O “cérebro” do cluster, responsável por gerenciar o estado geral, orquestração de containers 📦, agendamento de pods e decisões sobre o cluster.
Data Plane (Worker Nodes): Os “músculos” do cluster, onde os containers 📦 são efetivamente executados. Recebem as instruções do Control Plane e executam as aplicações.
Neste exemplo, criaremos um cluster com dois nós Control Plane e um Data Plane para maior resiliência e distribuição de carga.
Bora para a parte prática ⚡
💡 Se preferir, você pode clonar o repositório completo depois para ver tudo funcionando em sua máquina local.
Pré-requisitos
Antes de começar, certifique-se de que você possui:
- Docker (ou Podman/nerdctl) instalado e em execução
- Kind instalado (confira a seção de instalação acima)
- kubectl instalado para gerenciar o cluster
Com o kind e Docker instalados, prepararemos o ambiente com os seguintes arquivos:
- kind-cluster.yaml
Este arquivo contém as configurações do cluster Kind. Nele definimos dois nós: um control-plane e um worker. No nó worker, adicionamos um mapeamento de porta para facilitar testes locais na porta 8080 e aplicamos patches para adicionar labels, permitindo que as aplicações sejam direcionadas ao nó worker através de seletores de nó.
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
name: kind-lab
nodes:
- role: control-plane
- role: worker
extraPortMappings:
- containerPort: 30080
hostPort: 8080
protocol: TCP
kubeadmConfigPatches:
- |
kind: JoinConfiguration
nodeRegistration:
kubeletExtraArgs:
node-labels: "app-purpose=apps"
- whoami.yaml
Temos um arquivo de deployment completo que contém as especificações do pod 📦 e do serviço. Ele define um container simples que responde a requisições HTTP na porta 8080 dentro do cluster, expondo um serviço na porta 30080 para o pod.
apiVersion: v1
kind: Pod
metadata:
name: whoami
labels:
app-purpose: apps
spec:
containers:
- name: whoami
image: traefik/whoami
ports:
- containerPort: 80
nodeSelector:
app-purpose: apps
---
apiVersion: v1
kind: Service
metadata:
name: whoami
spec:
type: NodePort
selector:
app-purpose: apps
ports:
- name: http
port: 80
targetPort: 80
nodePort: 30080
Agora vamos colocar tudo em prática. Com esses dois arquivos, podemos criar o cluster e aplicar os deployments:
kind create cluster --name kind-lab --config kind-cluster.yaml
Em seguida, configure o contexto do kubectl para usar seu novo cluster local:
kubectl config use-context kind-kind-lab
Verifique os nós criados com:
kubectl get nodes -o wide
Resultado esperado:
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
kind-lab-control-plane Ready control-plane 23m v1.35.0 172.18.0.2 <none> Debian GNU/Linux 12 (bookworm) 6.18.7-arch1-1 containerd://2.2.0
kind-lab-worker Ready <none> 23m v1.35.0 172.18.0.3 <none> Debian GNU/Linux 12 (bookworm) 6.18.7-arch1-1 containerd://2.2.0
Suba a aplicação:
kubectl apply -f whoami.yaml
Aguarde alguns segundos e verifique se o pod está em execução:
kubectl get pods -o wide
Resultado esperado:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
whoami 1/1 Running 0 1m 10.X.X.X kind-lab-worker <none> <none>
Você pode testar a aplicação que deve estar rodando 👂 na porta 8080:

Troubleshooting e comandos úteis 🔧
Durante o desenvolvimento com Kind, você pode encontrar alguns problemas comuns. Aqui estão soluções e comandos úteis:
Problemas comuns
Porta 8080 já está em uso:
# Verificar o que está usando a porta
sudo lsof -i :8080
Docker não está rodando:
# Verificar status do Docker
sudo systemctl status docker
# Iniciar Docker
sudo systemctl start docker
Cluster não inicia ou demora muito:
# Ver logs detalhados do cluster
kind create cluster --name kind-lab --config kind-cluster.yaml --verbosity=3
# Verificar se há containers do Kind rodando
docker ps -a | grep kind
Comandos úteis para debug
# Ver logs do pod
kubectl logs whoami
# Seguir logs em tempo real
kubectl logs -f whoami
# Acessar terminal do pod
kubectl exec -it whoami -- sh
# Listar todos os clusters Kind
kind get clusters
# Ver detalhes do cluster
kubectl cluster-info --context kind-kind-lab
# Descrever pod (útil para ver eventos e erros)
kubectl describe pod whoami
# Exportar configuração do cluster
kind export kubeconfig --name kind-lab
Limpeza 🧹
Para remover o cluster, execute:
kind delete cluster --name kind-lab
Repositório 📂
Como sempre, a implementação completa está disponível no meu repositório do GitHub. Você pode clonar o projeto e testá-lo em seu ambiente local. Para mais detalhes sobre configuração e uso, consulte o README do repositório.
😺 GitHub - williampsena/kube-recipes
Conclusão
Neste artigo, exploramos o kind, uma excelente opção para simular ambientes ☸️ Kubernetes em sua máquina local. Este guia teve como objetivo facilitar a criação de clusters e inspirar você a explorar novas possibilidades no desenvolvimento com Kubernetes.
Que Deus 🕊️ te abençoe, e não se esqueça: mantenha seu kernel 🧠 sempre atualizado!





