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
- Asegurarse de estar en el servidor
bastioncon el usuariostudentstudent@lab-0-bastion:~> - Ingresar como usuario administrador al cluster de Kubernetes con el siguiente comando:
export KUBECONFIG=/home/student/rke2_conn/cluster1/cluster1_kubeconfig.yaml - Crear un nuevo namespace llamado example-replicaset
kubectl create ns example-replicaset - Establecer el nuevo namespace por defecto en el contexto actual:
kubectl config set-context --current --namespace=example-replicaset - Descargar y verificar el siguiente manifiesto:
wget http://k8s.io/examples/controllers/frontend.yaml - Editar el archivo y cambiar la cantidad de réplicas a un valor superior, 6 por ejemplo.
- Realizar la creación del nuevo recursos ReplicaSet definido y los Pods que maneja
kubectl apply -f frontend.yaml - Puede explorar otra opción disponible para incrementar la cantidad de réplicas con el siguiente comando:
kubectl scale replicaset frontend --replicas 8 - Puedes ver los ReplicaSets actuales desplegados:
kubectl get rs - Comprobar el estado del replicaset:
Se mostrará una salida parecida a la siguiente:
kubectl describe rs/frontendName: 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> - Verificar los pods que han iniciado con el ReplicaSet
kubectl get Pods - 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:
La salida será parecida a esta, donde la información sobre el ReplicaSet aparece en el campo ownerReferences de los metadatos:
kubectl get pods frontend-9si5l -o yamlapiVersion: 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 ... - Prueba eliminar todos los pods con el siguiente comando:
kubectl delete pods --all - Verificar los pods nuevamente
kubectl get Pods - Elimina el recurso ReplicaSet frontend
kubectl delete rs frontend - Verificar los pods nuevamente
kubectl get Pods - Elimina el Namespace creado para este laboratorio
kubectl delete ns example-replicaset - 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.