GlusterFS Kurulumu ve Heketi ile Dynamic Provisioning
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
Hola! Ben Ali. Hepsiburada’da DevOps Engineer olarak çalışmaktayım. Microservis mimarisine özgü altyapı tasarlamayı, kurmayı ve operasyonel süreçlerini yönetmeyi seviyorum. Ayrıca şu sıralar GO Lang öğrenmek için de emeklemekteyim.
Yorum Yapın