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


Inspiration:
https://github.com/kadalu/kadalu


Kadalu ist eine „neues“ Projekt, das endlich auch mal gute Dokumentation hat. Im Git-clone /kadalu/doc findet sich viel Dokumentation im adoc-Format.

sudo apt-get install -y asciidoctor-pdf
sudo apt-get install -y ruby-asciidoctor-pdf
asciidoctor-pdf *.adoc

Mit diesen Statements kann die Dokumentation in pdf umgewandelt werden. Das File „quick-start-yaml.pdf“ ist aus meiner Sicht das interessanteste. Für den Operator muß man https://raw.githubusercontent.com/kadalu/kadalu/arm/manifests/kadalu-operator-microk8s.yaml nehmen (wir sind ein Raspberry).

In kadalu/extras/scripts gibt es kadalu-sample-setup.sh und ein paar python scripten. In allen muß „kubectl“ durch „microk8s.kubectl“ ersetzt werden.

find -type f -exec sed -i 's/kubectl/microk8s.kubectl/g' {} \;

In Kadalu-sample-setup.sh muß auch noch der richtige Operator eingesetzt werden.

    sudo microk8s.kubectl apply -f https://raw.githubusercontent.com/kadalu/kadalu/arm/manifests/kadalu-operator.yaml

    sed -ie „s|/dev/vdc|${DEVICE_FILE_PATH}|g“ /tmp/kadalu-storage1.yaml
muß auf
    sudo sed -i „s|/dev/vdc|${DEVICE_FILE_PATH}|g“ /tmp/kadalu-storage1.yaml

geändert werden. Generell gehört dieses Skript überarbeitet. Aber für einen Test mit einem Device ist das ganz gut.

Auch kubectl-kadalu* muß neu kompiliert werden. In utils.py muß
    KUBECTL_CMD = "microk8s.kubectl"
richtig sein.


Glück auf!

alfred@pc1:~/kadalu/extras/scripts$ ./kadalu-sample-setup.sh
usage: ./kadalu-sample-setup.sh [--option=argument] or ./kadalu-sample-setup.sh [-o argument]
  -h | --help   help            display help
  -s | --storage-pool-name      specify storage-pool-name
  -n | --hostname               specify the device/host-name
  -d | --device-file-path       specify the device file path [Mandatory]
  -p | --pvc-filename           specify the name for pvc.yaml
  -P | --pvc-name               specify the PVC name
  -v | --storage-value          specify the storage value in Ngi or NNNMi [Mandatory]
  -o | --pod-filename           specify the name for app.yaml
  -O | --pod-name               specify the pod name
  Mandatory arguments for all options.
  Arguments for long options should be preceeded with '=' not space. Ex: --device=minikube
  --storage-value and --device-file-path are mandatory options rest are optional.
alfred@pc1:~/kadalu/extras/scripts$ ./kadalu-sample-setup.sh -s sp1 -n pc1 -d /dev/sda1 -p pvc-sp1.yaml -P pvc-sp1 -v 1Gi -o pod-sp1.yaml -O pod-sp1
namespace/kadalu unchanged
serviceaccount/kadalu-operator unchanged
serviceaccount/kadalu-csi-nodeplugin unchanged
serviceaccount/kadalu-csi-provisioner unchanged
serviceaccount/kadalu-server-sa unchanged
customresourcedefinition.apiextensions.k8s.io/kadalustorages.kadalu-operator.storage unchanged
clusterrole.rbac.authorization.k8s.io/pod-exec unchanged
clusterrole.rbac.authorization.k8s.io/kadalu-operator unchanged
clusterrolebinding.rbac.authorization.k8s.io/kadalu-operator unchanged
deployment.apps/operator unchanged
Hostname is pc1
kadalustorage.kadalu-operator.storage/test unchanged
persistentvolumeclaim/pvc-test unchanged
pod/pod-test configured

Prinzipiell ist alles gut. Mit den genannten Adaptionen funktioniert auch kubectl kadalu. Das Problem ist aber in den Pods:)


----- (Kadalu Namespace) pod/server-storage-pool-1-0-0 -----
[2021-05-23 13:56:02,110] INFO [kadalulib - 334:start_all] - Started Process     name=glusterfsd
[2021-05-23 13:56:02.117461 +0000] I [MSGID: 100030] [glusterfsd.c:2697:main] 0-/opt/sbin/glusterfsd: Started running version [{arg=/opt/sbin/glusterfsd}, {version=2021.03.14}, {cmdlinestr=/opt/sbin/glusterfsd -N --volfile-id storage-pool-1.pc1.bricks-storage-pool-1-data-brick -p /var/run/gluster/glusterfsd-bricks-storage-pool-1-data-brick.pid -S /var/run/gluster/brick.socket --brick-name /bricks/storage-pool-1/data/brick -l - --xlator-option *-posix.glusterd-uuid=969caec4-bbce-11eb-8bd6-060ea87f2b24 --process-name brick --brick-port 24007 --xlator-option storage-pool-1-server.listen-port=24007 -f /kadalu/volfiles/storage-pool-1.pc1.bricks-storage-pool-1-data-brick.vol}]
[2021-05-23 13:56:02.118426 +0000] I [glusterfsd.c:2433:daemonize] 0-glusterfs: Pid of current running process is 10
pending frames:
patchset: git://git.gluster.org/glusterfs.git
signal received: 11
time of crash:
2021-05-23 13:56:02 +0000
configuration details:
argp 1
backtrace 1
dlfcn 1
libpthread 1
llistxattr 1
setfsid 1
epoll.h 1
xattr.h 1
st_atim.tv_nsec 1
package-string: glusterfs 2021.03.14
/opt/lib/libglusterfs.so.0(+0x27ee8)[0xffff8b34eee8]
/opt/lib/libglusterfs.so.0(gf_print_trace+0x2ac)[0xffff8b359d4c]
linux-vdso.so.1(__kernel_rt_sigreturn+0x0)[0xffff8b4a95b8]
/lib/aarch64-linux-gnu/libpthread.so.0(pthread_mutex_lock+0x4)[0xffff8b27cac4]
/opt/lib/libglusterfs.so.0(mem_pool_new_fn+0xbc)[0xffff8b37743c]
/opt/lib/libgfrpc.so.0(rpcsvc_init+0x100)[0xffff8b2e3170]
/opt/sbin/glusterfsd(glusterfs_listener_init+0x90)[0xaaaacb18e3b8]
/opt/sbin/glusterfsd(glusterfs_volumes_init+0x20)[0xaaaacb1886f0]
/opt/sbin/glusterfsd(main+0x7b0)[0xaaaacb183740]
/lib/aarch64-linux-gnu/libc.so.6(__libc_start_main+0xe8)[0xffff8b123090]
/opt/sbin/glusterfsd(+0x7b98)[0xaaaacb183b98]

Ich vermute, das in den pods verwendete glusterfs kann nicht mit arm64 aka raspberry. Statt dem internen glusterfs wäre es einfacher, das am Node bereits installierte glusterfs zu verwenden. Oder die ganz app am Raspberry neu zu builden (git clone usw.). Wenn ich mal viel Zeit habe.


Schade:)