Linux

GlusterFS Kurulumu ve Heketi ile Dynamic Provisioning Nasıl Yapılır?

GlusterFS Kurulumu ve Heketi ile Dynamic Provisioning
Share

H/A bir object storage için GlusterFS güzel bir çözüm. Bu yazımda sizelere glusterfs kurulumu ve heketi ile nasıl dynamic provisioning yaptımızdan bahsedeceğim.

Örnek Enviroment aşağıdaki gibidir.

  • GlusterFS1 – 192.168.4.86
  • GlusterFS2 – 192.168.4.87

Bu yapıda Glusterfs1 nodunu aynı zamanda management için kullanacağız. Duruma göre +1 node management için ekleyebilirsiniz.

Öncelikle sunucular birbirinin adını çözebilmesi için hosts dosyasına ekleme yapıyoruz.

sudo cat >> /etc/hosts <<EOF
192.168.4.86 glusterfs1
192.168.4.87 glusterfs2
EOF

Şimdi Centos 7’de glusterfs kuruluma geçelim.


yum install -y centos-release-gluster
yum install -y glusterfs-server
systemctl enable glusterd
systemctl start glusterd

Varolan, sunucularımıza takılı diskleri listeliyoruz.


# fdisk -l

Disk /dev/vda: 17.2 GB, 17179869184 bytes, 33554432 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x0002183f

Aygıt Açılış Başlangıç Bitiş BlokSayısı Kml Sistem
/dev/vda1 * 2048 2099199 1048576 83 Linux
/dev/vda2 2099200 33554431 15727616 8e Linux LVM

Disk /dev/mapper/centos-root: 14.4 GB, 14382268416 bytes, 28090368 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk /dev/mapper/centos-swap: 1719 MB, 1719664640 bytes, 3358720 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

Görüldüğü gibi /dev/vda olarak takılı bir disk gözüküyor. Her iki sunucuya sanallaştırma ortamımızdan yeni disk takıyoruz. Sunucuları reboot ediyoruz.

Sonrasında oluşturulan diskleri yapılandırmak için eklenen diski görüntülüyoruz. Örneğimizde /dev/sda olarak eklendiğini görmekteyiz.

# fdisk -l

Disk /dev/vda: 17.2 GB, 17179869184 bytes, 33554432 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x0002183f

Aygıt Açılış Başlangıç Bitiş BlokSayısı Kml Sistem
/dev/vda1 * 2048 2099199 1048576 83 Linux
/dev/vda2 2099200 33554431 15727616 8e Linux LVM

Disk /dev/sda: 53.7 GB, 53687091200 bytes, 104857600 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x8262346b

Aygıt Açılış Başlangıç Bitiş BlokSayısı Kml Sistem
/dev/sda1 2048 104857599 52427776 8e Linux LVM

Disk /dev/mapper/centos-root: 14.4 GB, 14382268416 bytes, 28090368 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk /dev/mapper/centos-swap: 1719 MB, 1719664640 bytes, 3358720 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

Yeni diski lvm olarak yapılandırıyoruz.

fdisk /dev/sda
> n
> p
> 1
> t
> 8e
> w
> q

Glusterfs kurulumu tamamlandı şimdi management nodu olarak kullanacağımız GlusterFS1 noduna heketi kurulumuna geçiyoruz. Heketi Kubernetes ortamımızdan storage class ile dynamic provisioning yapmamızı sağlayacaktır.


yum install -y heketi heketi-client

Heketi’nin nodelara erişebilmesi için ssh-key oluşturuyoruz ve nodelara gönderiyoruz.


sudo -u heketi ssh-keygen
ssh-copy-id -i /var/lib/heketi/.ssh/id_rsa 192.168.4.86
ssh-copy-id -i /var/lib/heketi/.ssh/id_rsa 192.168.4.87

Heketi configini aşağıdaki gibi düzenliyoruz.


vim /etc/heketi/heketi.json

###
“executor”: “ssh”,
“_sshexec_comment”: “SSH username and private key file information”,
“sshexec”: {
“keyfile”: “/var/lib/heketi/.ssh/id_rsa”,
“user”: “root”,
“port”: “22”,
“fstab”: “/etc/fstab”
},
###

Heketiyi başlatıyoruz.

systemctl enable heketi
systemctl start heketi

Test ediyoruz.

curl http://localhost:8080/hello
Hello from Heketi

Cluster oluşturuyoruz.


export HEKETI_CLI_SERVER=http://localhost:8080
heketi-cli cluster create mycluster

Clusterımıza nodelarımızı ekliyoruz. ClusterID kısımlarına bir önceki komutun çıktısındaki cluster id verisini yazıyoruz.


heketi-cli node add --cluster=ClusterID --zone=1 --management-host-name=glusterfs1 --storage-host-name=HOST_IP
heketi-cli node add --cluster=ClusterID --zone=1 --management-host-name=glusterfs2 --storage-host-name=HOST_IP

GlusterFS nodelarımıza eklediğimiz diskleri clusterımıza tanımlıyoruz.


heketi-cli device add --name=/dev/sda1 --node=NodeID1
heketi-cli device add --name=/dev/sda1 --node=NodeID2

Evet, glusterfs ve heketi kurulumumuz tamamlandı. Şimdi bir volume oluşturalım.


heketi-cli volume create --size 10 --replica 2

GlusterFS clusterımızda yapacağımız işlemler bu kadar. Kubernetes ortamımıza geçip bir storage cluster oluşturuyoruz.


cat > gluster-dyn-sc.yml << EOF
kind: StorageClass
apiVersion: storage.k8s.io/v1beta1
metadata:
name: gluster-heketi
provisioner: kubernetes.io/glusterfs
reclaimPolicy: Delete
volumeBindingMode: Immediate
allowVolumeExpansion: true
parameters:
resturl: "http://192.168.4.86:8080"
restauthenabled: "false"
volumetype: "replicate:2"
volumenameprefix: "k8s-dev"
clusterid: "CLUSTER_ID"
EOF


kubectl apply -f gluster-dyn-sc.yml

Persistent volume claim oluşturup test ediyoruz.


cat > gluster-dyn-pvc.yml <<EOF
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: gluster-dyn-pvc
annotations:
volume.beta.kubernetes.io/storage-class: gluster-dyn
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 10Gi
EOF


kubectl apply -f gluster-dyn-pvc.yml

Persistent volume claimleri listeleyerek STATUS kısmını Bound olarak görüyoruz.


kubectl get pvc
NAME STATUS CAPACITY ACCESS MODES STORAGECLASS AGE
gluster-dyn-pvc Bound 50Gi RWX gluster-dyn 8m