Simular y diagnosticar fallos de actualización
En este paso, aprenderás cómo diagnosticar posibles fallos en la actualización de un despliegue simulando una actualización de imagen problemática y utilizando las herramientas de diagnóstico de Kubernetes.
Primero, navega al directorio del proyecto:
cd ~/project/k8s-manifests
Crea un manifiesto de despliegue con una imagen no válida:
nano problematic-deployment.yaml
Agrega el siguiente contenido:
apiVersion: apps/v1
kind: Deployment
metadata:
name: troubleshoot-app
labels:
app: troubleshoot
spec:
replicas: 3
selector:
matchLabels:
app: troubleshoot
template:
metadata:
labels:
app: troubleshoot
spec:
containers:
- name: nginx
image: nginx:non-existent-tag
ports:
- containerPort: 80
Aplica el despliegue problemático:
kubectl apply -f problematic-deployment.yaml
Ejemplo de salida:
deployment.apps/troubleshoot-app created
Comprueba el estado del despliegue:
kubectl rollout status deployment troubleshoot-app
Ejemplo de salida:
Waiting for deployment "troubleshoot-app" to roll out...
Presiona Ctrl+C para salir del seguimiento del estado del despliegue.
Comprueba los eventos y el estado de los pods:
kubectl get pods -l app=troubleshoot
Ejemplo de salida:
NAME READY STATUS RESTARTS AGE
troubleshoot-app-6b8986c555-gcjj9 0/1 ImagePullBackOff 0 2m56s
troubleshoot-app-6b8986c555-p29dp 0/1 ImagePullBackOff 0 2m56s
troubleshoot-app-6b8986c555-vpv5q 0/1 ImagePullBackOff 0 2m56s
Examina los detalles y los registros (logs) del pod:
## Replace 'xxx-yyy' with your actual pod name
POD_NAME=$(kubectl get pods -l app=troubleshoot -o jsonpath='{.items[0].metadata.name}')
kubectl describe pod $POD_NAME
kubectl logs $POD_NAME
Verás el estado del pod y los registros que indican el fallo al extraer la imagen.
Failed to pull image "nginx:non-existent-tag"
Soluciona el problema corregiendo la imagen:
nano problematic-deployment.yaml
Actualiza la imagen a una etiqueta (tag) válida:
image: nginx:1.24.0-alpine
Vuelve a aplicar el despliegue corregido:
kubectl apply -f problematic-deployment.yaml
Comprueba el estado de los pods de nuevo:
kubectl get pods -l app=troubleshoot
Ejemplo de salida:
NAME READY STATUS RESTARTS AGE
troubleshoot-app-5dc9b58d57-bvqbr 1/1 Running 0 5s
troubleshoot-app-5dc9b58d57-tdksb 1/1 Running 0 8s
troubleshoot-app-5dc9b58d57-xdq5n 1/1 Running 0 6s
Puntos clave para diagnosticar fallos:
- Utiliza
kubectl describe para ver los eventos del despliegue y de los pods
- Comprueba el estado de los pods en busca de
ImagePullBackOff u otros estados de error
- Examina los registros de los pods para obtener información detallada sobre el error
- Verifica la disponibilidad de la imagen y la corrección de la etiqueta