Kubernetes: Heketi ve GlusterFS ile  Dinamik Birim Hazırlama

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.

 

 

Skip to content