Drucken
Zugriffe: 499

Achtung: Heketi funktioniert am Raspberry nicht. Dieser Beitrag beschreibt nur einen Versuch.

Inspiration:


https://github.com/heketi/heketi
https://medium.com/searce/glusterfs-dynamic-provisioning-using-heketi-as-external-storage-with-gke-bd9af17434e5
https://ralph.blog.imixs.com/2020/03/03/kubernetes-and-glusterfs/
https://faun.pub/configuring-ha-kubernetes-cluster-on-bare-metal-servers-with-glusterfs-metallb-2-3-c9e0b705aa3d
https://ownyourbits.com/2019/08/21/make-your-nextcloudpi-highly-available/

Wir installieren Heketi integriert in k8s. Das Management von gluster erfolgt direkt durch k8s-pods. 


#!/bin/bash
############################################################################################
#    $Date: 2021-05-22 12:20:47 +0200 (Sa, 22. Mai 2021) $
#    $Revision: 412 $
#    $Author: alfred $
#    $HeadURL: https://monitoring.slainte.at/svn/slainte/trunk/k8s/microk8s/microk8s_Installation_teil4_glusterfs_heketi.sh $
#    $Id: microk8s_Installation_teil4_glusterfs_heketi.sh 412 2021-05-22 10:20:47Z alfred $
#
# Schnell-Installation microk8s - heketi als Management-Layer
#
############################################################################################
#shopt -o -s errexit    #—Terminates  the shell script  if a command returns an error code.
shopt -o -s xtrace #—Displays each command before it’s executed.
shopt -o -s nounset #-No Variables without definition
# Voraussetzung: Sauber installierte Nodes, Verbundener Cluster
#
ansible pc -m shell -a 'sudo apt-get update'
ansible pc -m shell -a 'sudo apt-get -y upgrade'
ansible pc -m shell -a 'sudo apt-get install software-properties-common'
#ansible pc -m shell -a 'sudo add-apt-repository -y ppa:gluster/glusterfs-7'
#ansible pc -m shell -a 'sudo rm /etc/apt/sources.list.d/gluster-ubuntu-glusterfs-7-focal.list'
#ansible pc -m shell -a 'sudo apt install -y glusterfs-fuse'
#
ansible pc -m shell -a 'sudo modprobe fuse'
ansible pc -m shell -a 'sudo modprobe dm_thin_pool'
ansible pc -m shell -a 'sudo modprobe dm_snapshot'
ansible pc -m shell -a 'sudo modprobe dm_mirror'
#
ansible pc -m shell -a 'sudo apt-get install -y glusterfs-client'
#ansible pc -m shell -a 'sudo apt-get install -y glusterfs-fuse' # nur redhat
ansible pc -m shell -a 'sudo apt-get install -y xfsprogs glusterfs-server'
ansible pc -m shell -a 'sudo systemctl start glusterd'
ansible pc -m shell -a 'sudo systemctl enable glusterd'
ansible pc -m shell -a 'sudo systemctl status glusterd'
#
ansible pc1 -m shell -a 'sudo gluster peer probe pc2'
ansible pc1 -m shell -a 'sudo gluster peer probe pc3'
ansible pc1 -m shell -a 'sudo gluster peer probe pc4'
ansible pc1 -m shell -a 'sudo gluster peer probe pc5'
ansible pc1 -m shell -a 'sudo gluster peer status'
#
# Startup-file für Modprobe
#
ansible pc -m shell -a 'cat <<EOF > ./loop_gluster.service
#
# Servicedefinition für heketi
#    $Date: 2021-05-22 12:20:47 +0200 (Sa, 22. Mai 2021) $
#    $Revision: 412 $
#    $Author: alfred $
#    $HeadURL: https://monitoring.slainte.at/svn/slainte/trunk/k8s/microk8s/microk8s_Installation_teil4_glusterfs_heketi.sh $
#    $Id: microk8s_Installation_teil4_glusterfs_heketi.sh 412 2021-05-22 10:20:47Z alfred $
#worker1-3# vi /etc/systemd/system/loop_gluster.service
#
[Unit]
Description=modprobe for GlusterFS, For heketi /dev/sda1 is used
DefaultDependencies=false
Before=local-fs.target
After=systemd-udev-settle.service
Requires=systemd-udev-settle.service

