Orchestrarea Aplicațiilor cu Stare cu StatefulSet și Headless Service în Kubernetes (kubectl)

Ghid avansat pentru StatefulSets în Kubernetes: gestionarea bazelor de date și sistemelor distribuite (PostgreSQL, Kafka, Redis) cu identitate de rețea stabilă, volume persistente dedicate și servicii Headless fără IP virtual.

Sintaxă comandă
kubectl get statefulsets | kubectl rollout status statefulset/postgres-cluster

Aplicațiile distribuite cu stare (baze de date cu replicare primar-secundar, clustere Kafka, Zookeeper, Elasticsearch) nu pot fi orchestrate prin Deployment-uri obișnuite, deoarece Pod-urile unui Deployment sunt interschimbabile, au nume aleatorii generate dinamic (ex: backend-7d9f8b-x2k4) și împart aceleași volume de disc. StatefulSet rezolvă această problemă oferind trei garanții fundamentale:

  1. Identitate ordinală stabilă: Pod-urile sunt numite secvențial: db-0, db-1, db-2. La repornire, Pod-ul își recapătă exact același nume.
  2. Stocare persistentă dedicată: Prin volumeClaimTemplates, fiecare replică primește propriul său volum de disc (PVC) independent, care nu este șters chiar dacă Pod-ul este oprit.
  3. Ordine strictă de pornire și actualizare: db-0 trebuie să fie complet pornit și sănătos înainte ca db-1 să fie inițializat.
StatefulSet cu Headless Service (cluster-ip: None)
# 1. Serviciul Headless (permite accesarea directă a fiecărui Pod prin DNS intern):
apiVersion: v1
kind: Service
metadata:
  name: postgres-headless
spec:
  clusterIP: None # Fără IP virtual comun!
  selector:
    app: postgres
  ports:
    - port: 5432
      name: postgres

---
# 2. Obiectul StatefulSet:
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: postgres
spec:
  serviceName: "postgres-headless"
  replicas: 3
  selector:
    matchLabels:
      app: postgres
  template:
    metadata:
      labels:
        app: postgres
    spec:
      containers:
        - name: postgres
          image: postgres:16-alpine
          ports:
            - containerPort: 5432
          volumeMounts:
            - name: pgdata
              mountPath: /var/lib/postgresql/data
  # Șablonul care provizionează dinamic un volum independent per Pod:
  volumeClaimTemplates:
    - metadata:
        name: pgdata
      spec:
        accessModes: [ "ReadWriteOnce" ]
        storageClassName: "fast-ssd"
        resources:
          requests:
            storage: 20Gi

Datorită serviciului Headless, fiecare instanță poate fi apelată direct prin adresa sa DNS stabilă: postgres-0.postgres-headless.default.svc.cluster.local (utilizat de replica secundară pentru a se sincroniza cu nodul primar).

Comunitate & Schimb de cunoștințe

Întrebări & Exemple de Cod: Orchestrarea Aplicațiilor cu Stare cu StatefulSet și Headless Service

Ai o nelămurire despre utilizarea comenzii Orchestrarea Aplicațiilor cu Stare cu StatefulSet și Headless Service sau ai descoperit un truc / fragment de cod util? Distribuie-l cu ceilalți programatori!

💬

Fii primul care pune o întrebare sau distribuie un fragment de cod / prompt!

Nu au fost adăugate încă întrebări sau exemple de cod pentru această pagină. Dacă ai întâlnit o problemă sau ai un snippet util, adaugă-l mai jos pentru a-i ajuta pe ceilalți.

Comunitate Adaugă o întrebare sau distribuie un cod

Moderare & Siguranță:

Pentru a menține calitatea și securitatea informațiilor, fiecare întrebare sau fragment de cod/prompt este analizat (manual sau prin moderare asistată de AI) înainte de publicare.