From e4287ed0f6fbaf834b45de31abf74916a5f1895c Mon Sep 17 00:00:00 2001 From: weizhichen Date: Mon, 1 Apr 2024 07:28:35 +0000 Subject: [PATCH 1/2] fix: support setting kubelet path for blobfuse-proxy endpoint --- charts/latest/blob-csi-driver/templates/csi-blob-node.yaml | 2 ++ pkg/blobfuse-proxy/init.sh | 6 ++++++ pkg/blobfuse-proxy/install-proxy-rhcos.sh | 2 +- pkg/blobfuse-proxy/install-proxy.sh | 2 +- 4 files changed, 10 insertions(+), 2 deletions(-) diff --git a/charts/latest/blob-csi-driver/templates/csi-blob-node.yaml b/charts/latest/blob-csi-driver/templates/csi-blob-node.yaml index 328a911e9..f08ee6c3a 100644 --- a/charts/latest/blob-csi-driver/templates/csi-blob-node.yaml +++ b/charts/latest/blob-csi-driver/templates/csi-blob-node.yaml @@ -97,6 +97,8 @@ spec: value: "{{ .Values.node.blobfuseProxy.maxOpenFileNum }}" - name: DISABLE_UPDATEDB value: "{{ .Values.node.blobfuseProxy.disableUpdateDB }}" + - name: KUBELET_PATH + value: "{{ .Values.linux.kubelet }}" volumeMounts: - name: host-usr mountPath: /host/usr diff --git a/pkg/blobfuse-proxy/init.sh b/pkg/blobfuse-proxy/init.sh index 31fa8d7e5..c0cefe953 100755 --- a/pkg/blobfuse-proxy/init.sh +++ b/pkg/blobfuse-proxy/init.sh @@ -21,6 +21,12 @@ DISABLE_UPDATEDB=${DISABLE_UPDATEDB:-true} SET_MAX_OPEN_FILE_NUM=${SET_MAX_OPEN_FILE_NUM:-true} SET_READ_AHEAD_SIZE=${SET_READ_AHEAD_SIZE:-true} READ_AHEAD_KB=${READ_AHEAD_KB:-15380} +KUBELET_PATH=${KUBELET_PATH:-/var/lib/kubelet} +if [ "$KUBELET_PATH" != "/var/lib/kubelet" ];then + echo "kubelet path is $KUBELET_PATH, update blobfuse-proxy.service...." + sed -i "s#--blobfuse-proxy-endpoint[^ ]*#--blobfuse-proxy-endpoint=unix:/${KUBELET_PATH}/plugins/blob.csi.azure.com/blobfuse-proxy.sock#" /blobfuse-proxy/blobfuse-proxy.service + echo "blobfuse-proxy endpoint is updated to unix:/$KUBELET_PATH/plugins/blob.csi.azure.com/blobfuse-proxy.sock" +fi HOST_CMD="nsenter --mount=/proc/1/ns/mnt" diff --git a/pkg/blobfuse-proxy/install-proxy-rhcos.sh b/pkg/blobfuse-proxy/install-proxy-rhcos.sh index 91f51f8bc..2b445de06 100644 --- a/pkg/blobfuse-proxy/install-proxy-rhcos.sh +++ b/pkg/blobfuse-proxy/install-proxy-rhcos.sh @@ -35,7 +35,7 @@ if [ -f "/host/usr/local/bin/blobfuse-proxy" ];then fi if [ "$updateBlobfuseProxy" = "true" ];then echo "copy blobfuse-proxy...." - rm -rf /host/var/lib/kubelet/plugins/blob.csi.azure.com/blobfuse-proxy.sock + rm -rf /host/"$KUBELET_PATH"/plugins/blob.csi.azure.com/blobfuse-proxy.sock rm -rf /host/usr/local/bin/blobfuse-proxy cp /blobfuse-proxy/blobfuse-proxy /host/usr/local/bin/blobfuse-proxy chmod 755 /host/usr/local/bin/blobfuse-proxy diff --git a/pkg/blobfuse-proxy/install-proxy.sh b/pkg/blobfuse-proxy/install-proxy.sh index a642bb3aa..422109179 100644 --- a/pkg/blobfuse-proxy/install-proxy.sh +++ b/pkg/blobfuse-proxy/install-proxy.sh @@ -89,7 +89,7 @@ if [ -f "/host/usr/bin/blobfuse-proxy" ];then fi if [ "$updateBlobfuseProxy" = "true" ];then echo "copy blobfuse-proxy...." - rm -rf /host/var/lib/kubelet/plugins/blob.csi.azure.com/blobfuse-proxy.sock + rm -rf /host/"$KUBELET_PATH"/plugins/blob.csi.azure.com/blobfuse-proxy.sock rm -rf /host/usr/bin/blobfuse-proxy cp /blobfuse-proxy/blobfuse-proxy /host/usr/bin/blobfuse-proxy chmod 755 /host/usr/bin/blobfuse-proxy From 5f1b421b83b7cd3ed68304d958956f2eeb939cba Mon Sep 17 00:00:00 2001 From: weizhichen Date: Mon, 1 Apr 2024 07:39:47 +0000 Subject: [PATCH 2/2] fix --- charts/latest/blob-csi-driver-v0.0.0.tgz | Bin 5967 -> 5981 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/charts/latest/blob-csi-driver-v0.0.0.tgz b/charts/latest/blob-csi-driver-v0.0.0.tgz index 46130d98b0e1f304fd7d1b7ed972c46bdb5e2ed2..f76109367e956916a38dc69921b82be5e6e70f55 100644 GIT binary patch delta 5660 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 C22PFu delta 5669 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 L9Pgok0H^=}Y%Cn<