Skip to content
Voltar

Instalação e Configuração do Kind

Atualizado:

kind logo

kind.sigs.k8s.io

O Kind (Kubernetes IN Docker) é uma ferramenta que permite criar e executar clusters Kubernetes localmente usando containers Docker como nodes. Oferece uma maneira rápida e leve para construir um ambiente para desenvolvimento, testes e aprendizado. O Kind é especialmente útil para quem deseja simular estes ambientes multi-nodes de Kubernetes em uma única máquina.

Table of contents

Open Table of contents

Pré-requisitos

Criação da VM

Faça a instalação do sistema operacional com pacotes mínimos e apenas com interface de linha de comando


Particionamento Recomendado

O particionamento adequado ajuda na segurança e no gerenciamento de recursos, fiz dessa forma

Ponto de MontagemTamanhoOpções de Montagem
/5 GBdefaults
swap2 GB-
/home1 GBnodev,nosuid,noexec
/var/log1 GBdefaults
/tmp2 GBnodev,nosuid
/var/lib/dockerRestante - ≈ 30 GBdefaults

Nota: /var/lib/docker deve receber o espaço restante, pois armazenará as imagens de contêiner e volumes. Em ambientes de produção, este diretório terá o maior consumo de espaço

Configuração Inicial do Sistema

  1. Entre como administrador root

  2. Atualize o sistema

apt update && apt upgrade -y
  1. Instale e configure o servidor SSH
apt install openssh-server lynx -y
  1. Configure o SSH para maior segurança (opcional, mas recomendado)
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bkp
nano /etc/ssh/sshd_config
#PermitRootLogin prohibit-password
PermitRootLogin yes
systemctl enable ssh
systemctl restart ssh
  1. Acesse remotamente a VM via SSH
ssh root@<IP-MAQUINA>

💡 Dica: Agora você pode acessar a máquina e abrir os arquivos via VSCode. Instale a extensão Remote SSH, adicione o host com o usuário root - pra fazer instalação do vscode-server na máquina e tals.


Instalação de Dependências

apt install apt-transport-https ca-certificates \
  net-tools tcpdump wget curl gnupg lsb-release \
  git htop -y

Instalação do Docker

# Adicione a chave GPG oficial do Docker
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
chmod a+r /etc/apt/keyrings/docker.gpg

# Adicione o repositório do Docker
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  tee /etc/apt/sources.list.d/docker.list > /dev/null

# Instale o Docker
apt update
apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin -y

# Inicie e habilite o serviço Docker
systemctl enable docker --now

# Adicione seu usuário ao grupo docker (evita o uso constante de sudo)
usermod -aG docker suporte

Importante: Após adicionar seu usuário ao grupo docker, faça logout e login novamente para que as alterações tenham efeito, ou execute:

newgrp docker

Instalação do kubectl

# Obtenha a versão estável mais recente e instale o kubectl
KUBECTL_VERSION=$(curl -L -s https://dl.k8s.io/release/stable.txt)

curl -LO "https://dl.k8s.io/release/$KUBECTL_VERSION/bin/linux/amd64/kubectl"
curl -LO "https://dl.k8s.io/release/$KUBECTL_VERSION/bin/linux/amd64/kubectl.sha256"
echo "$(cat kubectl.sha256)  kubectl" | sha256sum --check

# Torne o binário executável e mova-o para o PATH
install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
rm kubectl
rm kubectl.sha256

# Verifique a instalação
kubectl version --client

Instalação do Kind

# Detecte a arquitetura e Baixe a versão adequada do Kind
ARCH=$(uname -m)

if [ "$ARCH" = "x86_64" ]; then
  curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.20.0/kind-linux-amd64
elif [ "$ARCH" = "aarch64" ] || [ "$ARCH" = "arm64" ]; then
  curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.20.0/kind-linux-arm64
else
  echo "Arquitetura não suportada: $ARCH"
  exit 1
fi

# Torne o binário executável e mova-o para o PATH
install -o root -g root -m 0755 kind /usr/local/bin/kind
rm kind

# Verifique a instalação
kind --version

Criação do Cluster

  1. Verifique seu endereço IP com ip a

  2. Crie um arquivo de configuração para o Kind

mkdir -p k8s
nano k8s/kind.yml
  1. Adicione a seguinte configuração do Cluster (ajuste conforme necessário)
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
  - role: control-plane
  - role: worker
  - role: worker
  - role: worker
  1. Crie o cluster
kind create cluster --config ./k8s/kind.yml --name bsi-devops
  1. Verifique se o cluster foi criado corretamente
kubectl cluster-info --context kind-bsi-devops

Criação do Pod

mkdir -p config
nano config/pod.yml
apiVersion: v1
kind: Pod
metadata:
  name: bsi-hello
  labels:
    app: bsi-hello
spec:
  containers:
    - name: bsi-hello
      image: eduardosilvasc/bsi-hello:latest
kubectl apply -f config/pod.yml
kubectl port-forward pod/bsi-hello 9000:9000 --address 0.0.0.0

Criação do Deployment

nano config/deploy.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: bsi-hello
  labels:
    app: bsi-hello
spec:
  replicas: 3
  selector:
    matchLabels:
      app: bsi-hello
  template:
    metadata:
      labels:
        app: bsi-hello
    spec:
      containers:
        - name: bsi-hello
          image: eduardosilvasc/bsi-hello:latest
kubectl apply -f config/deploy.yml
kubectl expose deployment bsi-hello --port 9000 --type NodePort
kubectl get svc bsi-hello

Criação do Service

nano config/service.yml
apiVersion: v1
kind: Service
metadata:
  name: bsi-hello-service
spec:
  selector:
    app: bsi-hello
  ports:
    - protocol: TCP
      port: 9000
      targetPort: 9000
      name: bsi-hello-service
kubectl apply -f config/service.yml
kubectl port-forward svc/bsi-hello-service 9000:9000 --address 0.0.0.0

Gerenciamento do Cluster (OPCIONAL)

Exportar configuração do cluster

kind get kubeconfig --name bsi-devops > kind-bsconfig
export KUBECONFIG=/caminho/para/kind-config
kubectl get nodes

Testar o cluster

# Criar um deployment de teste
kubectl create deployment nginx --image=nginx

# Expor o deployment
kubectl expose deployment nginx --port=80 --type=NodePort

# Verificar o serviço
kubectl get svc nginx

Remover o cluster

kind delete cluster --name bsi-devops
$ kubectl cluster-info --context kind-bsi-devops

error: context "kind-bsi-devops" does not exist

Persistência de Dados

  1. Configure volumes no manifesto do Kind
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
  - role: control-plane
    extraMounts:
      - hostPath: /caminho/na/maquina/host
        containerPath: /caminho/no/container
  1. Pode usar este volume em suas apps Kubernetes

Troubleshooting

  1. Erro de permissão ao usar Docker: Execute o comando a seguir

    newgrp docker
    • Ou reinicie a sessão
  2. Cluster não inicia: Verifique os logs

    docker logs kind-cluster-control-plane
  3. Problemas de rede: Verifique a configuração de rede do Docker

    docker network inspect kind
  4. Problemas de recursos: Verifique a utilização de recursos

    htop

Conclusão

Com isso, é possível configurar um ambiente básico Kubernetes local usando Kind. Este ambiente já é suficiente pra desenvolvimento, testes e aprendizado de Kubernetes sem a necessidade de infraestrutura complexa.

Algumas infos pra saber mais:



Próximo Post
Django no Render: Descomplicando o Deploy com Blueprints