Arquitetura do cluster e o loop de reconciliação
Objetivos desta aula
- Entender control plane e nós
- Criar um cluster local
- Navegar recursos com kubectl
Kubernetes funciona por reconciliação: você declara o estado desejado no API server, o etcd guarda, os controllers comparam com o real e agem até convergir. Entender isso explica por que apagar um pod à mão o faz voltar — o Deployment quer três réplicas e o controller obedece a essa vontade, não à sua.
No control plane estão API server, etcd, scheduler e controller manager; em cada nó, kubelet (executa e reporta), container runtime e kube-proxy (rede de serviços). Diagnóstico começa sempre por eventos e status, que refletem o que os controllers viram.
Kind cria um cluster completo em containers Docker, ideal para aprender e para CI. Comece dominando kubectl get/describe/logs/exec e o uso de namespaces — a maior parte do trabalho diário está nesses cinco comandos.
1. Por que Kubernetes existe
Rodar um contêiner é fácil; rodar centenas, em várias máquinas, reiniciando os que caem, distribuindo carga e trocando versões sem parar o serviço, não é. O Kubernetes é um orquestrador: você descreve o estado desejado e ele trabalha sem parar para que a realidade fique igual à descrição.
2. Control plane: o cérebro
- kube-apiserver: a única porta de entrada; tudo (kubectl, controllers, kubelet) conversa com ele
- etcd: banco chave-valor com todo o estado do cluster — faça backup
- kube-scheduler: escolhe em qual nó cada Pod vai rodar
- kube-controller-manager: roda os controllers (Deployment, ReplicaSet, Node…)
3. Nós de trabalho: os músculos
Cada nó roda o kubelet (garante que os contêineres do Pod estão de pé), o container runtime (containerd) e o kube-proxy ou um CNI com eBPF (regras de rede dos Services).
4. O loop de reconciliação
Todo controller faz o mesmo ciclo: observar o estado atual → comparar com o desejado → agir para diminuir a diferença → repetir. Se você apaga um Pod de um Deployment com 3 réplicas, o ReplicaSet percebe que há 2 e cria outro. Isso é o que torna o sistema auto-curável.
5. Declarativo vs imperativo
kubectl run é imperativo ("faça isto agora"). kubectl apply -f é declarativo ("quero que seja assim"). Em produção use sempre declarativo e versionado em Git — é a base do GitOps do próximo módulo.
6. Namespaces e contexto
Namespaces separam times e ambientes dentro do cluster (quota, RBAC, nomes). Sempre confira o contexto com kubectl config current-context antes de um comando destrutivo — aplicar em produção achando que é dev é um erro clássico.
7. Checagem final
Você deve explicar o caminho de um kubectl apply até o contêiner rodar: apiserver grava no etcd → scheduler escolhe nó → kubelet do nó puxa a imagem e inicia o contêiner.
Na prática
Cluster local com Kind e navegação
bash
cat > kind.yaml <<'EOF'
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
kubeadmConfigPatches:
- |
kind: InitConfiguration
nodeRegistration:
kubeletExtraArgs:
node-labels: "ingress-ready=true"
extraPortMappings:
- { containerPort: 80, hostPort: 80 }
- { containerPort: 443, hostPort: 443 }
- role: worker
EOF
kind create cluster --name cloudshop --config kind.yaml
kubectl cluster-info
kubectl get nodes -o wide
kubectl create namespace cloudshop
kubectl config set-context --current --namespace=cloudshop
kubectl get all
kubectl api-resources | head -20
kubectl explain deployment.spec.strategy
kubectl get events --sort-by=.lastTimestamp | tail -20Explorando o cluster pela primeira vez
bash
kind create cluster --name cloudshop # cluster local em Docker
kubectl get nodes -o wide # nós, versão e IPs
kubectl get pods -n kube-system # componentes do control plane
kubectl api-resources | head # tipos de objeto que o cluster conhece
kubectl explain deployment.spec.replicas # documentação de qualquer campo
# Veja a reconciliação acontecer:
kubectl create deployment web --image=nginx --replicas=3
kubectl delete pod -l app=web --wait=false
kubectl get pods -l app=web -w # novos Pods aparecem sozinhosPor que isso importa
Sem o modelo de reconciliação na cabeça, você briga com o cluster em vez de operá-lo.
Erro comum
Deletar pods esperando que fiquem deletados, sem alterar o Deployment.
Dica de produção
Use namespaces por ambiente/equipe desde o início; migrar depois é trabalhoso.
Alerta de segurança
kubeconfig é credencial de cluster: proteja com permissão 600 e nunca comite.
Pergunta de entrevista
Explique o que acontece entre kubectl apply e o pod rodando.
Glossário
- reconciliação
- Ciclo contínuo que aproxima o estado real do estado declarado.
- kubelet
- Agente em cada nó que executa containers e reporta status ao control plane.
- etcd
- Banco chave-valor distribuído que guarda todo o estado do cluster.
- kubelet
- Agente em cada nó que executa e vigia os contêineres dos Pods.
- Reconciliação
- Ciclo contínuo de comparar estado desejado e atual e corrigir a diferença.
- Namespace
- Divisão lógica do cluster para isolar nomes, permissões e quotas.
Conexão com o CloudShop
Criar o cluster local onde o CloudShop será migrado.
Quiz da aula
1. Você apaga um pod gerenciado por Deployment. O que acontece?
2. Você apaga manualmente um Pod de um Deployment com 3 réplicas. O que acontece?
3. Qual componente decide em qual nó um Pod vai rodar?
Minhas anotações
Salvo automaticamente neste navegador.