Cartão de referência dos comandos — Kubernetes

3 min

Projeto projet10-kubernetes-deploiements · todos os comandos para arrancar, testar e mexer no cluster.

Índice


0. Ativar o Kubernetes (Docker Desktop)

Docker Desktop → Settings (⚙️) → Kubernetes → ✅ Enable Kubernetes → Apply & Restart.

powershell
kubectl get nodes                 # deve mostrar docker-desktop  Ready
kubectl config current-context    # deve mostrar docker-desktop
kubectl 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.


2. Implantar a aplicação

powershell
kubectl apply -f k8s/                 # aplica configmap + deployment + service

Ou ficheiro a ficheiro:

powershell
kubectl apply -f k8s/configmap.yaml
kubectl apply -f k8s/deployment.yaml
kubectl apply -f k8s/service.yaml

Depois abre o navegador: http://localhost:30080


3. Observar (pods, services, deployments)

powershell
kubectl get all                       # vista de conjunto
kubectl get pods -o wide              # os Pods (IP, nó, estado)
kubectl get deployment demo-web
kubectl get service demo-web
kubectl describe deployment demo-web  # detalhes + eventos
kubectl 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.

Em linha de comandos (PowerShell):

powershell
1..10 | ForEach-Object { (Invoke-WebRequest -Headers @{Accept="application/json"} http://localhost:30080).Content }

Em bash:

bash
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 Pod
kubectl logs -l app=demo-web --tail=20        # logs de TODOS os Pods do label
kubectl exec -it <nom-du-pod> -- sh           # abrir um shell no Pod
kubectl exec <nom-du-pod> -- env              # ver as variáveis de ambiente injetadas
kubectl port-forward svc/demo-web 8080:80     # aceder ao Service via http://localhost:8080

6. Alterar a configuração (ConfigMap / fundo)

  1. Edita k8s/configmap.yaml (ex. BG_COLOR: "#7c3aed").
  2. Reaplica e relança os Pods para recarregar as variáveis:
powershell
kubectl apply -f k8s/configmap.yaml
kubectl rollout restart deployment demo-web
kubectl rollout status deployment demo-web
  1. Recarrega a página: o fundo mudou.

Ver o valor ativo num Pod:

powershell
kubectl exec <nom-du-pod> -- env | Select-String BG_COLOR

7. Scaling, rolling update, rollback

powershell
# Scaling manual
kubectl scale deployment demo-web --replicas=5
kubectl get pods                              # 5 Pods agora
kubectl scale deployment demo-web --replicas=3

# Rolling update : altera APP_VERSION no ConfigMap e depois
kubectl apply -f k8s/configmap.yaml
kubectl rollout restart deployment demo-web
kubectl rollout status deployment demo-web    # acompanha a implantação progressiva

# Histórico e rollback
kubectl rollout history deployment demo-web
kubectl rollout undo deployment demo-web      # regressa à versão anterior

8. Auto-reparação

powershell
kubectl get pods
kubectl delete pod <nom-du-pod>               # apaga-se um à mão
kubectl 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-web
kubectl delete deployment demo-web
kubectl 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 start
minikube image load demo-k8s:1.0             # torna a imagem disponível no cluster
kubectl apply -f k8s/
minikube service demo-web --url              # obtém o URL de acesso

kind:

powershell
kind create cluster
kind load docker-image demo-k8s:1.0          # carrega a imagem no cluster
kubectl apply -f k8s/
kubectl port-forward svc/demo-web 8080:80    # http://localhost:8080

Anexo B — resolução de problemas

SintomaCausa provávelSolução
ErrImagePull / ImagePullBackOffO cluster não encontra a imagemVerificar imagePullPolicy: IfNotPresent + imagem demo-k8s:1.0 construída; em minikube/kind, carregar a imagem (Anexo A)
Pod em CrashLoopBackOffA app falha no arranquekubectl logs <pod> para ler o erro
Pod PendingRecursos insuficienteskubectl describe pod <pod> (secção Events)
localhost:30080 inacessívelService não criado / porto erradokubectl get svc; senão kubectl port-forward svc/demo-web 8080:80
O kubectl não respondeContexto erradokubectl config use-context docker-desktop
Sonda que falha/health inatingívelVerificar o porto 5000 e a rota /health
powershell
# Diagnóstico rápido
kubectl get events --sort-by=.lastTimestamp
kubectl describe pod <nom-du-pod>

Curso criado pelo Dr. Haythem REHOUMA — Desenvolvimento e implantação de soluções de dados