Başlamadan NOT: CSTOR için Worker makinelerinizde unused olan boş tanımlanmayan diskler gereklidir. (İşletim sisteminin dışında)

Kubernetes cluster kurarken tüm nodelara dağıtım yapmadan önce Rancher üzerinden Edit YAML diyoruz.

image 92
services:
  kubelet: 
    extra_binds: 
    - "/etc/iscsi:/etc/iscsi"
    - "/sbin/iscsiadm:/sbin/iscsiadm"
    - "/var/lib/iscsi:/var/lib/iscsi"
    - "/lib/modules"
    - "/var/openebs/local:/var/openebs/local"
    - "/usr/lib64/libcrypto.so.10:/usr/lib/libcrypto.so.10"
    - "/usr/lib64/libopeniscsiusr.so.0.2.0:/usr/lib/libopeniscsiusr.so.0.2.0"

Tekrardan Edit As a Form’a tıklayıp otomatik düzenlemesini sağlıyoruz.

OpenEBS motorunun kendisi bir pod olarak ayağa kaldırılır. OpenEBS kubernetes tarafından kontrol edilir. Çalışan node üzerinde pod fail olursa, Fail olan pod başka node üzerinde yeniden ayağa kaldırılır ve OpenEBS diğer nodelarda bulunan mevcut veri kopyalarını kullanarak verilere yeniden erişim sağlar. Bu veriler anlık olarak senkronize edilerek her node üzerinde aynı verilere ulaşılması hedeflenir.

OpenEBS üzerinde 3 farklı veri motoru vardır. JIVA, CSTOR, MAYASTOR

Aşağıda 3 farklı veri motorunun farklarını görebilirsiniz.

FEATUREJIVACSTORMAYASTOR
Full Backup and Restore using VeleroYesYesYes
Synchronous replicationYesYesYes
Protect against node failures (replace node)YesYesYes
Use with ephemeral storage on nodesYesYesYes
Thin ProvisioningYesYesYes
Disk pool or aggregate supportYesYesPlanned
Disk resiliency (RAID support)YesYesPlanned
On demand capacity expansionNoYesPlanned
SnapshotsNoYesPlanned
ClonesNoYesPlanned
Incremental BackupsNoYesPlanned
Suitable for high capacity (>50GB) workloadsNoYesYes
Near disk performanceNoNoYes

Bu yazıda OpenEBS CSTOR kurulumunu Rancher üzerinde yapacağız.

OpenEBS iSCSI kullanır. Bu nedenle öncelikle tüm Worker’lara kuracağız. Aşağıdaki komutları tüm Worker makinelerinizde uygulayın.

sudo systemctl enable --now iscsid

Kurulu değilse;

sudo apt-get update
sudo apt-get install open-iscsi
sudo systemctl enable --now iscsid

Daha sonra Helm kurulumu için aşağıdaki yazıyı referans alabilirsiniz.

Devamında Rancher makinemize kurduğumuz HELM aracılığı ile OpenEBS’i indirip kuruyoruz. Bundan sonraki komutlar Rancher makinesi üzerinde uygulanacaktır.

helm repo add openebs https://openebs.github.io/charts
helm repo update
helm install openebs --namespace openebs openebs/openebs --set cstor.enabled=true --create-namespace

OpenEBS’i ayağa kaldırıyoruz.

kubectl apply -f https://openebs.github.io/charts/cstor-operator.yaml

Aşağıdaki komutla kontrol sağlayabiliriz.

kubectl get pod -n openebs

Daha sonra aşağıdaki komutla Workerlar üzerine daha öncesinden eklediğimiz bir yere tanımlı olmayan diskleri görelim.

kubectl get bd -n openebs

Örnek çıktı;

NAME                                          NODENAME         SIZE         CLAIMSTATE  STATUS   AGE
blockdevice-01afcdbe3a9c9e3b281c7133b2af1b68  worker-node-3    21474836480   Unclaimed   Active   2m10s
blockdevice-10ad9f484c299597ed1e126d7b857967  worker-node-1    21474836480   Unclaimed   Active   2m17s
blockdevice-3ec130dc1aa932eb4c5af1db4d73ea1b  worker-node-2    21474836480   Unclaimed   Active   2m12s

