En aquest tema, explorarem com desplegar i gestionar aplicacions stateful en Kubernetes. Les aplicacions stateful són aquelles que mantenen l'estat entre les execucions, com bases de dades, sistemes de fitxers distribuïts, i altres aplicacions que requereixen persistència de dades.
Objectius del Tema
- Entendre què són les aplicacions stateful.
- Aprendre a utilitzar StatefulSets per gestionar aplicacions stateful en Kubernetes.
- Configurar volums persistents per a l'emmagatzematge de dades.
- Desplegar una aplicació stateful com a exemple pràctic.
Què són les Aplicacions Stateful?
Les aplicacions stateful són aquelles que necessiten mantenir l'estat entre les execucions. Això significa que les dades generades per l'aplicació han de ser persistents i accessibles fins i tot després de reiniciar o actualitzar l'aplicació.
Exemples d'Aplicacions Stateful
- Bases de dades (MySQL, PostgreSQL)
- Sistemes de fitxers distribuïts (HDFS, Ceph)
- Aplicacions de missatgeria (Kafka, RabbitMQ)
StatefulSets
StatefulSets són un tipus de controlador de Kubernetes dissenyat específicament per gestionar aplicacions stateful. Proporcionen garanties úniques per a la identitat i l'emmagatzematge dels pods.
Característiques Clau dels StatefulSets
- Identitat Estable: Cada pod en un StatefulSet té un nom únic i estable.
- Ordre de Creació i Eliminació: Els pods es creen i s'eliminen en un ordre determinat.
- Volums Persistents: Cada pod pot tenir el seu propi volum persistent.
Exemple de StatefulSet
A continuació, es mostra un exemple de configuració d'un StatefulSet per a una base de dades MySQL:
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 env: - name: MYSQL_ROOT_PASSWORD value: "password" volumeClaimTemplates: - metadata: name: mysql-persistent-storage spec: accessModes: [ "ReadWriteOnce" ] resources: requests: storage: 1Gi
Explicació del Codi
- apiVersion: La versió de l'API de Kubernetes.
- kind: El tipus de recurs, en aquest cas, StatefulSet.
- metadata: Informació sobre el StatefulSet, com el nom.
- spec: L'especificació del StatefulSet.
- serviceName: El nom del servei associat.
- replicas: El nombre de rèpliques.
- selector: Els selectors d'etiquetes per als pods.
- template: La plantilla per als pods.
- metadata: Les etiquetes per als pods.
- spec: L'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.
- env: Les variables d'entorn.
- containers: La llista de contenidors.
- volumeClaimTemplates: Les plantilles de reclamació de volums persistents.
Exercici Pràctic
Objectiu
Desplegar una base de dades MySQL utilitzant StatefulSets i configurar volums persistents per a l'emmagatzematge de dades.
Passos
- Crear un fitxer YAML amb la configuració del StatefulSet (com l'exemple anterior).
- Aplicar la configuració utilitzant
kubectl
:kubectl apply -f mysql-statefulset.yaml
- Verificar l'estat del StatefulSet:
kubectl get statefulsets kubectl get pods -l app=mysql
- Accedir a la base de dades MySQL:
kubectl exec -it <mysql-pod-name> -- mysql -u root -p
Solució
Assegura't que els pods es creen correctament i que cada pod té el seu propi volum persistent. Pots verificar els volums utilitzant:
Errors Comuns i Consells
- Error: Pod no es crea: Verifica que la imatge del contenidor és correcta i que els volums persistents estan configurats adequadament.
- Error: No es pot accedir a la base de dades: Assegura't que les variables d'entorn estan configurades correctament i que el servei està exposat.
Resum
En aquest tema, hem après a desplegar aplicacions stateful utilitzant StatefulSets en Kubernetes. Hem vist com configurar volums persistents per a l'emmagatzematge de dades i hem desplegat una base de dades MySQL com a exemple pràctic. Amb aquests coneixements, estàs preparat per gestionar aplicacions stateful en un entorn 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