Dia 07 - Crear un ReplicaSet con httpd
Problema / Desafio
Se necesita desplegar un ReplicaSet con 4 replicas de la imagen httpd:latest, asegurando que siempre existan exactamente 4 Pods corriendo con los labels app=httpd_app y type=front-end.
Conceptos clave
ReplicaSet
Un ReplicaSet es un recurso de Kubernetes que garantiza que un numero especificado de replicas de un Pod esten corriendo en todo momento. Si un Pod falla o es eliminado, el ReplicaSet crea automaticamente uno nuevo para mantener el estado deseado.
Diferencia entre ReplicaSet y Deployment
| Caracteristica | ReplicaSet | Deployment |
|---|---|---|
| Mantiene N replicas | Si | Si (usa un ReplicaSet internamente) |
| Rolling updates | No | Si |
| Rollback | No | Si |
| Historial de revisiones | No | Si |
En la practica, se recomienda usar Deployments en lugar de ReplicaSets directamente, porque un Deployment gestiona ReplicaSets y agrega la capacidad de rolling updates y rollbacks. Sin embargo, entender ReplicaSets es fundamental porque son el mecanismo subyacente.
selector.matchLabels
El selector.matchLabels define que Pods son gestionados por este ReplicaSet. Los labels del template del Pod deben coincidir con el selector, de lo contrario Kubernetes rechaza el manifiesto.
Pasos
- Crear el manifiesto YAML del ReplicaSet
- Aplicar el manifiesto con
kubectl apply - Verificar que las 4 replicas esten corriendo
- Probar la auto-reparacion eliminando un Pod
Comandos / Codigo
Manifiesto del ReplicaSet
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: httpd-replicaset
labels:
app: httpd_app
type: front-end
spec:
replicas: 4
selector:
matchLabels:
app: httpd_app
type: front-end
template:
metadata:
labels:
app: httpd_app
type: front-end
spec:
containers:
- name: httpd-container
image: httpd:latest
Aplicar el manifiesto
Verificar el ReplicaSet
Verificar los Pods
NAME READY STATUS RESTARTS AGE
httpd-replicaset-abc12 1/1 Running 0 15s
httpd-replicaset-def34 1/1 Running 0 15s
httpd-replicaset-ghi56 1/1 Running 0 15s
httpd-replicaset-jkl78 1/1 Running 0 15s
Ver detalle del ReplicaSet
Probar la auto-reparacion
# Eliminar un Pod manualmente
kubectl delete pod httpd-replicaset-abc12
# Verificar que el ReplicaSet crea uno nuevo automaticamente
kubectl get pods -l app=httpd_app
El ReplicaSet detecta que solo hay 3 Pods y crea uno nuevo para mantener las 4 replicas deseadas.
Escalar el ReplicaSet
# Escalar a 6 replicas
kubectl scale replicaset httpd-replicaset --replicas=6
# Verificar
kubectl get replicaset
Troubleshooting
| Problema | Solucion |
|---|---|
Pods en ImagePullBackOff |
Verificar que la imagen httpd:latest es accesible. En entornos sin internet usar una imagen local o un registry privado |
selector does not match template labels |
Los labels en spec.selector.matchLabels deben coincidir exactamente con los labels en spec.template.metadata.labels |
| ReplicaSet no crea los Pods | Verificar con kubectl describe replicaset httpd-replicaset los eventos para identificar el error |
Pods quedan en Pending |
Verificar recursos del nodo con kubectl describe node. Puede no haber suficiente CPU/memoria para 4 replicas |