Hoja de trucos — Comandos de Kubernetes

3 min

Proyecto projet10-kubernetes-deploiements · todos los comandos para arrancar, probar y manipular el clúster.

Tabla de contenidos


0. Activar Kubernetes (Docker Desktop)

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

powershell
kubectl get nodes                 # debe mostrar docker-desktop  Ready
kubectl config current-context    # debe mostrar docker-desktop
kubectl version --short

No hay que instalar nada más: kubectl viene con Docker Desktop.


1. Construir la imagen

Desde la carpeta del proyecto (projet10-kubernetes-deploiements):

powershell
docker build -t demo-k8s:1.0 ./app

Con Docker Desktop, la imagen local es visible de inmediato para el clúster (mismo daemon Docker). Por eso el manifiesto usa imagePullPolicy: IfNotPresent.


2. Desplegar la aplicación

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

O archivo por archivo:

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

Luego abre el navegador: http://localhost:30080


3. Observar (pods, services, deployments)

powershell
kubectl get all                       # vista de conjunto
kubectl get pods -o wide              # los Pods (IP, nodo, estado)
kubectl get deployment demo-web
kubectl get service demo-web
kubectl describe deployment demo-web  # detalles + eventos
kubectl describe pod <nom-du-pod>     # detalle de un Pod (probes, imagen, events)
kubectl get pods --watch             # seguir los cambios en directo (Ctrl+C para salir)

4. Probar el reparto de carga

Recarga http://localhost:30080 varias veces: cambia el nombre del Pod.

En línea de comandos (PowerShell):

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

En bash:

bash
for i in $(seq 1 10); do curl -s -H "Accept: application/json" http://localhost:30080; echo; done

5. Manipular un Pod (exec, logs, port-forward)

powershell
kubectl logs <nom-du-pod>                      # logs de un Pod
kubectl logs -l app=demo-web --tail=20        # logs de TODOS los Pods del label
kubectl exec -it <nom-du-pod> -- sh           # abrir un shell en el Pod
kubectl exec <nom-du-pod> -- env              # ver las variables de entorno inyectadas
kubectl port-forward svc/demo-web 8080:80     # acceder al Service vía http://localhost:8080

6. Cambiar la configuración (ConfigMap / fondo)

  1. Edita k8s/configmap.yaml (p. ej. BG_COLOR: "#7c3aed").
  2. Vuelve a aplicar y reinicia los Pods para recargar las variables:
powershell
kubectl apply -f k8s/configmap.yaml
kubectl rollout restart deployment demo-web
kubectl rollout status deployment demo-web
  1. Recarga la página: el fondo ha cambiado.

Ver el valor activo en un 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 ahora
kubectl scale deployment demo-web --replicas=3

# Rolling update: cambia APP_VERSION en el ConfigMap y luego
kubectl apply -f k8s/configmap.yaml
kubectl rollout restart deployment demo-web
kubectl rollout status deployment demo-web    # sigue el despliegue progresivo

# Historial y rollback
kubectl rollout history deployment demo-web
kubectl rollout undo deployment demo-web      # vuelve a la versión anterior

8. Autorreparación

powershell
kubectl get pods
kubectl delete pod <nom-du-pod>               # se elimina uno a mano
kubectl get pods --watch                      # Kubernetes crea otro automáticamente

9. Limpieza

powershell
kubectl delete -f k8s/                        # elimina service + deployment + configmap
# o uno a uno:
kubectl delete service demo-web
kubectl delete deployment demo-web
kubectl delete configmap demo-config

Anexo A — minikube / kind

Si no usas el Kubernetes de Docker Desktop, el clúster no ve la imagen local: hay que cargarla.

minikube:

powershell
minikube start
minikube image load demo-k8s:1.0             # deja la imagen disponible en el clúster
kubectl apply -f k8s/
minikube service demo-web --url              # obtiene la URL de acceso

kind:

powershell
kind create cluster
kind load docker-image demo-k8s:1.0          # carga la imagen en el clúster
kubectl apply -f k8s/
kubectl port-forward svc/demo-web 8080:80    # http://localhost:8080

Anexo B — diagnóstico

SíntomaCausa probableSolución
ErrImagePull / ImagePullBackOffEl clúster no encuentra la imagenVerificar imagePullPolicy: IfNotPresent + imagen demo-k8s:1.0 construida; en minikube/kind, cargar la imagen (Anexo A)
Pod en CrashLoopBackOffLa app falla al arrancarkubectl logs <pod> para leer el error
Pod PendingRecursos insuficienteskubectl describe pod <pod> (sección Events)
localhost:30080 inaccesibleService no creado / puerto incorrectokubectl get svc; si no, kubectl port-forward svc/demo-web 8080:80
kubectl no respondeContexto incorrectokubectl config use-context docker-desktop
Sonda que falla/health no alcanzableVerificar el puerto 5000 y la ruta /health
powershell
# Diagnóstico rápido
kubectl get events --sort-by=.lastTimestamp
kubectl describe pod <nom-du-pod>

Curso creado por el Dr. Haythem REHOUMA — Desarrollo y despliegue de soluciones de datos