Utilizar el controlador StatefulSet

KubernetesKubernetesBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En Kubernetes, los StatefulSets se utilizan para gestionar aplicaciones con estado. A diferencia de las aplicaciones sin estado tradicionales, las aplicaciones con estado requieren identificadores de red únicos y estables, así como almacenamiento persistente. En este laboratorio (lab), aprenderemos cómo modelar la estabilidad con StatefulSets en Kubernetes.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL kubernetes(("Kubernetes")) -.-> kubernetes/AdvancedCommandsGroup(["Advanced Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/AdvancedDeploymentGroup(["Advanced Deployment"]) kubernetes(("Kubernetes")) -.-> kubernetes/TroubleshootingandDebuggingCommandsGroup(["Troubleshooting and Debugging Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/BasicsGroup(["Basics"]) kubernetes(("Kubernetes")) -.-> kubernetes/BasicCommandsGroup(["Basic Commands"]) kubernetes/BasicsGroup -.-> kubernetes/initialization("Initialization") kubernetes/BasicCommandsGroup -.-> kubernetes/get("Get") kubernetes/BasicCommandsGroup -.-> kubernetes/create("Create") kubernetes/BasicCommandsGroup -.-> kubernetes/delete("Delete") kubernetes/AdvancedCommandsGroup -.-> kubernetes/apply("Apply") kubernetes/AdvancedDeploymentGroup -.-> kubernetes/scale("Scale") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/describe("Describe") subgraph Lab Skills kubernetes/initialization -.-> lab-9205{{"Utilizar el controlador StatefulSet"}} kubernetes/get -.-> lab-9205{{"Utilizar el controlador StatefulSet"}} kubernetes/create -.-> lab-9205{{"Utilizar el controlador StatefulSet"}} kubernetes/delete -.-> lab-9205{{"Utilizar el controlador StatefulSet"}} kubernetes/apply -.-> lab-9205{{"Utilizar el controlador StatefulSet"}} kubernetes/scale -.-> lab-9205{{"Utilizar el controlador StatefulSet"}} kubernetes/describe -.-> lab-9205{{"Utilizar el controlador StatefulSet"}} end

Iniciar el clúster de Minikube

Antes de crear recursos, necesitas un clúster de Kubernetes en ejecución. Minikube es un entorno ligero de Kubernetes que se ejecuta en tu máquina local.

  1. Navegar a tu directorio de trabajo:

    Abre la terminal y navega hasta la carpeta de proyecto predeterminada:

    cd /home/labex/project
  2. Iniciar Minikube:

    Inicia Minikube para inicializar un clúster de Kubernetes:

    minikube start
    • Este comando configura un clúster de Kubernetes de un solo nodo en tu máquina local.
    • Minikube puede tardar unos minutos en iniciarse dependiendo del rendimiento de tu sistema.
  3. Verificar que Minikube esté en ejecución:

    Comprueba el estado del clúster de Minikube:

    minikube status
    • Busca componentes como kubelet y apiserver listados como Running (En ejecución).
    • Si el clúster no está en ejecución, vuelve a ejecutar minikube start.

Si encuentras problemas al iniciar Minikube, utiliza minikube delete para restablecer el entorno si es necesario.

Crear PV y PVC

El primer paso es crear un Pod con un Volumen Persistente (Persistent Volume, PV) y una Solicitud de Volumen Persistente (Persistent Volume Claim, PVC). Los PV y los PVC se utilizan para almacenar y acceder a datos de forma persistente a través de reinicios de Pod.

Para hacer esto, primero crearás un PV.

apiVersion: v1
kind: PersistentVolume
metadata:
  name: my-pv
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/mnt/data"

Guarda el código anterior en un archivo llamado pv.yaml y ejecuta el siguiente comando:

kubectl apply -f pv.yaml

Este comando creará un PV llamado my-pv con una capacidad de 1Gi y una ruta de host de /mnt/data.

A continuación, crearás un PVC que solicite 1Gi de almacenamiento del PV.

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi

Guarda el código anterior en un archivo llamado pvc.yaml y ejecuta el siguiente comando:

kubectl apply -f pvc.yaml

Este comando creará un PVC llamado my-pvc que solicita 1Gi de almacenamiento.

Crear un StatefulSet

Crea un archivo llamado statefulset.yaml con el siguiente contenido:

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: web
spec:
  serviceName: "web"
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx:1.19.7
          ports:
            - containerPort: 80
          volumeMounts:
            - name: www
              mountPath: /usr/share/nginx/html
  volumeClaimTemplates:
    - metadata:
        name: www
      spec:
        accessModes: ["ReadWriteOnce"]
        resources:
          requests:
            storage: 1Gi

En este archivo, definimos un StatefulSet llamado web que crea tres réplicas de un pod de NGINX. También definimos un servicio llamado web que selecciona los pods de NGINX utilizando la etiqueta app: nginx. Finalmente, definimos una plantilla de solicitud de volumen persistente para los datos del pod de NGINX.

Para crear el StatefulSet, ejecuta el siguiente comando:

kubectl apply -f statefulset.yaml

Puedes verificar el estado del StatefulSet ejecutando el siguiente comando:

kubectl get statefulsets

Una vez que el StatefulSet esté en ejecución, puedes acceder a los pods de NGINX ejecutando el siguiente comando:

kubectl get pods
kubectl exec -it web-0 -- /bin/bash

Reemplaza web-0 con el nombre de cualquier pod de NGINX creado por el StatefulSet.

¡Felicidades, has creado con éxito un StatefulSet en Kubernetes!

Actualizar un StatefulSet

En Kubernetes, puedes actualizar los pods de un StatefulSet actualizando su plantilla. Vamos a actualizar el archivo statefulset.yaml para utilizar la versión 1.20.0 de NGINX.

Actualiza el archivo statefulset.yaml al siguiente contenido:

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: web
spec:
  serviceName: "web"
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx:1.20.0
          ports:
            - containerPort: 80
          volumeMounts:
            - name: www
              mountPath: /usr/share/nginx/html
  volumeClaimTemplates:
    - metadata:
        name: www
      spec:
        accessModes: ["ReadWriteOnce"]
        resources:
          requests:
            storage: 1Gi

Para actualizar el StatefulSet, ejecuta el siguiente comando:

kubectl apply -f statefulset.yaml

Puedes verificar el estado del StatefulSet ejecutando el siguiente comando:

kubectl get statefulsets

¡Felicidades, has actualizado con éxito un StatefulSet en Kubernetes!

Escalar un StatefulSet

En Kubernetes, puedes escalar un StatefulSet hacia arriba o hacia abajo cambiando su campo replicas. Vamos a escalar nuestro StatefulSet web a cinco réplicas.

Actualiza el archivo statefulset.yaml al siguiente contenido:

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: web
spec:
  serviceName: "web"
  replicas: 5
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx:1.20.0
          ports:
            - containerPort: 80
          volumeMounts:
            - name: www
              mountPath: /usr/share/nginx/html
  volumeClaimTemplates:
    - metadata:
        name: www
      spec:
        accessModes: ["ReadWriteOnce"]
        resources:
          requests:
            storage: 1Gi

Para actualizar el StatefulSet, ejecuta el siguiente comando:

kubectl apply -f statefulset.yaml

Puedes verificar el estado del StatefulSet ejecutando el siguiente comando:

kubectl get statefulsets

¡Felicidades, has escalado con éxito un StatefulSet en Kubernetes!

Eliminar un StatefulSet

En Kubernetes, puedes eliminar un StatefulSet ejecutando el siguiente comando:

kubectl delete statefulset web

Esto eliminará el StatefulSet web y todos sus pods.

¡Felicidades, has completado el laboratorio sobre modelado de estabilidad con StatefulSets en Kubernetes!

Resumen

En este laboratorio, aprendimos cómo modelar la estabilidad con StatefulSets en Kubernetes. Creamos un StatefulSet, actualizamos un StatefulSet, escalamos un StatefulSet y eliminamos un StatefulSet. Estas son las operaciones básicas que necesitarás realizar cuando trabajes con StatefulSets en Kubernetes.