Cómo crear un Replicaset en Kubernetes

Un conjunto de réplicas se asegura de que las réplicas especificadas de los pods estén siempre en funcionamiento. Puede considerarse como un sustituto del controlador de replicación. La principal diferencia entre ambos es que los ReplicaSets nos permiten utilizar algo llamado «Selector de Etiquetas«. Replicaset es uno de los controladores de Kubernetes. Se utiliza para asegurarnos de que tenemos un número determinado de réplicas de pods que están siempre en funcionamiento.

La plantilla del conjunto de réplicas tiene el siguiente aspecto.

apiVersion: apps/v1 
kind: ReplicaSet   
Metadata: 
  name: some-name
  labels:
    app: some-App
    tier: some-Tier
Spec: 
  replicas: 3 # Here we tell k8s how many replicas we want
  Selector: # A label selector field. 
    matchLabels:
      tier: some-Tier
    matchExpressions:
      - {key: tier, operator: In, values: [some-Tier]} #set-based operators
  template:
    metadata:
      labels:
        app: some-App
        tier: someTier
    Spec: 
      Containers:

En este artículo, veremos cómo crear un conjunto de réplicas y cómo identifica los pods con etiquetas.

Requisitos previos

Clúster Kubernetes con al menos 1 nodo trabajador.
Si quieres aprender a crear un Clúster Kubernetes, haz clic aquí. Esta guía te ayudará a crear un clúster Kubernetes con 1 Maestro y 2 Nodos en Instancias EC2 Ubuntu 18.04 de AWS.

Qué haremos

  • Crear un Replicaset

Crear un Replicaset

Crea un nuevo archivo y añade en él la siguiente definición de conjunto de réplica.

vim my-replica-set.yml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: nginx-proxy
  labels:
    app: nginx-proxy
    tier: frontend
spec:
  # modify replicas according to your case
  replicas: 3
  selector:
    matchLabels:
      tier: frontend
  template:
    metadata:
      labels:
        tier: frontend
    spec:
      containers:
      - name: nginx
        image: nginx

mi-replicaset

La definición del objeto anterior creará tres réplicas del pod.

En primer lugar, comprueba el conjunto de réplicas existente utilizando el siguiente comando.

kubectl get replicaset

Para crear una réplica dijo ejecuta el siguiente comando.

kubectl create -f my-replica-set.yml
kubectl get replicaset
kubectl get pods

crear-replicaset

En la captura de pantalla anterior, puedes ver los detalles de los pods creados tras crear un conjunto de réplicas.

Ahora crea un pod individual con las mismas etiquetas que especificamos anteriormente en la definición del conjunto de réplica.

vim my-test-pod.yml
apiVersion: v1
kind: Pod
metadata:
  name: pod1
  labels:
    tier: frontend
spec:
  containers:
  - name: nginx
    image: nginx

my-test-pod

Ahora, si creamos esto, no se creará.

Ejecuta los siguientes comandos para crear los pods anteriores y crear un nuevo pod.

kubectl get pods
kubectl create -f my-test-pod.yml
kubectl get pods

crear-etiqueta-compartida

En la captura de pantalla anterior, puedes ver que incluso después de crear un nuevo pod, éste se encuentra en estado de terminación. El motivo es que ya tenemos un conjunto de réplicas con réplicas como 3 y estamos creando un nuevo pod por separado con las mismas etiquetas. Como las etiquetas y los selectores coinciden con el conjunto de réplicas, elimina el pod para mantener el recuento de réplicas que especificamos en la definición del conjunto de réplicas.

Puedes obtener los detalles del conjunto de réplicas utilizando los siguientes comandos.

kubectl get replicaset
kubectl describe replicaset nginx-proxy

describir-replicaset

En la captura de pantalla anterior, puedes ver que un conjunto de réplicas borra el pod para mantener el número de réplicas.

Ahora vamos a crear un pod sin etiqueta utilizando la siguiente definición de pod.

vim my-test-pod-no-label.yml
apiVersion: v1
kind: Pod
metadata:
  name: pod1
spec:
  containers:
  - name: nginx
    image: nginx

mi-pod-de-prueba-sin-etiqueta

Para crear un nuevo pod sin ninguna etiqueta ejecuta el siguiente comando.

kubectl get pods
kubectl create -f my-test-pod-no-label.yml
kubectl get pods

crear-pod-sin-etiqueta

En la captura de pantalla anterior, puedes ver que se ha creado un nuevo pod y que el conjunto de réplicas no ha eliminado el nuevo pod esta vez.

El motivo es que el nuevo pod no tiene ninguna etiqueta, por lo que el conjunto de réplicas no coincide con él y no lo considera parte del conjunto de réplicas.

Ahora vamos a intentar crear un puerto que pertenezca al conjunto de réplicas.

Ejecuta los siguientes comandos para eliminar un pod.

kubectl get pods
kubectl delete pod nginx-proxy-6gc46
kubectl get pods

borrar-pod-de-replicaset

En la captura de pantalla anterior, puedes ver que incluso después de eliminar un pod que pertenece al conjunto de réplicas se creó un nuevo pod. Se ha creado un nuevo pod para mantener el número de réplicas que especificamos en la definición del conjunto de réplicas.

Ahora, cuando ya no necesites tu conjunto de réplicas, puedes eliminarlo utilizando los siguientes comandos.

kubectl get replicaset
kubectl delete replicaset nginx-proxy
kubectl get replicaset
kubectl get pods

borrar-replicaset

Como el pod que hemos creado por separado no forma parte del conjunto de réplicas, tenemos que eliminarlo por separado.

Utiliza los comandos. Para eliminar el pod que no pertenece al conjunto de réplica.

kubectl get pods
kubectl delete pod pod1
kubectl get pods

borrar-pod-sin-etiqueta

Conclusión

En este artículo hemos visto cómo crear un conjunto de réplica simple. También hemos visto cómo un pod pasa a formar parte de un conjunto de réplicas si la etiqueta coincide con el selector disponible en el conjunto de réplicas.

Scroll al inicio