Kubernetes'te StorageClass Nedir?
Source: Dev.to
Storage Akışının Mantığı
Kubernetes’te storage zinciri şu şekildedir:
Pod → PVC → StorageClass → PV → Physical Storage
Persistent Volume (PV)
PV, cluster içindeki gerçek disk kaynağını temsil eder. Bu kaynak aşağıdakilerden biri olabilir:
- Node üzerindeki local disk
- NFS share
- Cloud disk
- Distributed storage
Yani PV, storage’ın kendisidir.
Persistent Volume Claim (PVC)
PVC, uygulamanın disk talebidir. Örneğin:
resources:
requests:
storage: 10Gi
accessModes:
- ReadWriteOnce
storageClassName: fast-storage
PVC bir disk oluşturmaz; sadece bir disk talep eder.
StorageClass Nedir?
StorageClass, PVC oluşturulduğunda diskin nasıl sağlanacağını belirleyen bir policy katmanıdır. Örneğin:
- Disk local mi, NFS mi, cloud block storage mı?
- Otomatik mi üretilecek?
- Hangi performans sınıfı kullanılacak?
Static vs Dynamic Provisioning
Static Provisioning
- PV manuel olarak oluşturulur.
- Önce storage kaynağı tanımlanır, ardından PVC bu PV’ye bağlanır.
- Daha fazla kontrol sağlar ancak her yeni disk ihtiyacında manuel işlem gerekir.
- Genellikle test ortamlarında veya local/NFS kurulumlarında tercih edilir.
Dynamic Provisioning
- Sadece PVC oluşturulur.
- Bağlı olduğu StorageClass, arka planda otomatik olarak uygun bir PV üretir ve PVC’ye bağlar.
- Bu süreç CSI (Container Storage Interface) driver’ları sayesinde çalışır.
- Production ortamlarında genellikle tercih edilir; daha otomatik ve ölçeklenebilirdir.
Disk Gerçekte Nerede?
Bu sorunun cevabı PV tanımındadır.
Local PV
PV şu path’i gösteriyorsa, örneğin /mnt/k8s/data, disk node üzerindedir. Node arızalanırsa veri kaybedilebilir; pod başka node’a taşınırsa diske erişilemez.
NFS
nfs:
server: 192.168.1.10
path: /srv/nfs/share
Disk NFS server üzerindedir. Pod hangi node’da olursa olsun aynı veriye erişebilir.
Cloud Storage
PV bir cloud volume’a bağlıysa, disk cloud provider tarafındadır.
Access Modes
- ReadWriteOnce (RWO) – Sadece tek node yazabilir.
- ReadWriteMany (RWX) – Birden fazla node yazabilir.
- ReadOnlyMany (ROX) – Birden fazla node sadece okuyabilir.
Reclaim Policy
PVC silindiğinde disk’in nasıl davranacağını belirler. Kubernetes’te üç farklı reclaim policy vardır (birisi eski):
- Retain – PVC silinse bile PV ve içindeki veri korunur.
- Delete – PVC silindiğinde PV ve arkasındaki storage kaynağı silinir.
- Recycle (Deprecated) – PV içindeki veriyi basitçe temizleyip tekrar kullanılabilir hale getirirdi.
Örneğin: MariaDB ve PostgreSQL Verisi Nerede?
MariaDB
- Varsayılan veri dizini:
/var/lib/mysql - Persistence yapılandırılmadıysa, bu dizin container filesystem’i üzerindedir; pod silindiğinde veri kaybolur.
- Persistence etkinleştirildiğinde, bu path bir
volumeMountile bir PVC’ye bağlanır:PVC → PV → Physical storage. Pod silinse bile veri korunur.
kubectl describe pod <pod-name>
Yukarıdaki komutla mount edilen path’leri görebilirsiniz.
PostgreSQL
- Varsayılan veri dizini:
/var/lib/postgresql/data - Mantık MariaDB ile aynıdır. Persistence yoksa veri geçicidir; persistence varsa bu dizin bir PVC’ye mount edilir ve gerçek disk PV tarafındadır.
Gerçek Disk Yeri Nasıl Bulunur?
# PVC'yi bul
kubectl get pvc -n <namespace>
# Bağlı olduğu PV'yi göster
kubectl describe pvc <pvc-name>
# PV detayını incele
kubectl describe pv <pv-name>
Bu komutlar sayesinde PV’nin local path mi, NFS server mı, cloud volume mu yoksa distributed storage mı olduğunu görebilirsiniz. Gerçek disk yeri PV tanımında belirtilir.