StatefulSets contiene 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.
- Implementación ordenada y ordenada y escalabilidad.
- 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 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 crean.
Requisitos previos
- Clúster de Kubernetes con al menos 1 nodo trabajador.
Si desea aprender a crear un Clúster de Kubernetes, haga 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 de estado
Crea un conjunto de estados
Cree un archivo y agregue la siguiente definición 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,
- Un servicio sin cabeza, llamado
nginx
, se utiliza para controlar la red. - El StatefulSet, llamado 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 obtiene conjunto de estado
kubectl create -f statefulset.yml
Ejecute los siguientes 2 comandos para listar el Statefulset y el Servicio creado en el paso anterior.
kubectl obtiene conjunto de estado
servicio de obtención de kubectl
Obtenga los pods usando el siguiente comando y vea que los pods tienen números como sufijo en el nombre del pod.
kubectl obtener pods
Para obtener los detalles completos del Statefulset, ejecute los siguientes comandos.
kubectl obtiene conjunto de estado
kubectl describe 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 pods
kubectl eliminar pods web-0 web-2
kubectl obtener pods
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.