kubectl get nodes # deve mostrar docker-desktop Readykubectl config current-context # deve mostrar docker-desktopkubectl version --short
Nada mais a instalar: o kubectl vem com o Docker Desktop.
1. Construir a imagem
A partir da pasta do projeto (projet10-kubernetes-deploiements):
powershell
docker build -t demo-k8s:1.0 ./app
Com o Docker Desktop, a imagem local é diretamente visível pelo cluster (o mesmo daemon Docker). Por isso o manifesto usa imagePullPolicy: IfNotPresent.
kubectl get all # vista de conjuntokubectl get pods -o wide # os Pods (IP, nó, estado)kubectl get deployment demo-webkubectl get service demo-webkubectl describe deployment demo-web # detalhes + eventoskubectl describe pod <nom-du-pod> # detalhe de um Pod (probes, image, events)kubectl get pods --watch # acompanhar as alterações em direto (Ctrl+C para sair)
4. Testar a repartição de carga
Recarrega http://localhost:30080 várias vezes: o nome do Pod muda.
for i in $(seq 1 10); do curl -s -H "Accept: application/json" http://localhost:30080; echo; done
5. Mexer num Pod (exec, logs, port-forward)
powershell
kubectl logs <nom-du-pod> # logs de um Podkubectl logs -l app=demo-web --tail=20 # logs de TODOS os Pods do labelkubectl exec -it <nom-du-pod> -- sh # abrir um shell no Podkubectl exec <nom-du-pod> -- env # ver as variáveis de ambiente injetadaskubectl port-forward svc/demo-web 8080:80 # aceder ao Service via http://localhost:8080
6. Alterar a configuração (ConfigMap / fundo)
Edita k8s/configmap.yaml (ex. BG_COLOR: "#7c3aed").
Reaplica e relança os Pods para recarregar as variáveis:
# Scaling manualkubectl scale deployment demo-web --replicas=5kubectl get pods # 5 Pods agorakubectl scale deployment demo-web --replicas=3# Rolling update : altera APP_VERSION no ConfigMap e depoiskubectl apply -f k8s/configmap.yamlkubectl rollout restart deployment demo-webkubectl rollout status deployment demo-web # acompanha a implantação progressiva# Histórico e rollbackkubectl rollout history deployment demo-webkubectl rollout undo deployment demo-web # regressa à versão anterior
8. Auto-reparação
powershell
kubectl get podskubectl delete pod <nom-du-pod> # apaga-se um à mãokubectl get pods --watch # o Kubernetes recria outro automaticamente
9. Limpeza
powershell
kubectl delete -f k8s/ # apaga service + deployment + configmap# ou individualmente :kubectl delete service demo-webkubectl delete deployment demo-webkubectl delete configmap demo-config
Anexo A — minikube / kind
Se não usas o Kubernetes do Docker Desktop, a imagem local não é visível pelo cluster: é preciso carregá-la.
minikube:
powershell
minikube startminikube image load demo-k8s:1.0 # torna a imagem disponível no clusterkubectl apply -f k8s/minikube service demo-web --url # obtém o URL de acesso
kind:
powershell
kind create clusterkind load docker-image demo-k8s:1.0 # carrega a imagem no clusterkubectl apply -f k8s/kubectl port-forward svc/demo-web 8080:80 # http://localhost:8080
Anexo B — resolução de problemas
Sintoma
Causa provável
Solução
ErrImagePull / ImagePullBackOff
O cluster não encontra a imagem
Verificar imagePullPolicy: IfNotPresent + imagem demo-k8s:1.0 construída; em minikube/kind, carregar a imagem (Anexo A)
Pod em CrashLoopBackOff
A app falha no arranque
kubectl logs <pod> para ler o erro
Pod Pending
Recursos insuficientes
kubectl describe pod <pod> (secção Events)
localhost:30080 inacessível
Service não criado / porto errado
kubectl get svc; senão kubectl port-forward svc/demo-web 8080:80
O kubectl não responde
Contexto errado
kubectl config use-context docker-desktop
Sonda que falha
/health inatingível
Verificar o porto 5000 e a rota /health
powershell
# Diagnóstico rápidokubectl get events --sort-by=.lastTimestampkubectl describe pod <nom-du-pod>
Curso criado pelo Dr. Haythem REHOUMA — Desenvolvimento e implantação de soluções de dados