Skip to content

Tema:

Kubernetes Workloads: ReplicaSet


Introducción

En Kubernetes, un ReplicaSet es un tipo de workload diseñado para garantizar que un número específico de réplicas de un Pod esté siempre en ejecución en el clúster. Es una herramienta esencial para mantener la alta disponibilidad y escalabilidad de las aplicaciones, permitiendo la recuperación automática en caso de fallos. En esta guía, exploraremos los fundamentos de los ReplicaSets, cómo configurarlos y gestionarlos, y su papel dentro de los flujos de trabajo en Kubernetes.


Objetivo

Objetivo General:

  • Capacitar a los participantes en el uso y gestión de ReplicaSets en Kubernetes, comprendiendo su propósito, configuración y capacidades para mantener aplicaciones altamente disponibles y escalables en entornos contenerizados.

Kubernetes ReplicaSet

El objeto de un ReplicaSet es el de mantener un conjunto estable de réplicas de Pods ejecutándose en todo momento. Así, se usa en numerosas ocasiones para garantizar la disponibilidad de un número específico de Pods idénticos.

Un ReplicaSet se define con campos, incluyendo un selector que indica cómo identificar a los Pods que puede adquirir, un número de réplicas indicando cuántos Pods debería gestionar, y una plantilla pod especificando los datos de los nuevos Pods que debería crear para conseguir el número de réplicas esperado. Un ReplicaSet alcanza entonces su propósito mediante la creación y eliminación de los Pods que sea necesario para alcanzar el número esperado. Cuando un ReplicaSet necesita crear nuevos Pods, utiliza su plantilla Pod.

Un ReplicaSet garantiza que un número específico de réplicas de un pod se está ejecutando en todo momento. Sin embargo, un Deployment es un concepto de más alto nivel que gestiona ReplicaSets y proporciona actualizaciones de forma declarativa de los Pods junto con muchas otras características útiles. Por lo tanto, se recomienda el uso de Deployments en vez del uso directo de ReplicaSets, a no ser que se necesite una orquestración personalizada de actualización o no se necesite las actualizaciones en absoluto.

Laboratorio: Kubernetes ReplicaSet

Esta guía muestra cómo crear y gestionar un recurso tipo ReplicaSet dentro de Kubernetes

  1. Asegurarse de estar en el servidor bastion con el usuario student
    student@lab-0-bastion:~>
    
  2. Ingresar como usuario administrador al cluster de Kubernetes con el siguiente comando:
    export KUBECONFIG=/home/student/rke2_conn/cluster1/cluster1_kubeconfig.yaml
    
  3. Crear un nuevo namespace llamado example-replicaset
    kubectl create ns example-replicaset
    
  4. Establecer el nuevo namespace por defecto en el contexto actual:
    kubectl config set-context --current --namespace=example-replicaset
    
  5. Descargar y verificar el siguiente manifiesto:
    wget http://k8s.io/examples/controllers/frontend.yaml
    
  6. Editar el archivo y cambiar la cantidad de réplicas a un valor superior, 6 por ejemplo.
  7. Realizar la creación del nuevo recursos ReplicaSet definido y los Pods que maneja
    kubectl apply -f frontend.yaml
    
  8. Puede explorar otra opción disponible para incrementar la cantidad de réplicas con el siguiente comando:
    kubectl scale replicaset frontend --replicas 8
    
  9. Puedes ver los ReplicaSets actuales desplegados:
    kubectl get rs
    
  10. Comprobar el estado del replicaset:
    kubectl describe rs/frontend
    
    Se mostrará una salida parecida a la siguiente:
    Name:       frontend
    Namespace:  default
    Selector:   tier=frontend,tier in (frontend)
    Labels:     app=guestbook
            tier=frontend
    Annotations:    <none>
    Replicas:   3 current / 3 desired
    Pods Status:    3 Running / 0 Waiting / 0 Succeeded / 0 Failed
    Pod Template:
      Labels:       app=guestbook
                    tier=frontend
      Containers:
       php-redis:
        Image:      gcr.io/google_samples/gb-frontend:v3
        Port:       80/TCP
        Requests:
          cpu:      100m
          memory:   100Mi
        Environment:
          GET_HOSTS_FROM:   dns
        Mounts:             <none>
      Volumes:              <none>
    
  11. Verificar los pods que han iniciado con el ReplicaSet
    kubectl get Pods
    
  12. También puedes verificar que la referencia de propietario de dichos pods está puesta al ReplicaSet frontend. Para ello, obtén el yaml de uno de los Pods ejecutándose, utilizar el nombre de Pod correspondiente a tu ambiente:
    kubectl get pods frontend-9si5l -o yaml
    
    La salida será parecida a esta, donde la información sobre el ReplicaSet aparece en el campo ownerReferences de los metadatos:
    apiVersion: v1
    kind: Pod
    metadata:
      creationTimestamp: 2019-01-31T17:20:41Z
      generateName: frontend-
      labels:
        tier: frontend
      name: frontend-9si5l
      namespace: default
      ownerReferences:
      - apiVersion: extensions/v1beta1
        blockOwnerDeletion: true
        controller: true
        kind: ReplicaSet
        name: frontend
        uid: 892a2330-257c-11e9-aecd-025000000001
    ...
    
  13. Prueba eliminar todos los pods con el siguiente comando:
    kubectl delete pods --all
    
  14. Verificar los pods nuevamente
    kubectl get Pods
    
  15. Elimina el recurso ReplicaSet frontend
    kubectl delete rs frontend
    
  16. Verificar los pods nuevamente
    kubectl get Pods
    
  17. Elimina el Namespace creado para este laboratorio
    kubectl delete ns example-replicaset
    
  18. Eliminar el archivo creado para el ReplicaSet
    rm -f frontend.yaml
    

Conclusión

En esta práctica, exploramos el ReplicaSet, uno de los componentes fundamentales para la gestión de cargas de trabajo en Kubernetes. Este objeto garantiza que un número deseado de réplicas de un pod se mantenga en ejecución, proporcionando alta disponibilidad y resistencia ante fallos.

El ReplicaSet es un recurso clave para mantener la confiabilidad y disponibilidad de las aplicaciones en Kubernetes. Su capacidad para gestionar la replicación de pods y su recuperación automática ante fallos lo convierten en una herramienta fundamental en entornos productivos.

Aunque el ReplicaSet rara vez se utiliza directamente en implementaciones modernas, su comprensión es esencial para dominar conceptos más avanzados como Deployments. Este conocimiento nos prepara para construir y administrar aplicaciones escalables y resilientes en clústeres Kubernetes.