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

base64

Bu bilgiler kullanılarak Kubernetes’te ileriki adımlarda kullanacağımız secret’ler için aşağıdaki içerikle heketi-secret.yaml adında bir dosya oluşturulur;

---
apiVersion: v1
type: kubernetes.io/glusterfs
kind: Secret
metadata:
  name: heketi-secret
  namespace: default
data:
  user: YWRtaW4=
  key: TjNmNUJTTmlnbkxNS1pkS05vWjZtVmU0Wg==

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 içerik yardımıyla Storage class tanımının yer aldığı cluster-shared-storage.yaml dosyası oluşturulur;

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"

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

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 içerik yardımıyla gluster-pvc.yaml adıyla Persistent Volume Claim tanım dosyası oluşturulur;

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
   name: gluster1
   annotations:
      volume.beta.kubernetes.io/storage-class: cluster.shared.storage
spec:
   accessModes:
     - ReadWriteOnce
   resources:
     requests:
       storage: 5Gi

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

get-pvc

Test Pod tanım dosyası nginx-pod.yaml adıyla ve aşağıdaki içerikle oluşturulur;

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

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

get-pods-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]

kubectl-exec

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.

Fatih Boy

Ankara'da yaşayan Fatih, kendi şirketinde özellikle bankacılık, sigortacılık ve otomotiv sektörlerinde IT danışmanlıkları vermektedir. Devops, ALM süreçleri, kurumsal veri yolu sistemleri, kurumsal altyapı ve yazılım geliştirme konularında destek vermektedir. Boş zamanlarında açık kaynak kodlu projeler geliştirmeyi ve bilgisini yazdığı makalelerle paylaşmayı seven Fatih, aynı zamanda Visual C# ve Visual Studio teknolojileri konusundan Microsoft tarafından altı yıl üst üste MVP (En Değerli Profesyonel) ödülüne layık görülmüştür. İş hayatı boyunca masaüstü uygulamaları, web teknolojileri, akıllı istemciler gibi konularda Asp.Net, Php, C#, Java programlama dilleri ve MySql, MsSql ve Oracle gibi veritabanı yönetim yazılımları ile çalışmıştır. İngilizce ve Türkçe olarak yayınlanan makalelerini gerek İngilizce bloğunda, gerekse de Türkçe bloğunda bulabileceğiniz gibi web sitesinden de açık kaynak kodlu geliştirdiği yazılımlarına ulaşabilirsiniz. vCard - Twitter - Facebook

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

This site uses Akismet to reduce spam. Learn how your comment data is processed.