feat(zfspv): mounting the root filesystem to remove the dependency on the Operating system (#204)

* feat(zfspv): mounting the root filesystem to remove the dependency on the OS

We are mounting the individual library to run the zfs
binary inside the ZFS-LocalPV daemonset. The problem with this
is each OS has different sets of libraries. We need to have different
Operator yamls for different OS versions.

Here we are mounting the root directory inside the ZFS-LocalPV daemonset Pod
which does chroot to this path and run the command. As all the libraries will
be available which are present on the host inside the Pod, so we don't need to mount each
library here and also it will work for all the Operating systems.

To be on the safe side, we are mounting the host's root directory
as Readonly filesystem.

Signed-off-by: Pawan <pawan@mayadata.io>

* adding comment for namespace

Signed-off-by: Pawan <pawan@mayadata.io>
This commit is contained in:
Pawan Prakash Sharma 2020-09-07 21:12:31 +05:30 committed by GitHub
parent 109fbced84
commit a5e645b43d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 63 additions and 68 deletions

View file

@ -0,0 +1 @@
mounting the root filesystem to remove the dependency on the Operating system

View file

@ -701,6 +701,24 @@ roleRef:
--- ---
kind: ConfigMap
apiVersion: v1
metadata:
name: openebs-zfspv-bin
namespace: kube-system # should be the same namespace where it is getting mounted
data:
zfs: |
#!/bin/sh
if [ -x /host/sbin/zfs ]; then
chroot /host /sbin/zfs "$@"
elif [ -x /host/usr/sbin/zfs ]; then
chroot /host /usr/sbin/zfs "$@"
else
chroot /host zfs "$@"
fi
---
kind: DaemonSet kind: DaemonSet
apiVersion: apps/v1 apiVersion: apps/v1
metadata: metadata:
@ -777,18 +795,13 @@ spec:
mountPath: /dev mountPath: /dev
- name: encr-keys - name: encr-keys
mountPath: /home/keys mountPath: /home/keys
- name: zfs-bin - name: chroot-zfs
mountPath: /sbin/zfs mountPath: /sbin/zfs
- name: libzpool subPath: zfs
mountPath: /lib/libzpool.so.2 - name: host-root
- name: libzfscore mountPath: /host
mountPath: /lib/libzfs_core.so.1 mountPropagation: "HostToContainer"
- name: libzfs readOnly: true
mountPath: /lib/libzfs.so.2
- name: libuutil
mountPath: /lib/libuutil.so.1
- name: libnvpair
mountPath: /lib/libnvpair.so.1
- name: pods-mount-dir - name: pods-mount-dir
mountPath: /var/lib/kubelet/ mountPath: /var/lib/kubelet/
# needed so that any mounts setup inside this container are # needed so that any mounts setup inside this container are
@ -803,30 +816,14 @@ spec:
hostPath: hostPath:
path: /home/keys path: /home/keys
type: DirectoryOrCreate type: DirectoryOrCreate
- name: zfs-bin - name: chroot-zfs
configMap:
defaultMode: 0555
name: openebs-zfspv-bin
- name: host-root
hostPath: hostPath:
path: /sbin/zfs path: /
type: File type: Directory
- name: libzpool
hostPath:
path: /lib/libzpool.so.2.0.0
type: File
- name: libzfscore
hostPath:
path: /lib/libzfs_core.so.1.0.0
type: File
- name: libzfs
hostPath:
path: /lib/libzfs.so.2.0.0
type: File
- name: libuutil
hostPath:
path: /lib/libuutil.so.1.0.1
type: File
- name: libnvpair
hostPath:
path: /lib/libnvpair.so.1.0.1
type: File
- name: registration-dir - name: registration-dir
hostPath: hostPath:
path: /var/lib/kubelet/plugins_registry/ path: /var/lib/kubelet/plugins_registry/

View file

@ -1531,6 +1531,24 @@ roleRef:
--- ---
kind: ConfigMap
apiVersion: v1
metadata:
name: openebs-zfspv-bin
namespace: kube-system # should be the same namespace where it is getting mounted
data:
zfs: |
#!/bin/sh
if [ -x /host/sbin/zfs ]; then
chroot /host /sbin/zfs "$@"
elif [ -x /host/usr/sbin/zfs ]; then
chroot /host /usr/sbin/zfs "$@"
else
chroot /host zfs "$@"
fi
---
kind: DaemonSet kind: DaemonSet
apiVersion: apps/v1 apiVersion: apps/v1
metadata: metadata:
@ -1607,18 +1625,13 @@ spec:
mountPath: /dev mountPath: /dev
- name: encr-keys - name: encr-keys
mountPath: /home/keys mountPath: /home/keys
- name: zfs-bin - name: chroot-zfs
mountPath: /sbin/zfs mountPath: /sbin/zfs
- name: libzpool subPath: zfs
mountPath: /lib/libzpool.so.2 - name: host-root
- name: libzfscore mountPath: /host
mountPath: /lib/libzfs_core.so.1 mountPropagation: "HostToContainer"
- name: libzfs readOnly: true
mountPath: /lib/libzfs.so.2
- name: libuutil
mountPath: /lib/libuutil.so.1
- name: libnvpair
mountPath: /lib/libnvpair.so.1
- name: pods-mount-dir - name: pods-mount-dir
mountPath: /var/lib/kubelet/ mountPath: /var/lib/kubelet/
# needed so that any mounts setup inside this container are # needed so that any mounts setup inside this container are
@ -1633,30 +1646,14 @@ spec:
hostPath: hostPath:
path: /home/keys path: /home/keys
type: DirectoryOrCreate type: DirectoryOrCreate
- name: zfs-bin - name: chroot-zfs
configMap:
defaultMode: 0555
name: openebs-zfspv-bin
- name: host-root
hostPath: hostPath:
path: /sbin/zfs path: /
type: File type: Directory
- name: libzpool
hostPath:
path: /lib/libzpool.so.2.0.0
type: File
- name: libzfscore
hostPath:
path: /lib/libzfs_core.so.1.0.0
type: File
- name: libzfs
hostPath:
path: /lib/libzfs.so.2.0.0
type: File
- name: libuutil
hostPath:
path: /lib/libuutil.so.1.0.1
type: File
- name: libnvpair
hostPath:
path: /lib/libnvpair.so.1.0.1
type: File
- name: registration-dir - name: registration-dir
hostPath: hostPath:
path: /var/lib/kubelet/plugins_registry/ path: /var/lib/kubelet/plugins_registry/