feat(attach): avoid creation of volumeattachment object

k8s is very slow in attaching the volumes when dealing with the
large number of volume attachment object.

(k8s issue https://github.com/kubernetes/kubernetes/issues/84169)

The volumeattachment is not required for ZFSPV, so avoid creation
of attachment object, also removed the csi-attacher container as
this is also not needed as it acts on volumeattachment object.

k8s is very slow in attaching the volumes when dealing with the
large number of volume attachment object :

k8s issue https://github.com/kubernetes/kubernetes/issues/84169).

Volumeattachment is a CR created just to tell the watcher of it
which is csi-attacher, that it has to call the Controller Publish/Unpublish grpc.
Which does all the tasks to attach the volumes to a node for example call to the
DigitalOcean Block Storage API service to attach a created volume to a specified node.
Since for ZFSPV, volume is already present locally, nothing needs to done in Controller
Publish/Unpublish, so it is good to remove them.

so avoiding creation of attachment object in this change, also removed the csi-attacher
container as this is also not needed as it acts on volumeattachment object.

Removed csi-cluster-driver-registrar container also as it is deprecated and not needed anymore.

We are using csidriver beta CRDs so minimum k8s version required is 1.14+.

Signed-off-by: Pawan <pawan@mayadata.io>
This commit is contained in:
Pawan 2020-04-17 13:59:28 +05:30 committed by Kiran Mova
parent 95230b5434
commit 6c410553d2
5 changed files with 121 additions and 219 deletions

View file

@ -1,28 +1,45 @@
#!/bin/bash
# do not provision/deprovision anything while running the upgrade script.
set -e
# ZFSVolumes: create the new CR with apiVersion as zfs.openebs.io and kind as Volume
if [ -z $1 ]; then
# default namespace is openebs when all the custom resources are created
ZFSPV_NAMESPACE="openebs"
else
ZFSPV_NAMESPACE=$1
fi
kubectl get zfsvolumes.openebs.io -n openebs -oyaml > volumes.yaml
echo "Fetching ZFS Volumes"
numVol=`kubectl get zfsvolumes.openebs.io --no-headers -n $ZFSPV_NAMESPACE | wc -l`
if [ $numVol -gt 0 ]; then
# ZFSVolumes: create the new CR with apiVersion as zfs.openebs.io and kind as Volume
kubectl get zfsvolumes.openebs.io -n $ZFSPV_NAMESPACE -oyaml > volumes.yaml
# update the group name to zfs.openebs.io
sed -i "s/apiVersion: openebs.io/apiVersion: zfs.openebs.io/g" volumes.yaml
# create the new CR
kubectl apply -f volumes.yaml
rm volumes.yaml
fi
echo "Fetching ZFS Snapshots"
numSnap=`kubectl get zfssnapshots.openebs.io --no-headers -n $ZFSPV_NAMESPACE | wc -l`
if [ $numSnap -gt 0 ]; then
# ZFSSnapshots: create the new CR with apiVersion as zfs.openebs.io and kind as Snapshot
kubectl get zfssnapshots.openebs.io -n $ZFSPV_NAMESPACE -oyaml > snapshots.yaml
# update the group name to zfs.openebs.io
sed -i "s/apiVersion: openebs.io/apiVersion: zfs.openebs.io/g" volumes.yaml
# create the new CR
kubectl apply -f volumes.yaml
# update the group name to zfs.openebs.io
sed -i "s/apiVersion: openebs.io/apiVersion: zfs.openebs.io/g" snapshots.yaml
# create the new CR
kubectl apply -f snapshots.yaml
rm volumes.yaml
# ZFSSnapshots: create the new CR with apiVersion as zfs.openebs.io and kind as Snapshot
kubectl get zfssnapshots.openebs.io -n openebs -oyaml > snapshots.yaml
# update the group name to zfs.openebs.io
sed -i "s/apiVersion: openebs.io/apiVersion: zfs.openebs.io/g" snapshots.yaml
# create the new CR
kubectl apply -f snapshots.yaml
rm snapshots.yaml
rm snapshots.yaml
fi