En Kubernetes, tanto ReplicationController como ReplicaSet tienen el mismo objetivo principal: asegurar que un número específico de réplicas de un pod estén corriendo en todo momento. Sin embargo, hay diferencias clave entre ellos, principalmente en funcionalidad, flexibilidad y uso actual.
✅ Precondiciones
- Realizar la instalación correcta de un entorno de trabajo para kubernetes, tengo una Guía completa de comandos Minikube
- Asegúrate de que Minikube está corriendo Abre PowerShell o CMD y ejecuta:
minikube start
- Revisa los comandos de kubectl
- Valida si estas en el contexto correcto del clustes de minikube, en Contexto en kubectl te explico como.
🔁 ¿Qué es un ReplicationController?
Es el primer mecanismo que ofrecía Kubernetes para garantizar la disponibilidad de réplicas de un pod.
- Verifica constantemente cuántos pods hay corriendo.
- Si un pod falla, lo reemplaza automáticamente.
- Si hay más pods de los deseados, elimina los excedentes.
🧪 Ejemplo básico de ReplicationController:
📄 Archivo: nginx-ReplicationController.yaml
apiVersion: v1
kind: ReplicationController
metadata:
name: nginx-rc
spec:
replicas: 3
selector:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
- 🔹
apiVersion
:v1
, porque es más antiguo. - 🔹
kind
:ReplicationController
, el recurso original para mantener réplicas de pods. - 🔹
selector
: solo admite igualdades exactas (no expresiones). - ❌ No permite actualizaciones de forma declarativa (por ejemplo, no puedes hacer rolling update fácilmente).
- ⚠️ Obsoleto, aunque aún funciona para retrocompatibilidad.
📌 Aplica el ReplicationController:
kubectl apply -f nginx-ReplicationController.yaml
🔎 Validamos el ReplicationController con:
kubectl get replicationcontroller
Respuesta:
NAME DESIRED CURRENT READY AGE
nginx-rc 3 3 3 2m41s
🔎 Verifica los pods:
kubectl get pods
Respuesta:
NAME READY STATUS RESTARTS AGE
nginx-rc-d9rcq 1/1 Running 0 22s
nginx-rc-r4z7l 1/1 Running 0 22s
nginx-rc-txp92 1/1 Running 0 22s
❌ Eliminamos un pod para verificar que el ReplicationController lo vuelva a crear, manteniendo la cantidad de replicas indicadas en el archivo yaml
kubectl delete pod nginx-rc-d9rcq
Como respuesta deberá eliminar el pod y el ReplicationController deberá crearlo automáticamente.
❌ El siguiente comando podemos eliminar el ReplicationController
kubectl delete replicationcontroller nginx-rc
Respuesta: replicationcontroller "nginx-rc" deleted
🔁 ¿Qué es un ReplicaSet?
Es el reemplazo moderno de ReplicationController
. Hace lo mismo, pero con mayores capacidades, y es el mecanismo usado por los Deployments.
Ventajas de ReplicaSet:
- Usa selección de etiquetas con expresiones (más potente).
- Se integra directamente con Deployments.
- Es el estándar actual (más moderno y mantenido).
🧪 Ejemplo básico de ReplicaSet:
📄 Archivo: nginx-ReplicaSet.yaml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: nginx-rs
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
- 🔹
apiVersion
:apps/v1
, más moderno. - 🔹
kind
:ReplicaSet
, reemplaza aReplicationController
. - ✅ Soporta tanto
matchLabels
comomatchExpressions
. - ⚙️ Puede usarse solo o como parte de un Deployment.
- ❌ No gestiona actualizaciones por sí mismo (para eso se usa
Deployment
).
📌 Aplica el ReplicaSet:
kubectl apply -f nginx-ReplicaSet.yaml
Respuesta: replicaset.apps/nginx-rs created
🔎 Validamos el ReplicaSet con:
kubectl get replicaset
Respuesta:
NAME DESIRED CURRENT READY AGE
nginx-rs 3 3 3 28m
🔎 Verifica los pods:
kubectl get pods
Respuesta
NAME READY STATUS RESTARTS AGE
nginx-rs-4p9ms 1/1 Running 0 32m
nginx-rs-hwtzw 1/1 Running 0 32m
nginx-rs-nh9r2 1/1 Running 0 32m
❌ Eliminamos un pod para verificar que el ReplicaSet lo vuelva a crear, manteniendo la cantidad de replicas indicadas en el archivo yaml
kubectl delete pod nginx-rs-hwtzw
Como respuesta deberá eliminar el pod y el ReplicaSet deberá crearlo automáticamente.
✔️ Verificamos la replicaser con
kubectl describe replicaset
❌ El siguiente comando podemos eliminar el ReplicaSet
kubectl delete replicaset nginx-rs
Respuesta: replicaset.apps "nginx-rs" deleted
🔍 Diferencias clave
Característica | ReplicationController |
ReplicaSet |
---|---|---|
API | apiVersion: v1 |
apiVersion: apps/v1 |
Selector | Solo igualdades (matchLabels ) |
Igualdades + expresiones (matchExpressions ) |
Uso actual | Obsoleto, no recomendado | Reemplazo moderno y recomendado |
Usado en Deployments | ❌ No | ✅ Sí |
Soporte a futuro | Limitado, desuso | Activo y mantenido |
✅ Conclusión
- Usa siempre
ReplicaSet
oDeployment
(que internamente usa ReplicaSet). - No se recomienda
ReplicationController
en nuevos proyectos. - Si solo necesitas mantener réplicas de un pod,
ReplicaSet
es suficiente, pero lo ideal hoy en día es usarDeployment
, que te da:- Actualizaciones controladas
- Rollbacks
- Escalabilidad