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

  1. Crea un fitxer YAML anomenat statefulset-mysql.yaml amb el contingut proporcionat a l'exemple anterior.
  2. Aplica el fitxer al teu clúster de Kubernetes utilitzant el següent comandament:
    kubectl apply -f statefulset-mysql.yaml
    
  3. 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

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

Mòdul 8: Seguretat en Kubernetes

Mòdul 9: Escalabilitat i Rendiment

Mòdul 10: Ecosistema i Eines de Kubernetes

Mòdul 11: Estudis de Cas i Aplicacions del Món Real

Mòdul 12: Preparació per a la Certificació de Kubernetes

© Copyright 2024. Tots els drets reservats