Kubernetes, modern uygulamaların dağıtımı ve yönetimi için oldukça popüler bir platformdur. Bu platformda kullanılan en önemli kaynaklardan biri de Persistent Volume (Kalıcı Depolama) ve Persistent Volume Claim (Kalıcı Depolama Talebi)dir. Bu iki kavram, uygulamaların ihtiyaç duyduğu kalıcı depolama alanını sağlamak için kullanılır.
Bu makalede, Persistent Volume ve Persistent Volume Claim kavramları hakkında detaylı bilgi vereceğim. Ayrıca, bu kavramların kullanımına dair örnekler sunarak, konunun daha iyi anlaşılmasını amaçlıyorum.
1- Persistent Volume Nedir?
Persistent Volume (PV), Kubernetes platformunda bağımsız olarak yönetilen bir depolama kaynağıdır. Yani, bu kaynak belli bir kapasiteye sahiptir ve işletim sistemi seviyesinde tanımlanabilir. PV’lerin oluşturulması, yönetilmesi ve silinmesi, Kubernetes cluster’ındaki sistem yöneticileri tarafından gerçekleştirilir.
PV’ler, farklı türde depolama cihazlarında bulunabilir. Örneğin, fiziksel ya da sanal sunucularda yer alan diskler, bulut tabanlı depolama servisleri vb. Bu nedenle, PV’lerin kullanımı uygulamanın çalıştığı ortama göre değişebilir.
2- Persistent Volume Claim Nedir?
Persistent Volume Claim (PVC), uygulamanın kalıcı depolama taleplerini belirtmek için kullanılan bir araçtır. Yani, PVC’ler, uygulamaların ihtiyaç duyduğu depolama alanını belirlemek için kullanılır.
PVC’ler, PV’lerin üzerinde çalışır ve belirli bir kapasite talep ederler. Bu talepler, Kubernetes tarafından otomatik olarak PV’ler ile eşleştirilerek karşılanır. Bu sayede, uygulamaların ihtiyaçları doğrultusunda esnek bir şekilde depolama alanı sağlanır.
3- Persistent Volume ve Persistent Volume Claim Kullanımı
Öncelikle, bir PV oluşturmak için aşağıdaki YAML dosyasını kullanabilirsiniz:
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-sample
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: slow
hostPath:
path: /data/pv-sample
Bu dosya, 1GB boyutunda bir PV oluşturur. Aynı zamanda, RWX (ReadWriteOnce) access mode’u ile tanımlanmıştır. Bu access mode’u, PV’nin sadece tek bir Node üzerinden okunup yazılabileceğini belirtir. Ayrıca, PV için “Retain” politikası belirtilmiştir. Bu politika, PV silindiğinde verilerin silinmeyeceği anlamına gelir. Son olarak, “slow” adında bir storage class belirlenmiştir. Storage class, farklı türde depolama alanları için farklı özellikler belirleyen bir yapıdır.
PV oluşturma işleminden sonra, bir PVC oluşturabilirsiniz. Örneğin:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-sample
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 500Mi
storageClassName: slow
Bu dosya, 500MB boyutunda bir PVC oluşturur. Aynı zamanda, RWX access mode’u ve “slow” storage class’ı belirlenmiştir. PVC, 500MB boyutu talep ettiği için, Kubernetes otomatik olarak uygun bir PV ile eşleştirir.
Sonuç olarak, uygulamanın kullanacağı PV, verilen PVC ile eDevam
Sonuç olarak, uygulamanın kullanacağı PV, verilen PVC ile eşleştirilir. Böylece, uygulama tarafından kullanılacak kalıcı depolama alanı sağlanmış olur.
4- Örnekler ile Persistent Volume ve Persistent Volume Claim Kullanımı
Aşağıda, birkaç örnekle PV ve PVC kullanımını açıklayacağım.
4.1 – NFS Tabanlı Depolama Sistemi ile PV Kullanımı
Bir diğer popüler depolama sistemi olan Network File System (NFS), Kubernetes üzerinde de kullanılabilir. Bu sistemde, bir sunucu üzerindeki sanal dosya sistemi, diğer sunucular tarafından da erişilebilir hale gelir. Bu sayede, birden fazla Node üzerinde çalışan uygulamalar, aynı dosyalara erişebilirler.
PV için aşağıdaki YAML dosyası kullanılabilir:
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-nfs
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteMany
nfs:
path: /mnt/data
server: nfs-server.example.com
Bu dosya, 5GB boyutunda bir PV oluşturur. Aynı zamanda, RWX (ReadWriteMany) access mode’u ile tanımlanmıştır. Bu access mode’u, PV’nin birden fazla Node üzerinden okunup yazılabileceğini belirtir. Ayrıca, “nfs-server.example.com” adresindeki NFS sunucusuna bağlanarak “/mnt/data” yolunu kullanır.
PVC için ise şöyle bir YAML dosyası kullanılabilir:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-nfs
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 2Gi
selector:
matchLabels:
release: stable
volumeName: pv-nfs
Bu dosya, 2GB boyutunda bir PVC oluşturur. Aynı zamanda, RWX access mode’u ve “pv-nfs” adında bir PV’ye sahip olduğunu belirtir.
4.2 – İki Farklı Storage Class ile PVC Kullanımı
Kubernetes’deki storage class’lar, farklı türde depolama alanları için belirli özellikler tanımlayan yapılar olup, PVC’ler bu class’lardan birini kullanarak oluşturulabilirler. Örneğin, bir uygulamanın depolama ihtiyacı, bazı durumlarda daha hızlı diskler gerektirebilirken, diğer durumlarda daha yüksek kapasiteli ancak daha yavaş diskler yeterli olabilir.
Bu nedenle, farklı storage class’lar kullanarak farklı PVC’ler oluşturmak mümkündür. Örneğin:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: fast
provisioner: kubernetes.io/aws-ebs
parameters:
type: gp2
zones: us-west-1a
reclaimPolicy: Retain
allowVolumeExpansion: true
Bu dosya, “fast” adında bir storage class oluşturur. Bu storage class, Amazon Web Services’in Elastic Block Store (EBS) servisi üzerinde GP2 tipinde diskler oluşturur. Ayrıca, “us-west-1a” bölgesinde yer alan bir Availability Zone’da oluşturulur. Bu storage class, Retain politikası ile oluşturulan PV’lerin silinmemesini sağlar.
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: slow
provisioner: kubernetes.io/aws-ebs
parameters:
type: st1
zones: us-west-1a
reclaimPolicy: Delete
allowVolumeExpansion: true
Bu dosya ise, “slow” adında bir storage class oluşturur. Bu storage class, Amazon Web Services’in Elastic Block Store (EBS) servisi üzerinde ST1 tipinde diskDevam
4.2 – İki Farklı Storage Class ile PVC Kullanımı (devam)
Bu dosya ise, “slow” adında bir storage class oluşturur. Bu storage class, Amazon Web Services’in Elastic Block Store (EBS) servisi üzerinde ST1 tipinde diskler oluşturur. Ayrıca, “us-west-1a” bölgesinde yer alan bir Availability Zone’da oluşturulur. Bu storage class, Delete politikası ile oluşturulan PV’lerin silinmesini sağlar.
PVC için aşağıdaki YAML dosyası kullanılabilir:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-fast
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
storageClassName: fast
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-slow
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
storageClassName: slow
Bu dosya, “fast” ve “slow” storage class’lardan farklı PVC’ler oluşturur. İlk PVC, “fast” storage class’ını kullanarak 1GB boyutunda bir depolama alanı talep ederken, ikinci PVC “slow” storage class’ını kullanarak 10GB boyutunda bir depolama alanı talep eder.
5- Son Söz
Bu makalede, Kubernetes platformunda kullanılan Persistent Volume ve Persistent Volume Claim kavramlarına detaylı bir şekilde değindik. Ayrıca, bu kavramların kullanımına dair örnekler sunduk. PV ve PVC’lerin kullanımı, uygulamaların ihtiyaç duyduğu kalıcı depolama alanını esnek bir şekilde sağlayarak, Kubernetes platformunun gücünü artırır.
Unutmayın, herhangi bir Kubernetes cluster’ında uygun bir kalıcı depolama yönetimi yapmak, uygulamanızın performansını ve güvenilirliğini artıracaktır. Bu nedenle, PV ve PVC kullanımı, uygulamaların kesintisiz bir şekilde çalışabilmesi için oldukça önemlidir. Bu makalede sağladığım detaylı bilgiler sayesinde, Kubernetes’te bu kavramların ne olduğunu ve nasıl kullanılacağını öğrenmiş oldunuz. Umarım bu yazı, kalıcı depolama yönetimi konusunda size faydalı olmuştur.