ReplicationController y ReplicaSet en Kubernetes


En este post te explico que diferencia tenemos en ReplicationController y ReplicaSet en Kubernetes

oscar Escrito por oscar 30 July 2025 95 0

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 a ReplicationController.
  • ✅ Soporta tanto matchLabels como matchExpressions.
  • ⚙️ 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 o Deployment (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 usar Deployment, que te da:
    • Actualizaciones controladas
    • Rollbacks
    • Escalabilidad

Comentario

Debe aceptar antes de enviar