GlusterFS Kurulumu ve Heketi ile Dynamic Provisioning Nasıl Yapılır?
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