Skip to content

Kubernetes Controller: 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 Controller:ReplicaSet

Descripción

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.

Objetivos

  • Crear un ReplicaSet en kubernetes.
  • Entender las propiedades y funciones de un ReplicaSet

Antes de comenzar

  • Contar con el acceso al ambiente del laboratorio
  • Haber realizado la guía de Instalación Rancher Kubernetes Engine (RKE)
  • Haber realizado la guía de Acceso a rancher y kubernetes cluster

Inicio de laboratorio

  1. Ingrese al CLI del sistema operativo del servidor usado como Bastion con el usuario y la contraseña proporcionados.

Ingresar al cluster de Kubernetes cluster-users con sus respectivas credenciales

Crear un nuevo namespace llamado example-replicaset

kubectl create ns example-replicaset

Establcer el nuevo namespace por defecto en el contexto actual:

kubectl config set-context --current --namespace=example-replicaset
2. Descargar y verificar el siguiente manifiesto:
wget http://k8s.io/examples/controllers/frontend.yaml
3. Editar el archivo y cambiar la cantidad de réplicas a un valor superior, 6 por ejemplo:

  1. Realizar la creación del nuevo recursos ReplicaSet definido y los Pods que maneja
    kubectl apply -f frontend.yaml
    
  2. Puedes ver los ReplicaSets actuales desplegados:
    kubectl get rs
    
  3. 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>
    
  4. Verificar los pods que han iniciado con el ReplicaSet
    kubectl get Pods
    
  5. 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:
    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
    ...
    
  6. Prueba eliminar todos los pods con el siguiente comando:
    kubectl delete pods --all
    
  7. Verificar los pods nuevamente
    kubectl get Pods
    
  8. Elimina el recurso ReplicaSet frontend
    kubectl delete rs frontend
    
  9. Verificar los pods nuevamente
    kubectl get Pods
    
  10. Elimina el Namespace creado para este laboratorio
    kubectl delete ns example-replicaset