Cómo crear un StatefulSet en Kubernetes

Los StatefulSets contienen un conjunto de Pods con identidades únicas y persistentes y nombres de host estables. En un Statefulset se utiliza una plantilla de pods, que contiene una especificación para sus pods, los pods se crean utilizando esta especificación. Podemos desplegar aplicaciones stateful y aplicaciones clusterizadas utilizando Statefulsets en Kubernetes. Los StatefulSet pueden actualizarse realizando cambios en su especificación Pod, que incluye sus imágenes de contenedor y volúmenes.

Los StatefulSets pueden utilizarse cuando las aplicaciones requieren alguna de las siguientes propiedades.

  • Identificadores de red estables y únicos.
  • Almacenamiento estable y persistente.
  • Despliegue y escalado ordenados y elegantes.
  • Actualizaciones rodantes ordenadas y automatizadas.

Para un StatefulSet con N réplicas, cuando se despliegan Pods, se crean secuencialmente, en orden de {0..N-1}. Cuando se eliminan Pods, se terminan en orden inverso, de {N-1..0}.

Para saber más sobre Statefulset, haz clic aquí.

En este artículo, crearemos un Statefulset con réplicas de Pods Nginx. Realizaremos operaciones sobre los Pods para ver cómo se eliminan y se crean.

Requisitos previos

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

Qué haremos

  1. Crear un Statefulset

Crear un Statefulset

Crea un archivo y añade en él la siguiente definición de Statefulset.

vim statefulset.yml

apiVersion: v1
kind: Service
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  ports:
  - port: 80
    name: web
  clusterIP: None
  selector:
    app: nginx
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: web
spec:
  selector:
    matchLabels:
      app: nginx
  serviceName: "nginx"
  replicas: 3
  template:
    metadata:
      labels:
        app: nginx
    spec:
      terminationGracePeriodSeconds: 10
      containers:
      - name: nginx
        image: k8s.gcr.io/nginx-slim:0.8
        ports:
        - containerPort: 80
          name: web

conjunto de estados

En este ejemplo

  • Se utiliza un Servicio Headless, llamado nginx, para controlar la red.
  • El StatefulSet, llamado web, tiene 3 réplicas del contenedor nginx que se lanzarán en Pods únicos.
  • La Imagen nginx con la versión slim:0.8 se utiliza para desplegar Nginx.

Para crear un Statefulset, ejecuta los siguientes comandos.

kubectl get statefulset

kubectl create -f statefulset.yml

create-stateful-set

Ejecuta los 2 comandos siguientes para listar el Statefulset y el Servicio creados en el paso anterior.

kubectl get statefulset

kubectl get service

get-statefulset-y-servicio

Obtén los pods utilizando el siguiente comando y comprueba que los pods tienen números como sufijo en el nombre del pod.

kubectl get pods

get-pods-in-statefulset

Para obtener los detalles completos del Statefulset, ejecuta los siguientes comandos.

kubectl get statefulset

kubectl describe statefulset web

describe-estado-fu-set

Ahora, vamos a eliminar los pods y a ver cómo se conservan los nombres incluso después de crear nuevos pods.

Vamos a borrar 2 pods para ver qué nombres se asignarán a los nuevos pods tras su creación.

kubectl obtener pods

kubectl delete pods web-0 web-2

kubectl get pods

recrea-pods

En la captura de pantalla anterior puedes ver que, incluso después de eliminar los pods, los pods recién creados reciben el mismo nombre.

Conclusión

En este artículo, hemos creado un Statefulset y hemos realizado operaciones sobre él para comprobar sus detalles. También hemos eliminado los pods para ver cómo se conserva el nombre del pod y se asigna el mismo a los pods recién creados después de eliminarlo.

También te podría gustar...