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.
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.
FEATURE | JIVA | CSTOR | MAYASTOR |
---|---|---|---|
Full Backup and Restore using Velero | Yes | Yes | Yes |
Synchronous replication | Yes | Yes | Yes |
Protect against node failures (replace node) | Yes | Yes | Yes |
Use with ephemeral storage on nodes | Yes | Yes | Yes |
Thin Provisioning | Yes | Yes | Yes |
Disk pool or aggregate support | Yes | Yes | Planned |
Disk resiliency (RAID support) | Yes | Yes | Planned |
On demand capacity expansion | No | Yes | Planned |
Snapshots | No | Yes | Planned |
Clones | No | Yes | Planned |
Incremental Backups | No | Yes | Planned |
Suitable for high capacity (>50GB) workloads | No | Yes | Yes |
Near disk performance | No | No | Yes |
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.
Aynı menüde (StrogeClass) default olarak OpenEBS’i tanımlamayı unutmayın. Böylelikle StorageClass belirtilmediğinde otomatik CSTOR üzerinde PersistentVolume açılacaktır