Kubernetes’teki Dinamik birim provizyonu, manuel Yönetici müdahalesi olmadan depolama birimlerinin isteğe bağlı olarak oluşturulmasına olanak tanır. Geliştiriciler dinamik provizyon olmadan dağıtımlar yaparken, küme yöneticilerinin PersistentVolumes’un oluşturulduğu yerden yeni depolama birimleri oluşturmak için bulut veya depolama sağlayıcılarına manuel olarak çağrı yapması gerekir.
Bu kılavuz, GlusterFS dağıtılmış depolama çözümünü ve Heketi RESTful yönetim arayüzünü kullanarak Kubernetes’te Dinamik Birim Hazırlamayı nasıl başarabileceğinizi tartışacaktır. Heketi ve GlusterFS ölçeklenebilir ağa bağlı depolama dosya sistemini konuşlandırmış olmanız beklenmektedir.
Kubernetes’te Dinamik Provizyon nasıl yapılandırılır?
Kubernetes’te dinamik birim provizyonu, Storage.k8s.io API grubundaki StorageClass API nesnesini temel alır. Bir küme yöneticisi olarak, gerektiği kadar StorageClass nesnesi tanımlayacaksınız; bunların her biri, bir birimin hazırlığını yapan bir birim eklentisini (sağlayıcı) ve sağlama sırasında söz konusu sağlayıcıya iletilecek parametreler kümesini belirtecektir.
Gluster ve Heketi API’yi kullanarak Kubernetes’te Dinamik Birim Sağlama’yı yapılandırmak için kullanacağınız adımlar aşağıda verilmiştir.
1) GlusterFS ve Heketi’i Kurulumu
Kubernetes tarafında yapılandırmalara devam etmeden önce çalışan bir Gluster ve Heketi’nizin olması bekleniyor. Bunları ayarlama konusunda aşağıdaki kılavuzumuza bakın.
Kurulum tamamlandıktan sonra 2. adıma geçin:
2) Kubernetes’te StorageClass Nesnesi Oluşturun
Konteyner platformu kullanıcıları için dinamik provizyonu etkinleştirmek amacıyla bir StorageClass nesnesi oluşturmamız gerekiyor. StorageClass nesneleri, dinamik provizyon çağrıldığında hangi provizörün kullanılması gerektiğini ve bu provizöre hangi parametrelerin iletilmesi gerektiğini tanımlar.
- Heketi Küme Kimliğinizi kontrol edin
$ heketi-cli cluster list
Clusters:
Id:b182cb76b881a0be2d44bd7f8fb07ea4 [file][block]
- Kubernetes Secret Oluşturun
Heketi yönetici kullanıcı şifrenizin base64 formatını alın.
echo -n "PASSWORD" | base64
Daha sonra Heketi’ye erişim şifresi ile bir secret oluşturun.
$ vim gluster-secret.yaml
apiVersion: v1
kind: Secret
metadata:
name: heketi-secret
namespace: default
type: "kubernetes.io/glusterfs"
data:
# echo -n "PASSWORD" | base64
key: cGFzc3dvcmQ=
Bilgi:
- cGFzc3dvcmQ= echo komutunun çıktısıdır.
Komutu çalıştırarak secret oluşturun:
kubectl create -f gluster-secret.yaml
Secret oluşumun onaylayın.
$ kubectl get secret
NAME TYPE DATA AGE
heketi-secret kubernetes.io/glusterfs 1 1d
- StorageClass Oluşturma
Aşağıda Heketi kullanan GlusterFS için örnek bir StorageClass verilmiştir.
$ cat glusterfs-sc.yaml
kind: StorageClass
apiVersion: storage.k8s.io/v1beta1
metadata:
name: gluster-heketi
provisioner: kubernetes.io/glusterfs
reclaimPolicy: Delete
volumeBindingMode: Immediate
allowVolumeExpansion: true
parameters:
resturl: "http://heketiserverip:8080"
restuser: "admin"
secretName: "heketi-secret"
secretNamespace: "default"
volumetype: "replicate:2"
volumenameprefix: "k8s-dev"
clusterid: "b182cb76b881a0be2d44bd7f8fb07ea4"
Bilgi:
- gluster-heketi oluşturulacak StorageClass’ın adıdır.
- Geri alma politikası için geçerli seçenekler Retain, Delete or Recycle’dır. Silme ilkesi, bir kullanıcı karşılık gelen PersistentVolumeClaim’i sildiğinde dinamik olarak sağlanan birimin otomatik olarak silineceği anlamına gelir.
- VolumeBindingMode alanı, birim bağlamanın ve dinamik sağlamanın ne zaman gerçekleşmesi gerektiğini denetler. Geçerli seçenekler Immediate & WaitForFirstConsumer’dır. Anında mod, PersistentVolumeClaim oluşturulduktan sonra birim bağlamanın ve dinamik sağlamanın gerçekleştiğini belirtir. WaitForFirstConsumer modu, PersistentVolumeClaim kullanan bir Pod oluşturulana kadar PersistentVolume’un bağlanmasını ve sağlanmasını geciktirir.
- Resturl, heketi uç noktanızın URL’sidir
- heketi-sırrı, Heketi kimlik bilgileri için oluşturulan secret’tır .
- varsayılan, secret’ın oluşturulduğu ad alanının adıdır
- replicate:2 oluşturulan Gluster Birimleri için varsayılan çoğaltma faktörünü belirtti. Daha fazla HA için 3’ü kullanın.
- volumenameprefix: Varsayılan olarak dinamik olarak sağlanan birimler vol_UUID biçimindeki adlandırma şemasına sahiptir. Storageclass’tan istenilen birim adını sağladık. Yani adlandırma şeması şöyle olacaktır: Volumenameprefix_Namespace_PVCname_randomUUID
- b182cb76b881a0be2d44bd7f8fb07ea4
heketi-cli cluster list
komutundan elde edilen kümenin kimliğidir
Ayarlanabilecek diğer bir parametre ise:
volumeoptions: "user.heketi.zone-checking strict"
Varsayılan ayar/davranış şöyledir:
volumeoptions: "user.heketi.zone-checking none"
Bu, Heketi’yi kopya tuğlaları kesinlikle farklı bölgelere yerleştirmeye zorluyor. Çoğaltma değeri 3 olarak ayarlanmışsa, farklı bölgelerde bulunması gereken minimum düğüm sayısı 3’tür.
Dosya oluşturulduktan sonra StorageClass nesnesini oluşturmak için aşağıdaki komutu çalıştırın.
$ kubectl create -f gluster-sc.yaml
StorageClass oluşturmayı onaylayın.
$ kubectl get sc
NAME PROVISIONER AGE
glusterfs-heketi kubernetes.io/glusterfs 1d
local-storage kubernetes.io/no-provisioner 30d
3) PersistentVolumeClaim Nesnesi Oluştur
Bir kullanıcı dinamik olarak sağlanan depolama talebinde bulunduğunda PersistentVolumeClaim’e bir depolama sınıfı eklenmelidir.
Depolama için 1GB’lık bir istek oluşturalım:
$ vim glusterfs-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: gluster-pvc
annotations:
volume.beta.kubernetes.io/storage-class: gluster-heketi
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
Nesne oluşturma:
$ kubectl create --save-config -f glusterfs-pvc.yaml
Onay:
$ kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
glusterfs-pvc Bound pvc-34b9b5e9-fbde-11e9-943f-00505692ee7e 1Gi RWX glusterfs-heketi 1d
Oluşturduktan sonra dağıtımlarınızda kullanabilirsiniz. Birimi kullanmak için herhangi bir Pod’un/Dağıtım’ın YAML dosyasındaki PVC’ye referans veririz, örneğin:
apiVersion: v1
kind: Pod
metadata:
name: gluster-pod
labels:
name: gluster-pod
spec:
containers:
- name: gluster-pod
image: busybox
command: ["sleep", "60000"]
volumeMounts:
- name: gluster-vol
mountPath: /usr/share/busybox
readOnly: false
volumes:
- name: gluster-vol
persistentVolumeClaim:
claimName: glusterfs-pvc
Yazının orijinalini buradan okuyabilirsiniz.
Kariyerime 26 yıl önce başladım. Windows ve Linux sistemlerinin kurulumu, yapılandırılması, yönetimi ve bakımı dahil olmak üzere birden fazla sistem üzerinde uzmanlaştım.
Açık kaynak dünyasındaki en son gelişmelerden haberdar olmaktan ve Linux hakkındaki en son araçları, özellikleri ve hizmetleri denemekten hoşlanıyorum.
Son 6 yıldır sistem ve ağ yöneticisi olarak görev yapıyorum ayrıca Pardus Dönüşüm Projesini yönetiyorum ve Pardus İşletim Sisteminin yaygınlaşması adına uğraş gösteriyorum.
Boş zamanlarımda açık kaynaklı uygulamaların Türkçe çevirisine katılıyorum ve The Document Foundation üyesiyim.