kubectl get nodes # debe mostrar docker-desktop Readykubectl config current-context # debe mostrar docker-desktopkubectl 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.
kubectl get all # vista de conjuntokubectl get pods -o wide # los Pods (IP, nodo, estado)kubectl get deployment demo-webkubectl get service demo-webkubectl describe deployment demo-web # detalles + eventoskubectl 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.
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 Podkubectl logs -l app=demo-web --tail=20 # logs de TODOS los Pods del labelkubectl exec -it <nom-du-pod> -- sh # abrir un shell en el Podkubectl exec <nom-du-pod> -- env # ver las variables de entorno inyectadaskubectl port-forward svc/demo-web 8080:80 # acceder al Service vía http://localhost:8080
6. Cambiar la configuración (ConfigMap / fondo)
Edita k8s/configmap.yaml (p. ej. BG_COLOR: "#7c3aed").
Vuelve a aplicar y reinicia los Pods para recargar las variables:
# Scaling manualkubectl scale deployment demo-web --replicas=5kubectl get pods # 5 Pods ahorakubectl scale deployment demo-web --replicas=3# Rolling update: cambia APP_VERSION en el ConfigMap y luegokubectl apply -f k8s/configmap.yamlkubectl rollout restart deployment demo-webkubectl rollout status deployment demo-web # sigue el despliegue progresivo# Historial y rollbackkubectl rollout history deployment demo-webkubectl rollout undo deployment demo-web # vuelve a la versión anterior
8. Autorreparación
powershell
kubectl get podskubectl delete pod <nom-du-pod> # se elimina uno a manokubectl 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-webkubectl delete deployment demo-webkubectl 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 startminikube image load demo-k8s:1.0 # deja la imagen disponible en el clústerkubectl apply -f k8s/minikube service demo-web --url # obtiene la URL de acceso
kind:
powershell
kind create clusterkind load docker-image demo-k8s:1.0 # carga la imagen en el clústerkubectl apply -f k8s/kubectl port-forward svc/demo-web 8080:80 # http://localhost:8080
Anexo B — diagnóstico
Síntoma
Causa probable
Solución
ErrImagePull / ImagePullBackOff
El clúster no encuentra la imagen
Verificar imagePullPolicy: IfNotPresent + imagen demo-k8s:1.0 construida; en minikube/kind, cargar la imagen (Anexo A)
Pod en CrashLoopBackOff
La app falla al arrancar
kubectl logs <pod> para leer el error
Pod Pending
Recursos insuficientes
kubectl describe pod <pod> (sección Events)
localhost:30080 inaccesible
Service no creado / puerto incorrecto
kubectl get svc; si no, kubectl port-forward svc/demo-web 8080:80
kubectl no responde
Contexto incorrecto
kubectl config use-context docker-desktop
Sonda que falla
/health no alcanzable
Verificar el puerto 5000 y la ruta /health
powershell
# Diagnóstico rápidokubectl get events --sort-by=.lastTimestampkubectl describe pod <nom-du-pod>
Curso creado por el Dr. Haythem REHOUMA — Desarrollo y despliegue de soluciones de datos