CodeBlanks Logo Icon CodeBlanks

StatefulSet ile veritabanı

Veritabanını StatefulSet olarak yazarsın.

StatefulSet ile veritabanı

Veritabanı tek kopyalı bir StatefulSet'e taşınır: sabit adı (db-0), kalıcı diski (data-db-0) ve headless servisi olur. Şablon, disk boyutunu values'tan alır:

# templates/db-statefulset.yaml (özet)
spec:
  serviceName: db
  replicas: 1
  template:
    spec:
      containers:
        - name: postgres
          image: postgres:16
          envFrom:
            - secretRef: {name: db-gizli}
          volumeMounts:
            - name: data
              mountPath: /var/lib/postgresql/data
  volumeClaimTemplates:
    - metadata: {name: data}
      spec:
        accessModes: ["ReadWriteOnce"]
        resources:
          requests:
            storage: {{ .Values.db.storage }}

Veritabanını sınamak

Kurulumdan sonra veritabanının hazır olduğu, diskin bağlandığı ve sabit adın çözüldüğü sınanır:

kubectl rollout status sts/db -n magaza
kubectl get pvc -n magaza
kubectl exec -n magaza db-0 -- pg_isready -U postgres
/var/run/postgresql:5432 - accepting connections
kubectl exec -n magaza deploy/api -- getent hosts db-0.db

Uygulama Veritabanını doğrula

Üç komut yaz: magaza'da sts/db'nin dağıtımının bitmesini bekle; magaza'daki PVC'leri listele; magaza'da db-0 pod'unda pg_isready -U postgres çalıştır.

Başlangıç kodu

terminal
# buraya yaz

Örnek çözüm

terminal
kubectl rollout status sts/db -n magaza
kubectl get pvc -n magaza
kubectl exec -n magaza db-0 -- pg_isready -U postgres

Beklenen çıktı

partitioned roll out complete: 1 new pods have been updated...
NAME        STATUS   VOLUME      CAPACITY   ACCESS MODES   STORAGECLASS
data-db-0   Bound    pvc-5e6f…   20Gi       RWO            hizli-ssd
/var/run/postgresql:5432 - accepting connections

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Bu yapıda helm uninstall magaza çalıştırılırsa veritabanı verisi ne olur?

  • Başka namespace'e taşınır
  • PVC (data-db-0) kalır; veri korunur Doğru cevap
  • Hemen silinir
  • Yedeğe taşınır

Açıklama: volumeClaimTemplates'ten oluşan PVC'ler Helm release'inin parçası değildir.

2 Disk boyutunu values'tan al.

Soru
            storage: {{ .____.db.storage }}
Cevap
            storage: {{ .Values.db.storage }}

Açıklama: .Values values dosyalarındaki değerlerdir.

3 Eşleştir.

Kavram Anlamı
db-0 Sabit pod adı
data-db-0 Kalıcı disk
pg_isready Veritabanı hazır mı
db-0.db Pod DNS adı

İleri seviye bölümündeki tüm dersler