Cómo crear un StatefulSet en Kubernetes

Los StatefulSets contienen un conjunto de Pods con identidades únicas y persistentes y nombres de host estables. Se usa una plantilla de pod en un Statefulset, que contiene una especificación para sus pods, los pods se crean usando esta especificación. Podemos implementar aplicaciones con estado y aplicaciones en clúster utilizando Statefulsets en Kubernetes. StatefulSet se puede actualizar realizando cambios en su especificación Pod, que incluye sus imágenes y volúmenes de contenedor.
StatefulSets se puede usar cuando las aplicaciones requieren cualquiera de las siguientes propiedades.
- Identificadores de red únicos y estables.
- Almacenamiento estable y persistente.
- Despliegue y escalado ordenados y ordenados.
- Actualizaciones continuas ordenadas y automatizadas.
Para un StatefulSet con N réplicas, cuando se implementan pods, se crean secuencialmente, en orden desde {0..N-1}. Cuando se eliminan pods, se terminan en orden inverso, desde {N-1..0}.
Para saber más sobre Statefulset, haga clic en aquí.
En este artículo, crearemos un Statefulset con réplicas de pods de Nginx. Realizaremos operaciones en los Pods para ver cómo se eliminan y se crean.
requisitos previos
- Clúster de Kubernetes con al menos 1 nodo trabajador.
Si quieres aprender a crear un Cluster de Kubernetes, haz clic aquí. Esta guía lo ayudará a crear un clúster de Kubernetes con 1 maestro y 2 nodos en instancias AWS Ubuntu 18l04 EC2.
Lo que haremos
- Crear un conjunto con estado
Crear un conjunto con estado
Cree un archivo y agregue la siguiente definición de Statefulset en él.
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
En este ejemplo,
- Se utiliza un servicio sin cabeza, denominado nginx, para controlar la red.
- El StatefulSet, denominado web, tiene 3 réplicas del contenedor nginx que se lanzarán en Pods únicos.
- La imagen de nginx con la versión slim:0.8 se usa para implementar Nginx.
Para crear un Statefulset, ejecute los siguientes comandos.
kubectl obtener estado completo
kubectl create -f statefulset.yml
Ejecute los siguientes 2 comandos para enumerar el Statefulset y el Servicio creado en el paso anterior.
kubectl obtener estado completo
servicio de obtención de kubectl
Obtenga los pods con el siguiente comando y vea que los pods tienen números como sufijo en el nombre del pod.
kubectl obtener vainas
Para obtener los detalles completos del Statefulset, ejecute los siguientes comandos.
kubectl obtener estado completo
kubectl describe la web statefulset
Ahora, eliminemos los pods y veamos cómo se conservan los nombres incluso después de crear nuevos pods.
Estamos eliminando 2 pods para ver qué nombres se asignarán a los nuevos pods al momento de la creación.
kubectl obtener vainas
kubectl eliminar pods web-0 web-2
kubectl obtener vainas
En la captura de pantalla anterior, puede ver que, incluso después de eliminar los pods, los pods recién creados reciben el mismo nombre.
Conclusión
En este artículo, creamos un Statefulset y realizamos operaciones en él para verificar sus detalles. También eliminamos los pods para ver cómo se conserva el nombre del pod y se asigna lo mismo a los pods recién creados después de eliminarlo.