[Service]
Type=oneshot
ExecStart=/bin/bash -c "modprobe dm_thin_pool && modprobe dm_snapshot && modprobe dm_mirror && modprobe fuse "

[Install]
WantedBy=local-fs.target
EOF
'
ansible pc -m shell -a 'ls -lisa ./loop_gluster.service'
ansible pc -m shell -a 'sudo mv -f ./loop_gluster.service /etc/systemd/system/loop_gluster.service'
ansible pc -m shell -a 'sudo chown root:root /etc/systemd/system/loop_gluster.service'
ansible pc -m shell -a 'sudo chmod 755 /etc/systemd/system/loop_gluster.service'
ansible pc -m shell -a 'ls -lisa /etc/systemd/system/loop_gluster.service'
ansible pc -m shell -a 'sudo systemctl enable /etc/systemd/system/loop_gluster.service'
#
ansible pc -m shell -a 'sudo wipefs -a /dev/sda'
ansible pc -m shell -a '(
echo g # Create a new empty DOS partition table
echo n # Add a new partition
echo   # Just press enter accept the default
echo   # Just press enter accept the default
echo   # Just press enter accept the default
echo w # Write changes
) | sudo fdisk -w auto /dev/sda'
ansible pc -m shell -a 'sudo glusterfs --version' # Prüfen der Version

#
# Nun kommt der Manuelle Teil
#
ansible pc1 -m shell -a 'rm -R -f ./heketi'
ansible pc1 -m shell -a 'git clone https://github.com/heketi/heketi'
ansible pc1 -m shell -a 'microk8s kubectl delete -f ./heketi/extras/kubernetes/glusterfs-daemonset.json '
ansible pc1 -m shell -a 'microk8s kubectl apply -f ./heketi/extras/kubernetes/glusterfs-daemonset.json '
# Labeln der Nodes mit vorhandenem glusterfs
ansible pc1 -m shell -a 'microk8s kubectl label node pc1 storagenode=glusterfs'
ansible pc1 -m shell -a 'microk8s kubectl label node pc2 storagenode=glusterfs'
ansible pc1 -m shell -a 'microk8s kubectl label node pc3 storagenode=glusterfs'
ansible pc1 -m shell -a 'microk8s kubectl label node pc4 storagenode=glusterfs'
ansible pc1 -m shell -a 'microk8s kubectl label node pc5 storagenode=glusterfs'
ansible pc1 -m shell -a 'microk8s kubectl get pod'

Und ab jetzt wird es problematisch. Das Image im Daemonset verlangt
                        "image": "gluster/gluster-centos:latest",

Dieses Image läuft aber am Raspberry nicht. Das führt dann zur Dauerschleife

4m40s       Normal    Created                   pod/glusterfs-sk6qh   Created container glusterfs
4m40s       Normal    Started                   pod/glusterfs-sk6qh   Started container glusterfs
40s         Warning   BackOff                   pod/glusterfs-wcb29   Back-off restarting failed container
38s         Warning   BackOff                   pod/glusterfs-xw7fj   Back-off restarting failed container
35s         Warning   BackOff                   pod/glusterfs-btt4l   Back-off restarting failed container
34s         Warning   BackOff                   pod/glusterfs-sk6qh   Back-off restarting failed container
33s         Warning   BackOff                   pod/glusterfs-hgnx7   Back-off restarting failed container


Heketi selbst hat auch nur verminderte Aktivität im Projekt. Es ist mir nicht gelungen ein Image für den Raspberry zu finden. Schade.