
Gluster ile Kubernetes Dinamik Birim Sağlama
Daha önceki makalelerde adım adım Kubernetes cluster’ımızı, ardından da Gluster cluster’ımızı kurmuştuk. Bu makelede ikisini nasıl birbirine entegre ederek Dynamic Volume Provisioning (Dinamik Birim Sağlama) yapabileceğimizi göreceğiz.
Kubernetes ile GlusterFS entegrasyonuna başlarken öncelikle Kubernetes Cluster’ının tüm worker node’larında GlusterFS Native Client kurulumu yapılmalıdır.
Ardından Kubernetes sunucusu üzerine Heketi kullanıcı adı ve şifre değerlerinin aşağıdaki şekilde base64 değerleri alınır;
echo -n [KULLANICI_ADI] | base64 echo -n [ŞİFRE] | base64

Bu bilgiler kullanılarak Kubernetes’te ileriki adımlarda kullanacağımız secret’ler için aşağıdaki komutla heketi-secret.yaml adında bir dosya oluşturulur;
cat > heketi-secret.yaml<<EOF --- apiVersion: v1 type: kubernetes.io/glusterfs kind: Secret metadata: name: heketi-secret namespace: default data: user: YWRtaW4= key: TjNmNUJTTmlnbkxNS1pkS05vWjZtVmU0Wg== EOF
Bu dosya yardımıyla aşağıdaki şekilde heketi-secret’leri oluşturulur;
kubectl create -f heketi-secret.yaml
Storage Class Oluşturulması
Aşağıdaki komut yardımıyla Storage class tanımının yer aldığı cluster-shared-storage.yaml dosyası oluşturulur;
cat > cluster-shared-storage.yaml<<EOF apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: cluster.shared.storage provisioner: kubernetes.io/glusterfs parameters: resturl: "http://192.168.200.5:8080" clusterid: "5b9e8289c83ffb6e661bb4c31bffa6ee" restuser: "admin" secretNamespace: "default" secretName: "heketi-secret" volumetype: "replicate:2" EOF
Not: Bu dosyada 192.168.200.5 adresi yerine Heketi sunucusu ip adresi verilmelidir.
Not: volumetype: “replicate:2” ifadesinde yer alan 2 değeri replica sayısıdır. Kurulum yapılan sisteme göre güncellenmelidir.
Not: clusterid değeri önceki komutlardan alınan değerle değiştirilmelidir.
Oluşturulan dosya kullanılarak aşağıdaki komutla StorageClass oluşturulur;
kubectl create -f cluster-shared-storage.yaml
En az bir StorageClass’ın varsayılan olarak atanması gerekmektedir. Bu sebeple aşağıdaki komutla cluster.shared.storage varsayılan olarak atanır;
kubectl patch storageclass cluster.shared.storage -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
Oluşturulan StorageClass aşağıdaki şekilde teyit edilebilir;
kubectl get storageclass

Bu adımların ardından Kubernetes ile Gluster entegrasyonunu tamamlamış oluyoruz. Entegrasyonu test etmek isterseniz aşağıda örnek olarak verilen adımları takip edebilirsiniz.
Örnek
Aşağıda Nginx Pod’una 5gb’lık alanın bağlanmasına dair örnek adımlarını bulabilirsiniz.
Aşağıdaki komut yardımıyla gluster-pvc.yaml adıyla Persistent Volume Claim tanım dosyası oluşturulur;
cat > gluster-pvc.yaml<<EOF apiVersion: v1 kind: PersistentVolumeClaim metadata: name: gluster1 annotations: volume.beta.kubernetes.io/storage-class: cluster.shared.storage spec: accessModes: - ReadWriteOnce resources: requests: storage: 5Gi EOF
Oluşturulan dosya yardımıyla aşağıdaki komutla Persistent Volume Claim oluşturulur;
kubectl create -f gluster-pvc.yaml
Komut sonucu aşağıdaki şekilde kontrol edilebilir;
kubectl get pvc

Test Pod tanım dosyası nginx-pod.yaml adıyla ve aşağıdaki komutla oluşturulur;
cat > nginx-pod.yaml<<EOF apiVersion: v1 kind: Pod metadata: name: nginx-pod1 labels: name: nginx-pod1 spec: containers: - name: nginx-pod1 image: gcr.io/google_containers/nginx-slim:0.8 ports: - name: web containerPort: 80 volumeMounts: - name: gluster-vol1 mountPath: /usr/share/nginx/html volumes: - name: gluster-vol1 persistentVolumeClaim: claimName: gluster1 EOF
Aşağıdaki komutla pod oluşturulur;
kubectl create -f nginx-pod.yaml
Aşağıdaki komutla pod adresi öğrenilir;
kubectl get pods -o wide

Nginx içerisine girilerek index.html dosyası oluşturulur;
kubectl exec -ti nginx-pod /bin/sh
cd /usr/share/nginx/html echo 'Hello World from GlusterFS!!!' > index.html exit
Son olarak aşağıdaki komutla Nginx tarafından sunulan sayfaya ulaşılır;
curl [POD_IP]

Gluster kümesi üzerinde verilen Persistent Volume’ü teyit için Pod silinip tekrar oluşturulabilir. Yeni pod ip’si öğrebilerek curl ile yine istek yaptığınızda daha önceden oluşturduğunuz içeriğin geldiğini görebilirsiniz.