Name kısmındaki “blockdevice” ile başlayan disk isimlerini aşağıdaki YAML ‘ı esas alarak düzenleyin. YAML içerisindeki hostname kısımlarını kendi worker makinenizin hostnameleri ile değiştirin. Örneğin hostname “test.sezer.in” ise YAML daki hostname kısmına “test” yazmanız gerekiyor. Zaten size yukarıda NODENAME kısmında isimlerinizi veriyor.

apiVersion: cstor.openebs.io/v1
kind: CStorPoolCluster
metadata:
 name: cstor-disk-pool
 namespace: openebs
spec:
 pools:
   - nodeSelector:
       kubernetes.io/hostname: "worker-node-1"
     dataRaidGroups:
       - blockDevices:
           - blockDeviceName: "blockdevice-10ad9f484c299597ed1e126d7b857967"
     poolConfig:
       dataRaidGroupType: "stripe"
 
   - nodeSelector:
       kubernetes.io/hostname: "worker-node-2"
     dataRaidGroups:
       - blockDevices:
           - blockDeviceName: "blockdevice-3ec130dc1aa932eb4c5af1db4d73ea1b"
     poolConfig:
       dataRaidGroupType: "stripe"
 
   - nodeSelector:
       kubernetes.io/hostname: "worker-node-3"
     dataRaidGroups:
       - blockDevices:
           - blockDeviceName: "blockdevice-01afcdbe3a9c9e3b281c7133b2af1b68"
     poolConfig:
       dataRaidGroupType: "stripe"

Aşağıdaki komut ile daha öncesinden “dosyaismi.yaml” içerisine kaydettiğiniz kodları çalıştırın.

kubectl apply -f dosyaismi.yaml

Aşağıdaki komut ile nodelarınızı görebilirsiniz.

kubectl get node --show-labels

Aşağıdaki komut ile pool’u görebilirsiniz.

kubectl get cspc -n openebs

Örnek çıktı;

NAME                   HEALTHYINSTANCES   PROVISIONEDINSTANCES   DESIREDINSTANCES     AGE
cstor-disk-pool        3                  3                      3                    2m2s

Şimdi StorageClass oluşturacağız.

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: cstor-csi-disk
provisioner: cstor.csi.openebs.io
allowVolumeExpansion: true
parameters:
  cas-type: cstor
  cstorPoolCluster: cstor-disk-pool
  replicaCount: "3"

ReplicaCount kısmını worker kadar yazacaksınız. allowVolumeExpansion kısmı da diskin daha sonra genişletilmesine izin verme hususu ile alakalıdır. True olarak bırakıyorsunuz.

Aynı şekilde bir dosya içerisine YAML kodlarını kaydedip ayağa kaldırıyoruz.

kubectl apply -f dosyaismi.yaml

Pooları aşağıdaki komutla görebilirsiniz.

kubectl get sc

Örnek çıktı;

NAME                        PROVISIONER                                                RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
cstor-csi                   cstor.csi.openebs.io                                       Delete          Immediate              true                   4s

Artık uygulama kaldırırken “Spec” kısmında “storageClassName” kısmına “cstor-csi-disk” (pool adımız) yazarak keyfimize bakabiliriz :]

Örnek YAML;

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: cstor-pvc
spec:
  storageClassName: cstor-csi-disk
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi

Rancher kısmına storageClass’a baktığımızda artık bir PersistVolumeClaim isteği geldiğinde sunucu otomatik olarak PV oluşturacaktır.

image 26

Aynı menüde (StrogeClass) default olarak OpenEBS’i tanımlamayı unutmayın. Böylelikle StorageClass belirtilmediğinde otomatik CSTOR üzerinde PersistentVolume açılacaktır

image 98