Introducció
En aquest tema, explorarem els StatefulSets, un component avançat de Kubernetes que s'utilitza per gestionar aplicacions amb estat. A diferència dels Deployments, que són ideals per a aplicacions sense estat, els StatefulSets proporcionen garanties i funcionalitats addicionals necessàries per a aplicacions que requereixen un estat persistent i una identitat estable.
Objectius d'Aprenentatge
Al final d'aquest tema, hauràs après:
- Què és un StatefulSet i quan utilitzar-lo.
- Com crear i gestionar StatefulSets.
- Les diferències clau entre StatefulSets i Deployments.
- Com utilitzar PersistentVolumeClaims (PVCs) amb StatefulSets.
Què és un StatefulSet?
Un StatefulSet és un objecte de Kubernetes que s'utilitza per gestionar aplicacions amb estat. Proporciona garanties sobre l'ordre i la identitat dels Pods, cosa que és crucial per a aplicacions com bases de dades, sistemes de fitxers distribuïts i altres serveis que requereixen un estat persistent.
Característiques Clau dels StatefulSets
- Identitat Estable: Cada Pod en un StatefulSet té una identitat única i estable que es manté al llarg del temps.
- Ordre de Creació i Eliminació: Els Pods es creen i s'eliminen en un ordre específic.
- Emmagatzematge Persistent: Els StatefulSets treballen amb PersistentVolumeClaims (PVCs) per assegurar que cada Pod tingui el seu propi emmagatzematge persistent.
Creació d'un StatefulSet
A continuació, veurem un exemple pràctic de com crear un StatefulSet. Suposem que volem desplegar una base de dades MySQL amb un StatefulSet.
Exemple de YAML per a un StatefulSet
apiVersion: apps/v1 kind: StatefulSet metadata: name: mysql spec: serviceName: "mysql" replicas: 3 selector: matchLabels: app: mysql template: metadata: labels: app: mysql spec: containers: - name: mysql image: mysql:5.7 ports: - containerPort: 3306 name: mysql volumeMounts: - name: mysql-persistent-storage mountPath: /var/lib/mysql volumeClaimTemplates: - metadata: name: mysql-persistent-storage spec: accessModes: [ "ReadWriteOnce" ] resources: requests: storage: 1Gi
Explicació del YAML
- apiVersion: La versió de l'API que estem utilitzant.
- kind: El tipus de recurs, en aquest cas, StatefulSet.
- metadata: Informació sobre el StatefulSet, com el nom.
- spec: La especificació del StatefulSet.
- serviceName: El nom del servei associat amb aquest StatefulSet.
- replicas: El nombre de rèpliques (Pods) que volem.
- selector: Els selectors d'etiquetes per identificar els Pods gestionats per aquest StatefulSet.
- template: El template per als Pods.
- metadata: Les etiquetes per als Pods.
- spec: La especificació dels contenidors dins dels Pods.
- containers: La llista de contenidors.
- name: El nom del contenidor.
- image: La imatge del contenidor.
- ports: Els ports exposats pel contenidor.
- volumeMounts: Els volums muntats dins del contenidor.
- containers: La llista de contenidors.
- volumeClaimTemplates: Els templates per als PersistentVolumeClaims.
Diferències Clau entre StatefulSets i Deployments
Característica | StatefulSet | Deployment |
---|---|---|
Identitat dels Pods | Estable i única | No garantida |
Ordre de Creació | Seqüencial | Paral·lel |
Emmagatzematge | PersistentVolumeClaims per Pod | Compartit o no persistent |
Ús Comú | Bases de dades, sistemes distribuïts | Aplicacions sense estat |
Exercici Pràctic
Exercici 1: Crear un StatefulSet
- Crea un fitxer YAML anomenat
statefulset-mysql.yaml
amb el contingut proporcionat a l'exemple anterior. - Aplica el fitxer al teu clúster de Kubernetes utilitzant el següent comandament:
kubectl apply -f statefulset-mysql.yaml
- Verifica que els Pods s'han creat en l'ordre correcte i tenen identitats estables:
kubectl get pods -l app=mysql
Solució
Després d'aplicar el fitxer YAML, hauries de veure tres Pods amb noms com mysql-0
, mysql-1
, i mysql-2
. Aquests noms es mantindran estables fins i tot si els Pods es reinicien.
Resum
En aquest tema, hem après què són els StatefulSets i com s'utilitzen per gestionar aplicacions amb estat en Kubernetes. Hem vist un exemple pràctic de com crear un StatefulSet per a una base de dades MySQL i hem explorat les diferències clau entre StatefulSets i Deployments. Amb aquests coneixements, estàs preparat per gestionar aplicacions amb estat en el teu clúster de Kubernetes.
Curs de Kubernetes
Mòdul 1: Introducció a Kubernetes
- Què és Kubernetes?
- Arquitectura de Kubernetes
- Conceptes i Terminologia Clau
- Configuració d'un Clúster de Kubernetes
- CLI de Kubernetes (kubectl)
Mòdul 2: Components Bàsics de Kubernetes
Mòdul 3: Gestió de Configuració i Secrets
Mòdul 4: Xarxes en Kubernetes
Mòdul 5: Emmagatzematge en Kubernetes
Mòdul 6: Conceptes Avançats de Kubernetes
Mòdul 7: Monitorització i Registre
- Monitorització amb Prometheus
- Registre amb Elasticsearch, Fluentd i Kibana (EFK)
- Controls de Salut i Probes
- Servidor de Mètriques
Mòdul 8: Seguretat en Kubernetes
- Control d'Accés Basat en Rols (RBAC)
- Polítiques de Seguretat de Pods
- Seguretat de Xarxa
- Seguretat d'Imatges
Mòdul 9: Escalabilitat i Rendiment
- Autoscalat Horitzontal de Pods
- Autoscalat Vertical de Pods
- Autoscalat de Clúster
- Optimització del Rendiment
Mòdul 10: Ecosistema i Eines de Kubernetes
Mòdul 11: Estudis de Cas i Aplicacions del Món Real
- Desplegament d'una Aplicació Web
- CI/CD amb Kubernetes
- Execució d'Aplicacions Stateful
- Gestió Multi-Clúster