Cómo crear un StatefulSet en Kubernetes

conjunto con estado

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

  1. 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

  1. 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

conjunto con estado

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

crear-conjunto-con-estado

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

get-statefulset-and-service

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

get-pods-in-statefulset

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

kubectl obtener estado completo

kubectl describe la web statefulset

describe-statefu-set

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

recrear-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.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *