diff --git a/deploy/longhorn.yaml b/deploy/longhorn.yaml index d2b12ae..58f6ce7 100644 --- a/deploy/longhorn.yaml +++ b/deploy/longhorn.yaml @@ -178,7 +178,7 @@ spec: spec: containers: - name: longhorn-manager - image: rancher/longhorn-manager:v0.3-rc4 + image: rancher/longhorn-manager:2c17d9e imagePullPolicy: Always securityContext: privileged: true @@ -189,7 +189,7 @@ spec: - --engine-image - rancher/longhorn-engine:v0.3-rc4 - --manager-image - - rancher/longhorn-manager:v0.3-rc4 + - rancher/longhorn-manager:2c17d9e - --service-account - longhorn-service-account ports: @@ -266,7 +266,7 @@ spec: spec: containers: - name: longhorn-ui - image: rancher/longhorn-ui:v0.3-rc4 + image: rancher/longhorn-ui:72303d9 ports: - containerPort: 8000 env: @@ -305,18 +305,18 @@ spec: spec: initContainers: - name: wait-longhorn-manager - image: rancher/longhorn-manager:v0.3-rc4 + image: rancher/longhorn-manager:2c17d9e command: ['sh', '-c', 'while [ $(curl -m 1 -s -o /dev/null -w "%{http_code}" http://longhorn-backend:9500/v1) != "200" ]; do echo waiting; sleep 2; done'] containers: - name: longhorn-driver-deployer - image: rancher/longhorn-manager:v0.3-rc4 + image: rancher/longhorn-manager:2c17d9e imagePullPolicy: Always command: - longhorn-manager - -d - deploy-driver - --manager-image - - rancher/longhorn-manager:v0.3-rc4 + - rancher/longhorn-manager:2c17d9e - --manager-url - http://longhorn-backend:9500/v1 # manually choose "flexvolume" or "csi" diff --git a/scripts/environment_check.sh b/scripts/environment_check.sh new file mode 100755 index 0000000..6ba4934 --- /dev/null +++ b/scripts/environment_check.sh @@ -0,0 +1,107 @@ +#!/bin/bash + +dependencies() { + local targets=($@) + local allFound=true + for ((i=0; i<${#targets[@]}; i++)); do + local target=${targets[$i]} + if [ "$(which $target)" == "" ]; then + allFound=false + echo Not found: $target + fi + done + if [ "$allFound" == "false" ]; then + echo "Please install missing dependencies." + exit 2 + fi +} + +create_ds() { +cat < $TEMP_DIR/environment_check.yaml +apiVersion: apps/v1 +kind: DaemonSet +metadata: + labels: + app: longhorn-environment-check + name: longhorn-environment-check +spec: + selector: + matchLabels: + app: longhorn-environment-check + template: + metadata: + labels: + app: longhorn-environment-check + spec: + containers: + - name: longhorn-environment-check + image: busybox + args: ["/bin/sh", "-c", "sleep 1000000000"] + volumeMounts: + - name: mountpoint + mountPath: /mnt/tmp + mountPropagation: Bidirectional + securityContext: + privileged: true + volumes: + - name: mountpoint + hostPath: + path: /mnt/tmp +EOF + kubectl create -f $TEMP_DIR/environment_check.yaml +} + +cleanup() { + kubectl delete -f $TEMP_DIR/environment_check.yaml + rm -rf $TEMP_DIR +} + +wait_ds_ready() { + while true; do + local ds=$(kubectl get ds/longhorn-environment-check -o json) + local numberReady=$(echo $ds | jq .status.numberReady) + local desiredNumberScheduled=$(echo $ds | jq .status.desiredNumberScheduled) + + if [ "$desiredNumberScheduled" == "$numberReady" ] && [ "$desiredNumberScheduled" != "0" ]; then + echo "all pods ready ($numberReady/$desiredNumberScheduled)" + return + fi + + echo "waiting for pods to become ready ($numberReady/$desiredNumberScheduled)" + sleep 3 + done +} + +validate_pods() { + local allSupported=true + local pods=$(kubectl -l app=longhorn-environment-check get po -o json) + + for ((i=0; i<1; i++)); do + local pod=$(echo $pods | jq .items[$i]) + local nodeName=$(echo $pod | jq -r .spec.nodeName) + local mountPropagation=$(echo $pod | jq -r '.spec.containers[0].volumeMounts[] | select(.name=="mountpoint") | .mountPropagation') + + if [ "$mountPropagation" != "Bidirectional" ]; then + allSupported=false + echo "node $nodeName: MountPropagation DISABLED" + fi + done + + if [ "$allSupported" != "true" ]; then + echo + echo " MountPropagation is disabled on at least one node." + echo " As a result, CSI Driver and Base Image aren't supported." + echo + exit 1 + else + echo -e "\n MountPropagation is enabled!\n" + fi +} + +dependencies kubectl jq mktemp +TEMP_DIR=$(mktemp -d) +trap cleanup EXIT +create_ds +wait_ds_ready +validate_pods +exit 0