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.
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.
Navegar a tu directorio de trabajo:
Abre la terminal y navega hasta la carpeta de proyecto predeterminada:
cd /home/labex/projectIniciar 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.
Verificar que Minikube esté en ejecución:
Comprueba el estado del clúster de Minikube:
minikube status- Busca componentes como
kubeletyapiserverlistados comoRunning(En ejecución). - Si el clúster no está en ejecución, vuelve a ejecutar
minikube start.
- Busca componentes como
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.


