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
- 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
wget http://k8s.io/examples/controllers/frontend.yaml
- Realizar la creación del nuevo recursos ReplicaSet definido y los Pods que maneja
kubectl apply -f frontend.yaml - 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:
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