GlusterFS Kurulumu ve Heketi ile Dynamic Provisioning

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

 

Yorum Yapın