From 8fa4c2217d468106ca58fde4f547bbad04ac1538 Mon Sep 17 00:00:00 2001 From: andyzhangx Date: Thu, 15 Jun 2023 13:33:27 +0000 Subject: [PATCH] doc: cut v1.21.4 release --- Makefile | 2 +- README.md | 2 +- charts/index.yaml | 81 ++--- charts/latest/blob-csi-driver-v1.21.3.tgz | Bin 5517 -> 0 bytes charts/latest/blob-csi-driver-v1.21.4.tgz | Bin 0 -> 5517 bytes charts/latest/blob-csi-driver/Chart.yaml | 4 +- charts/latest/blob-csi-driver/values.yaml | 2 +- charts/v1.21.4/blob-csi-driver-v1.21.4.tgz | Bin 0 -> 5517 bytes charts/v1.21.4/blob-csi-driver/Chart.yaml | 5 + .../blob-csi-driver/templates/NOTES.txt | 5 + .../blob-csi-driver/templates/_helpers.tpl | 49 +++ .../templates/csi-blob-controller.yaml | 212 +++++++++++++ .../templates/csi-blob-driver.yaml | 16 + .../templates/csi-blob-node.yaml | 282 ++++++++++++++++++ .../templates/rbac-csi-blob-controller.yaml | 115 +++++++ .../templates/rbac-csi-blob-node.yaml | 29 ++ .../serviceaccount-csi-blob-controller.yaml | 9 + .../serviceaccount-csi-blob-node.yaml | 9 + charts/v1.21.4/blob-csi-driver/values.yaml | 167 +++++++++++ deploy/blobfuse-proxy/README.md | 6 +- deploy/csi-blob-controller.yaml | 2 +- deploy/csi-blob-node.yaml | 4 +- deploy/v1.21.4/csi-blob-controller.yaml | 143 +++++++++ deploy/v1.21.4/csi-blob-driver.yaml | 11 + deploy/v1.21.4/csi-blob-node.yaml | 203 +++++++++++++ deploy/v1.21.4/kustomization.yaml | 10 + deploy/v1.21.4/rbac-csi-blob-controller.yaml | 108 +++++++ deploy/v1.21.4/rbac-csi-blob-node.yaml | 30 ++ docs/install-blob-csi-driver.md | 2 +- docs/install-csi-driver-v1.21.4.md | 47 +++ 30 files changed, 1507 insertions(+), 48 deletions(-) delete mode 100644 charts/latest/blob-csi-driver-v1.21.3.tgz create mode 100644 charts/latest/blob-csi-driver-v1.21.4.tgz create mode 100644 charts/v1.21.4/blob-csi-driver-v1.21.4.tgz create mode 100644 charts/v1.21.4/blob-csi-driver/Chart.yaml create mode 100644 charts/v1.21.4/blob-csi-driver/templates/NOTES.txt create mode 100644 charts/v1.21.4/blob-csi-driver/templates/_helpers.tpl create mode 100644 charts/v1.21.4/blob-csi-driver/templates/csi-blob-controller.yaml create mode 100644 charts/v1.21.4/blob-csi-driver/templates/csi-blob-driver.yaml create mode 100644 charts/v1.21.4/blob-csi-driver/templates/csi-blob-node.yaml create mode 100644 charts/v1.21.4/blob-csi-driver/templates/rbac-csi-blob-controller.yaml create mode 100644 charts/v1.21.4/blob-csi-driver/templates/rbac-csi-blob-node.yaml create mode 100644 charts/v1.21.4/blob-csi-driver/templates/serviceaccount-csi-blob-controller.yaml create mode 100644 charts/v1.21.4/blob-csi-driver/templates/serviceaccount-csi-blob-node.yaml create mode 100644 charts/v1.21.4/blob-csi-driver/values.yaml create mode 100644 deploy/v1.21.4/csi-blob-controller.yaml create mode 100644 deploy/v1.21.4/csi-blob-driver.yaml create mode 100644 deploy/v1.21.4/csi-blob-node.yaml create mode 100644 deploy/v1.21.4/kustomization.yaml create mode 100644 deploy/v1.21.4/rbac-csi-blob-controller.yaml create mode 100644 deploy/v1.21.4/rbac-csi-blob-node.yaml create mode 100644 docs/install-csi-driver-v1.21.4.md diff --git a/Makefile b/Makefile index 235804b74..9a7fe2574 100644 --- a/Makefile +++ b/Makefile @@ -17,7 +17,7 @@ GIT_COMMIT ?= $(shell git rev-parse HEAD) REGISTRY ?= andyzhangx REGISTRY_NAME ?= $(shell echo $(REGISTRY) | sed "s/.azurecr.io//g") IMAGE_NAME ?= blob-csi -IMAGE_VERSION ?= v1.21.3 +IMAGE_VERSION ?= v1.21.4 CLOUD ?= AzurePublicCloud # Use a custom version for E2E tests if we are in Prow ifdef CI diff --git a/README.md b/README.md index 6b9d305f9..ef5f800f3 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ Disclaimer: Deploying this driver manually is not an officially supported Micros |driver version |Image | supported k8s version | built-in blobfuse v1 version | built-in blobfuse v2 version| |----------------|------------------------------------------------------|-----------------------|------------------------------| ----------------------------| |master branch |mcr.microsoft.com/k8s/csi/blob-csi:latest | 1.21+ | 1.4.5 | 2.0.3 | -|v1.21.3 |mcr.microsoft.com/oss/kubernetes-csi/blob-csi:v1.21.3 | 1.21+ | 1.4.5 | 2.0.3 | +|v1.21.4 |mcr.microsoft.com/oss/kubernetes-csi/blob-csi:v1.21.4 | 1.21+ | 1.4.5 | 2.0.3 | |v1.20.2 |mcr.microsoft.com/oss/kubernetes-csi/blob-csi:v1.20.2 | 1.21+ | 1.4.5 | 2.0.2 | |v1.19.3 |mcr.microsoft.com/oss/kubernetes-csi/blob-csi:v1.19.3 | 1.21+ | 1.4.5 | 2.0.2 | diff --git a/charts/index.yaml b/charts/index.yaml index c25e19fdb..31b036d3b 100644 --- a/charts/index.yaml +++ b/charts/index.yaml @@ -2,26 +2,35 @@ apiVersion: v1 entries: blob-csi-driver: - apiVersion: v1 - appVersion: v1.21.3 - created: "2023-06-01T12:11:43.639473188Z" + appVersion: v1.21.4 + created: "2023-06-15T13:32:29.836841034Z" description: Azure Blob Storage CSI driver - digest: 7598ef899e6fd53f8346cacba4093475647369a56b59f049b9a388590b0ffa0a + digest: e4fa13670caf6b0d3e9fefa55d100daa439cd7187dabd45318ab03c7d4b17710 name: blob-csi-driver urls: - - https://raw.githubusercontent.com/kubernetes-sigs/blob-csi-driver/master/charts/v1.21.3/blob-csi-driver-v1.21.3.tgz - version: v1.21.3 + - https://raw.githubusercontent.com/kubernetes-sigs/blob-csi-driver/master/charts/v1.21.4/blob-csi-driver-v1.21.4.tgz + version: v1.21.4 + - apiVersion: v1 + appVersion: v1.21.4 + created: "2023-06-15T13:32:29.817274637Z" + description: Azure Blob Storage CSI driver + digest: 0c2ffa0655f9444ecb8b28e966d9441d85669985b7dff6f222712047e933d299 + name: blob-csi-driver + urls: + - https://raw.githubusercontent.com/kubernetes-sigs/blob-csi-driver/master/charts/latest/blob-csi-driver-v1.21.4.tgz + version: v1.21.4 - apiVersion: v1 appVersion: v1.21.3 - created: "2023-06-01T12:11:43.623493141Z" + created: "2023-06-15T13:32:29.836228931Z" description: Azure Blob Storage CSI driver digest: 7598ef899e6fd53f8346cacba4093475647369a56b59f049b9a388590b0ffa0a name: blob-csi-driver urls: - - https://raw.githubusercontent.com/kubernetes-sigs/blob-csi-driver/master/charts/latest/blob-csi-driver-v1.21.3.tgz + - https://raw.githubusercontent.com/kubernetes-sigs/blob-csi-driver/master/charts/v1.21.3/blob-csi-driver-v1.21.3.tgz version: v1.21.3 - apiVersion: v1 appVersion: v1.21.2 - created: "2023-06-01T12:11:43.638868963Z" + created: "2023-06-15T13:32:29.835632025Z" description: Azure Blob Storage CSI driver digest: a37e16c22dcee86f2e4e56fc6514aedd9061fe9548e82da476c536428b5ccbd8 name: blob-csi-driver @@ -30,7 +39,7 @@ entries: version: v1.21.2 - apiVersion: v1 appVersion: v1.21.1 - created: "2023-06-01T12:11:43.638113773Z" + created: "2023-06-15T13:32:29.835022723Z" description: Azure Blob Storage CSI driver digest: 77640358a3862bf482c10fe4d887cbfa84e47d29271a93aecf749c12645ea80e name: blob-csi-driver @@ -39,7 +48,7 @@ entries: version: v1.21.1 - apiVersion: v1 appVersion: v1.21.0 - created: "2023-06-01T12:11:43.636774309Z" + created: "2023-06-15T13:32:29.834384257Z" description: Azure Blob Storage CSI driver digest: cd9d4acb33dca9b76d3780154fbb90de552d1dd09f98641af965c48b26dba0e2 name: blob-csi-driver @@ -48,7 +57,7 @@ entries: version: v1.21.0 - apiVersion: v1 appVersion: v1.20.2 - created: "2023-06-01T12:11:43.635986074Z" + created: "2023-06-15T13:32:29.833764888Z" description: Azure Blob Storage CSI driver digest: 4bade95d429e53f9e9e2f07af3e24117f71dbdc708df1f41b6ec95245d2d0ca0 name: blob-csi-driver @@ -57,7 +66,7 @@ entries: version: v1.20.2 - apiVersion: v1 appVersion: v1.20.1 - created: "2023-06-01T12:11:43.635414454Z" + created: "2023-06-15T13:32:29.833116881Z" description: Azure Blob Storage CSI driver digest: b2a843345518a2431f7ddd573ec4556cd38a0d4ec78a58703fde4698e545bec3 name: blob-csi-driver @@ -66,7 +75,7 @@ entries: version: v1.20.1 - apiVersion: v1 appVersion: v1.19.3 - created: "2023-06-01T12:11:43.634216614Z" + created: "2023-06-15T13:32:29.830670595Z" description: Azure Blob Storage CSI driver digest: 6ce3724c58ae67d89c073ef4940a909cfd1189b47003626a0469ee93878362da name: blob-csi-driver @@ -75,7 +84,7 @@ entries: version: v1.19.3 - apiVersion: v1 appVersion: v1.19.2 - created: "2023-06-01T12:11:43.63362814Z" + created: "2023-06-15T13:32:29.829962546Z" description: Azure Blob Storage CSI driver digest: 63bccd0776f78b6816875ffd99e0ad9c6efecd1b447570228e58410e36dab477 name: blob-csi-driver @@ -84,7 +93,7 @@ entries: version: v1.19.2 - apiVersion: v1 appVersion: v1.18.0 - created: "2023-06-01T12:11:43.633039212Z" + created: "2023-06-15T13:32:29.82856927Z" description: Azure Blob Storage CSI driver digest: 3eac15488da5be7d1e78431929f7cda35bceb1af3fe107ffbd84606e047c9204 name: blob-csi-driver @@ -93,7 +102,7 @@ entries: version: v1.18.0 - apiVersion: v1 appVersion: v1.17.0 - created: "2023-06-01T12:11:43.632290775Z" + created: "2023-06-15T13:32:29.827394298Z" description: Azure Blob Storage CSI driver digest: 22cfa17fc5e8d771ff8edd26729266a9a8ee55c0e150df85ef15698f7fe985e9 name: blob-csi-driver @@ -102,7 +111,7 @@ entries: version: v1.17.0 - apiVersion: v1 appVersion: v1.16.0 - created: "2023-06-01T12:11:43.631516641Z" + created: "2023-06-15T13:32:29.826573384Z" description: Azure Blob Storage CSI driver digest: bf6249c0e3e3d3d009d4c79ceb7fda9a56c0565b969de753628792ea3ea5ece8 name: blob-csi-driver @@ -111,7 +120,7 @@ entries: version: v1.16.0 - apiVersion: v1 appVersion: v1.15.0 - created: "2023-06-01T12:11:43.629596428Z" + created: "2023-06-15T13:32:29.825526077Z" description: Azure Blob Storage CSI driver digest: 8daa35cd4957695cb64b45da05a15b4020df5545a8ac44c4668dad4bba82c8a9 name: blob-csi-driver @@ -120,7 +129,7 @@ entries: version: v1.15.0 - apiVersion: v1 appVersion: v1.14.0 - created: "2023-06-01T12:11:43.628870457Z" + created: "2023-06-15T13:32:29.824502871Z" description: Azure Blob Storage CSI driver digest: 442bc579b231aab626b9e474e2c0ed3f101d47d61c99aa9a7f863af7ce268d9d name: blob-csi-driver @@ -129,7 +138,7 @@ entries: version: v1.14.0 - apiVersion: v1 appVersion: v1.13.0 - created: "2023-06-01T12:11:43.628144735Z" + created: "2023-06-15T13:32:29.823362981Z" description: Azure Blob Storage CSI driver digest: b577b0b771138109aa90eb09d56fc07273ca0b584a263ee8f789e35796279f31 name: blob-csi-driver @@ -138,7 +147,7 @@ entries: version: v1.13.0 - apiVersion: v1 appVersion: v1.12.0 - created: "2023-06-01T12:11:43.627373005Z" + created: "2023-06-15T13:32:29.822428043Z" description: Azure Blob Storage CSI driver digest: 124e87af2581b374b89a39940698620c23d3eae6dcee518d302461ffea93e9a8 name: blob-csi-driver @@ -147,7 +156,7 @@ entries: version: v1.12.0 - apiVersion: v1 appVersion: v1.11.0 - created: "2023-06-01T12:11:43.626531261Z" + created: "2023-06-15T13:32:29.821435195Z" description: Azure Blob Storage CSI driver digest: 07c4d76017491b3d0bdd70de90e814096938bf7916da0c149c3805294bd57560 name: blob-csi-driver @@ -156,7 +165,7 @@ entries: version: v1.11.0 - apiVersion: v1 appVersion: v1.10.0 - created: "2023-06-01T12:11:43.62565828Z" + created: "2023-06-15T13:32:29.820519093Z" description: Azure Blob Storage CSI driver digest: 79716efa958385adf57eb3570843e1b4512d8c801e8e070625e94264f3e917a9 name: blob-csi-driver @@ -165,7 +174,7 @@ entries: version: v1.10.0 - apiVersion: v1 appVersion: v1.9.0 - created: "2023-06-01T12:11:43.646170494Z" + created: "2023-06-15T13:32:29.844437014Z" description: Azure Blob Storage CSI driver digest: fca0b9215d3277346f68c643fb3ead75158971f0d1945ab01ec559196f3cf842 name: blob-csi-driver @@ -174,7 +183,7 @@ entries: version: v1.9.0 - apiVersion: v1 appVersion: v1.8.0 - created: "2023-06-01T12:11:43.644791084Z" + created: "2023-06-15T13:32:29.843781902Z" description: Azure Blob Storage CSI driver digest: 3b78e2ab4f33577c54d4f57276c824717d2ad2aa3741210e938fcaf927bc751f name: blob-csi-driver @@ -183,7 +192,7 @@ entries: version: v1.8.0 - apiVersion: v1 appVersion: v1.7.0 - created: "2023-06-01T12:11:43.643704884Z" + created: "2023-06-15T13:32:29.842922743Z" description: Azure Blob Storage CSI driver digest: 28da5b55c3d2689d6da85eb7da344385e9cb99bdb2af18c24fea93670abfe7ea name: blob-csi-driver @@ -192,7 +201,7 @@ entries: version: v1.7.0 - apiVersion: v1 appVersion: v1.6.0 - created: "2023-06-01T12:11:43.642871633Z" + created: "2023-06-15T13:32:29.842022138Z" description: Azure Blob Storage CSI driver digest: 6f24f2e6623f6f8862e47d4fbdf13b5f351ceec6bb9a4591ef7fc2fca9fc1eef name: blob-csi-driver @@ -201,7 +210,7 @@ entries: version: v1.6.0 - apiVersion: v1 appVersion: v1.5.0 - created: "2023-06-01T12:11:43.642186832Z" + created: "2023-06-15T13:32:29.841141593Z" description: Azure Blob Storage CSI driver digest: 95d14c9b70b319760d388ea47727c8c97e9287867a8852aeb67b7175b52fe8f5 name: blob-csi-driver @@ -210,7 +219,7 @@ entries: version: v1.5.0 - apiVersion: v1 appVersion: v1.4.1 - created: "2023-06-01T12:11:43.641463308Z" + created: "2023-06-15T13:32:29.840321408Z" description: Azure Blob Storage CSI driver digest: 5fcf69c449f065fa1d5722e5a7fed8a28000efa790907e9ff4b552c5fbd16d22 name: blob-csi-driver @@ -219,7 +228,7 @@ entries: version: v1.4.1 - apiVersion: v1 appVersion: v1.4.0 - created: "2023-06-01T12:11:43.640787228Z" + created: "2023-06-15T13:32:29.839450231Z" description: Azure Blob Storage CSI driver digest: b466543344a6411f6130ba87b093955d39ab8614c6b4ed8505a0a0c96073cb33 name: blob-csi-driver @@ -228,7 +237,7 @@ entries: version: v1.4.0 - apiVersion: v1 appVersion: v1.3.0 - created: "2023-06-01T12:11:43.640117239Z" + created: "2023-06-15T13:32:29.838134539Z" description: Azure Blob Storage CSI driver digest: 58d02cb70a3a966b349d62e880b7149fb06ac009474e35e580784fd3c98a5b07 name: blob-csi-driver @@ -237,7 +246,7 @@ entries: version: v1.3.0 - apiVersion: v1 appVersion: v1.2.0 - created: "2023-06-01T12:11:43.634829455Z" + created: "2023-06-15T13:32:29.832519087Z" description: Azure Blob Storage CSI driver digest: 27fb89f20b5fddc7329e6d7c2374857b22c1d61592e397a53f47121eea68c344 name: blob-csi-driver @@ -246,7 +255,7 @@ entries: version: v1.2.0 - apiVersion: v1 appVersion: v1.1.0 - created: "2023-06-01T12:11:43.624818618Z" + created: "2023-06-15T13:32:29.819588304Z" description: Azure Blob Storage CSI driver digest: a251a55243de207c69ef53f72abee45e93b72fa4fc43dc204b7f1cdfd459acdb name: blob-csi-driver @@ -255,7 +264,7 @@ entries: version: v1.1.0 - apiVersion: v1 appVersion: v1.0.0 - created: "2023-06-01T12:11:43.624101791Z" + created: "2023-06-15T13:32:29.818615562Z" description: Azure Blob Storage CSI driver digest: e83f037a165eafc83a978bd7e6bf6221b052ac34363aecb12e6a73607dc58b89 name: blob-csi-driver @@ -264,11 +273,11 @@ entries: version: v1.0.0 - apiVersion: v1 appVersion: latest - created: "2023-06-01T12:11:43.622844201Z" + created: "2023-06-15T13:32:29.816598006Z" description: Azure Blob Storage CSI driver digest: c1681cd031f5eb9fdb7fd16adf006c77824485f1744dc6b65f2db02c0a1581d6 name: blob-csi-driver urls: - https://raw.githubusercontent.com/kubernetes-sigs/blob-csi-driver/master/charts/latest/blob-csi-driver-v0.0.0.tgz version: v0.0.0 -generated: "2023-06-01T12:11:43.62205825Z" +generated: "2023-06-15T13:32:29.815710961Z" diff --git a/charts/latest/blob-csi-driver-v1.21.3.tgz b/charts/latest/blob-csi-driver-v1.21.3.tgz deleted file mode 100644 index 482e9f34f7fe4cb17dacba0f249c7b37b7062a2f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5517 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 following config only works on debian based agent node ```console -kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/blob-csi-driver/master/deploy/v1.21.3/blobfuse-proxy.yaml +kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/blob-csi-driver/master/deploy/v1.21.4/blobfuse-proxy.yaml ``` - set `enable-blobfuse-proxy=true` in existing `csi-blob-node` daemonset manually (default is `false`) ```console diff --git a/deploy/csi-blob-controller.yaml b/deploy/csi-blob-controller.yaml index a84b3798d..5cd2c57ae 100644 --- a/deploy/csi-blob-controller.yaml +++ b/deploy/csi-blob-controller.yaml @@ -72,7 +72,7 @@ spec: cpu: 10m memory: 20Mi - name: blob - image: mcr.microsoft.com/oss/kubernetes-csi/blob-csi:v1.21.3 + image: mcr.microsoft.com/oss/kubernetes-csi/blob-csi:v1.21.4 imagePullPolicy: IfNotPresent args: - "--v=5" diff --git a/deploy/csi-blob-node.yaml b/deploy/csi-blob-node.yaml index 81c4c0c49..46fd5bc06 100644 --- a/deploy/csi-blob-node.yaml +++ b/deploy/csi-blob-node.yaml @@ -40,7 +40,7 @@ spec: - operator: "Exists" initContainers: - name: install-blobfuse-proxy - image: mcr.microsoft.com/oss/kubernetes-csi/blob-csi:v1.21.3 + image: mcr.microsoft.com/oss/kubernetes-csi/blob-csi:v1.21.4 imagePullPolicy: IfNotPresent command: - "/blobfuse-proxy/init.sh" @@ -118,7 +118,7 @@ spec: cpu: 10m memory: 20Mi - name: blob - image: mcr.microsoft.com/oss/kubernetes-csi/blob-csi:v1.21.3 + image: mcr.microsoft.com/oss/kubernetes-csi/blob-csi:v1.21.4 imagePullPolicy: IfNotPresent args: - "--v=5" diff --git a/deploy/v1.21.4/csi-blob-controller.yaml b/deploy/v1.21.4/csi-blob-controller.yaml new file mode 100644 index 000000000..5cd2c57ae --- /dev/null +++ b/deploy/v1.21.4/csi-blob-controller.yaml @@ -0,0 +1,143 @@ +--- +kind: Deployment +apiVersion: apps/v1 +metadata: + name: csi-blob-controller + namespace: kube-system +spec: + replicas: 2 + selector: + matchLabels: + app: csi-blob-controller + template: + metadata: + labels: + app: csi-blob-controller + spec: + hostNetwork: true + serviceAccountName: csi-blob-controller-sa + nodeSelector: + kubernetes.io/os: linux # add "kubernetes.io/role: master" to run controller on master node + priorityClassName: system-cluster-critical + securityContext: + seccompProfile: + type: RuntimeDefault + tolerations: + - key: "node-role.kubernetes.io/master" + operator: "Exists" + effect: "NoSchedule" + - key: "node-role.kubernetes.io/controlplane" + operator: "Exists" + effect: "NoSchedule" + - key: "node-role.kubernetes.io/control-plane" + operator: "Exists" + effect: "NoSchedule" + containers: + - name: csi-provisioner + image: mcr.microsoft.com/oss/kubernetes-csi/csi-provisioner:v3.3.0 + args: + - "-v=2" + - "--csi-address=$(ADDRESS)" + - "--leader-election" + - "--leader-election-namespace=kube-system" + - "--timeout=120s" + - "--extra-create-metadata=true" + - "--kube-api-qps=50" + - "--kube-api-burst=100" + env: + - name: ADDRESS + value: /csi/csi.sock + volumeMounts: + - mountPath: /csi + name: socket-dir + resources: + limits: + memory: 500Mi + requests: + cpu: 10m + memory: 20Mi + - name: liveness-probe + image: mcr.microsoft.com/oss/kubernetes-csi/livenessprobe:v2.8.0 + args: + - --csi-address=/csi/csi.sock + - --probe-timeout=3s + - --health-port=29632 + volumeMounts: + - name: socket-dir + mountPath: /csi + resources: + limits: + memory: 100Mi + requests: + cpu: 10m + memory: 20Mi + - name: blob + image: mcr.microsoft.com/oss/kubernetes-csi/blob-csi:v1.21.4 + imagePullPolicy: IfNotPresent + args: + - "--v=5" + - "--endpoint=$(CSI_ENDPOINT)" + - "--metrics-address=0.0.0.0:29634" + - "--user-agent-suffix=OSS-kubectl" + ports: + - containerPort: 29632 + name: healthz + protocol: TCP + - containerPort: 29634 + name: metrics + protocol: TCP + livenessProbe: + failureThreshold: 5 + httpGet: + path: /healthz + port: healthz + initialDelaySeconds: 30 + timeoutSeconds: 10 + periodSeconds: 30 + env: + - name: AZURE_CREDENTIAL_FILE + valueFrom: + configMapKeyRef: + name: azure-cred-file + key: path + optional: true + - name: CSI_ENDPOINT + value: unix:///csi/csi.sock + volumeMounts: + - mountPath: /csi + name: socket-dir + - mountPath: /etc/kubernetes/ + name: azure-cred + resources: + limits: + memory: 200Mi + requests: + cpu: 10m + memory: 20Mi + - name: csi-resizer + image: mcr.microsoft.com/oss/kubernetes-csi/csi-resizer:v1.5.0 + args: + - "-csi-address=$(ADDRESS)" + - "-v=2" + - "-leader-election" + - "--leader-election-namespace=kube-system" + - '-handle-volume-inuse-error=false' + env: + - name: ADDRESS + value: /csi/csi.sock + volumeMounts: + - name: socket-dir + mountPath: /csi + resources: + limits: + memory: 500Mi + requests: + cpu: 10m + memory: 20Mi + volumes: + - name: socket-dir + emptyDir: {} + - name: azure-cred + hostPath: + path: /etc/kubernetes/ + type: DirectoryOrCreate diff --git a/deploy/v1.21.4/csi-blob-driver.yaml b/deploy/v1.21.4/csi-blob-driver.yaml new file mode 100644 index 000000000..7b216feab --- /dev/null +++ b/deploy/v1.21.4/csi-blob-driver.yaml @@ -0,0 +1,11 @@ +--- +apiVersion: storage.k8s.io/v1 +kind: CSIDriver +metadata: + name: blob.csi.azure.com +spec: + attachRequired: false + podInfoOnMount: true + volumeLifecycleModes: + - Persistent + - Ephemeral diff --git a/deploy/v1.21.4/csi-blob-node.yaml b/deploy/v1.21.4/csi-blob-node.yaml new file mode 100644 index 000000000..46fd5bc06 --- /dev/null +++ b/deploy/v1.21.4/csi-blob-node.yaml @@ -0,0 +1,203 @@ +--- +kind: DaemonSet +apiVersion: apps/v1 +metadata: + name: csi-blob-node + namespace: kube-system +spec: + updateStrategy: + rollingUpdate: + maxUnavailable: 1 + type: RollingUpdate + selector: + matchLabels: + app: csi-blob-node + template: + metadata: + labels: + app: csi-blob-node + spec: + hostNetwork: true + hostPID: true + dnsPolicy: Default + serviceAccountName: csi-blob-node-sa + nodeSelector: + kubernetes.io/os: linux + affinity: + nodeAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + nodeSelectorTerms: + - matchExpressions: + - key: type + operator: NotIn + values: + - virtual-kubelet + priorityClassName: system-node-critical + securityContext: + seccompProfile: + type: RuntimeDefault + tolerations: + - operator: "Exists" + initContainers: + - name: install-blobfuse-proxy + image: mcr.microsoft.com/oss/kubernetes-csi/blob-csi:v1.21.4 + imagePullPolicy: IfNotPresent + command: + - "/blobfuse-proxy/init.sh" + securityContext: + privileged: true + env: + - name: DEBIAN_FRONTEND + value: "noninteractive" + - name: INSTALL_BLOBFUSE_PROXY + value: "true" + - name: INSTALL_BLOBFUSE + value: "true" + - name: BLOBFUSE_VERSION + value: "" + - name: INSTALL_BLOBFUSE2 + value: "true" + - name: BLOBFUSE2_VERSION + value: "" + - name: SET_MAX_OPEN_FILE_NUM + value: "true" + - name: MAX_FILE_NUM + value: "9000000" + - name: DISABLE_UPDATEDB + value: "true" + volumeMounts: + - name: host-usr + mountPath: /host/usr + - name: host-etc + mountPath: /host/etc + containers: + - name: liveness-probe + volumeMounts: + - mountPath: /csi + name: socket-dir + image: mcr.microsoft.com/oss/kubernetes-csi/livenessprobe:v2.8.0 + args: + - --csi-address=/csi/csi.sock + - --probe-timeout=3s + - --health-port=29633 + - --v=2 + resources: + limits: + memory: 100Mi + requests: + cpu: 10m + memory: 20Mi + - name: node-driver-registrar + image: mcr.microsoft.com/oss/kubernetes-csi/csi-node-driver-registrar:v2.6.2 + args: + - --csi-address=$(ADDRESS) + - --kubelet-registration-path=$(DRIVER_REG_SOCK_PATH) + - --v=2 + livenessProbe: + exec: + command: + - /csi-node-driver-registrar + - --kubelet-registration-path=$(DRIVER_REG_SOCK_PATH) + - --mode=kubelet-registration-probe + initialDelaySeconds: 30 + timeoutSeconds: 15 + env: + - name: ADDRESS + value: /csi/csi.sock + - name: DRIVER_REG_SOCK_PATH + value: /var/lib/kubelet/plugins/blob.csi.azure.com/csi.sock + volumeMounts: + - name: socket-dir + mountPath: /csi + - name: registration-dir + mountPath: /registration + resources: + limits: + memory: 100Mi + requests: + cpu: 10m + memory: 20Mi + - name: blob + image: mcr.microsoft.com/oss/kubernetes-csi/blob-csi:v1.21.4 + imagePullPolicy: IfNotPresent + args: + - "--v=5" + - "--endpoint=$(CSI_ENDPOINT)" + - "--enable-blobfuse-proxy=false" + - "--blobfuse-proxy-endpoint=$(BLOBFUSE_PROXY_ENDPOINT)" + - "--nodeid=$(KUBE_NODE_NAME)" + - "--user-agent-suffix=OSS-kubectl" + ports: + - containerPort: 29633 + name: healthz + protocol: TCP + livenessProbe: + failureThreshold: 5 + httpGet: + path: /healthz + port: healthz + initialDelaySeconds: 30 + timeoutSeconds: 10 + periodSeconds: 30 + env: + - name: AZURE_CREDENTIAL_FILE + valueFrom: + configMapKeyRef: + name: azure-cred-file + key: path + optional: true + - name: CSI_ENDPOINT + value: unix:///csi/csi.sock + - name: BLOBFUSE_PROXY_ENDPOINT + value: unix:///csi/blobfuse-proxy.sock + - name: KUBE_NODE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: spec.nodeName + securityContext: + privileged: true + volumeMounts: + - mountPath: /csi + name: socket-dir + - mountPath: /var/lib/kubelet/ + mountPropagation: Bidirectional + name: mountpoint-dir + - mountPath: /etc/kubernetes/ + name: azure-cred + - mountPath: /mnt + name: blob-cache + resources: + limits: + memory: 2100Mi + requests: + cpu: 10m + memory: 20Mi + volumes: + - name: host-usr + hostPath: + path: /usr + - name: host-etc + hostPath: + path: /etc + - hostPath: + path: /var/lib/kubelet/plugins/blob.csi.azure.com + type: DirectoryOrCreate + name: socket-dir + - hostPath: + path: /var/lib/kubelet/ + type: DirectoryOrCreate + name: mountpoint-dir + - hostPath: + path: /var/lib/kubelet/plugins_registry/ + type: DirectoryOrCreate + name: registration-dir + - hostPath: + path: /etc/kubernetes/ + type: DirectoryOrCreate + name: azure-cred + - hostPath: + path: /mnt + type: DirectoryOrCreate + name: blob-cache +--- diff --git a/deploy/v1.21.4/kustomization.yaml b/deploy/v1.21.4/kustomization.yaml new file mode 100644 index 000000000..8b7f5fcac --- /dev/null +++ b/deploy/v1.21.4/kustomization.yaml @@ -0,0 +1,10 @@ +--- +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +resources: + - csi-blob-controller.yaml + - csi-blob-driver.yaml + - csi-blob-node.yaml + - rbac-csi-blob-controller.yaml + - rbac-csi-blob-node.yaml + - blobfuse-proxy.yaml diff --git a/deploy/v1.21.4/rbac-csi-blob-controller.yaml b/deploy/v1.21.4/rbac-csi-blob-controller.yaml new file mode 100644 index 000000000..89c2f1f38 --- /dev/null +++ b/deploy/v1.21.4/rbac-csi-blob-controller.yaml @@ -0,0 +1,108 @@ +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: csi-blob-controller-sa + namespace: kube-system +--- + +kind: ClusterRole +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: blob-external-provisioner-role +rules: + - apiGroups: [""] + resources: ["persistentvolumes"] + verbs: ["get", "list", "watch", "create", "delete"] + - apiGroups: [""] + resources: ["persistentvolumeclaims"] + verbs: ["get", "list", "watch", "update"] + - apiGroups: ["storage.k8s.io"] + resources: ["storageclasses"] + verbs: ["get", "list", "watch"] + - apiGroups: [""] + resources: ["events"] + verbs: ["get", "list", "watch", "create", "update", "patch"] + - apiGroups: ["storage.k8s.io"] + resources: ["csinodes"] + verbs: ["get", "list", "watch"] + - apiGroups: [""] + resources: ["nodes"] + verbs: ["get", "list", "watch"] + - apiGroups: ["coordination.k8s.io"] + resources: ["leases"] + verbs: ["get", "list", "watch", "create", "update", "patch"] +--- + +kind: ClusterRoleBinding +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: blob-csi-provisioner-binding +subjects: + - kind: ServiceAccount + name: csi-blob-controller-sa + namespace: kube-system +roleRef: + kind: ClusterRole + name: blob-external-provisioner-role + apiGroup: rbac.authorization.k8s.io +--- + +kind: ClusterRole +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: blob-external-resizer-role +rules: + - apiGroups: [""] + resources: ["persistentvolumes"] + verbs: ["get", "list", "watch", "update", "patch"] + - apiGroups: [""] + resources: ["persistentvolumeclaims"] + verbs: ["get", "list", "watch"] + - apiGroups: [""] + resources: ["persistentvolumeclaims/status"] + verbs: ["update", "patch"] + - apiGroups: [""] + resources: ["events"] + verbs: ["list", "watch", "create", "update", "patch"] + - apiGroups: ["coordination.k8s.io"] + resources: ["leases"] + verbs: ["get", "list", "watch", "create", "update", "patch"] +--- + +kind: ClusterRoleBinding +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: blob-csi-resizer-role +subjects: + - kind: ServiceAccount + name: csi-blob-controller-sa + namespace: kube-system +roleRef: + kind: ClusterRole + name: blob-external-resizer-role + apiGroup: rbac.authorization.k8s.io +--- + +kind: ClusterRole +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: csi-blob-controller-secret-role +rules: + - apiGroups: [""] + resources: ["secrets"] + verbs: ["get", "create"] + +--- +kind: ClusterRoleBinding +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: csi-blob-controller-secret-binding +subjects: + - kind: ServiceAccount + name: csi-blob-controller-sa + namespace: kube-system +roleRef: + kind: ClusterRole + name: csi-blob-controller-secret-role + apiGroup: rbac.authorization.k8s.io diff --git a/deploy/v1.21.4/rbac-csi-blob-node.yaml b/deploy/v1.21.4/rbac-csi-blob-node.yaml new file mode 100644 index 000000000..ce06d862c --- /dev/null +++ b/deploy/v1.21.4/rbac-csi-blob-node.yaml @@ -0,0 +1,30 @@ +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: csi-blob-node-sa + namespace: kube-system + +--- +kind: ClusterRole +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: csi-blob-node-secret-role +rules: + - apiGroups: [""] + resources: ["secrets"] + verbs: ["get"] + +--- +kind: ClusterRoleBinding +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: csi-blob-node-secret-binding +subjects: + - kind: ServiceAccount + name: csi-blob-node-sa + namespace: kube-system +roleRef: + kind: ClusterRole + name: csi-blob-node-secret-role + apiGroup: rbac.authorization.k8s.io diff --git a/docs/install-blob-csi-driver.md b/docs/install-blob-csi-driver.md index f6a2cabdb..dd6996a07 100644 --- a/docs/install-blob-csi-driver.md +++ b/docs/install-blob-csi-driver.md @@ -4,6 +4,6 @@ > - please use helm install method for more customization, e.g. Azure Stack, RedHat OpenShift support. > - [install CSI driver master version](./install-csi-driver-master.md) (only for testing purpose) - - [install v1.21.3 CSI driver](./install-csi-driver-v1.21.3.md) + - [install v1.21.4 CSI driver](./install-csi-driver-v1.21.4.md) - [install v1.20.2 CSI driver](./install-csi-driver-v1.20.2.md) - [install v1.19.3 CSI driver](./install-csi-driver-v1.19.3.md) diff --git a/docs/install-csi-driver-v1.21.4.md b/docs/install-csi-driver-v1.21.4.md new file mode 100644 index 000000000..8e00b8184 --- /dev/null +++ b/docs/install-csi-driver-v1.21.4.md @@ -0,0 +1,47 @@ +# Install Azure Blob Storage CSI driver v1.21.4 version on a kubernetes cluster +> `blobfuse-proxy` is only available for debian based agent nodes, remove `blobfuse-proxy` parameter in installation steps if it's not applicable. +> +If you have already installed Helm, you can also use it to install this driver. Please check [Installation with Helm](../charts/README.md). + +## Install with kubectl + - Option#1. remote install +```console +curl -skSL https://raw.githubusercontent.com/kubernetes-sigs/blob-csi-driver/v1.21.4/deploy/install-driver.sh | bash -s v1.21.4 blobfuse-proxy -- +``` + + - Option#2. local install +```console +git clone https://github.com/kubernetes-sigs/blob-csi-driver.git +cd blob-csi-driver +./deploy/install-driver.sh v1.21.4 local,blobfuse-proxy +``` + +- check pods status: +```console +kubectl -n kube-system get pod -o wide -l app=csi-blob-controller +kubectl -n kube-system get pod -o wide -l app=csi-blob-node +``` + +example output: + +```console +NAME READY STATUS RESTARTS AGE IP NODE +csi-blob-controller-56bfddd689-dh5tk 4/4 Running 0 35s 10.240.0.19 k8s-agentpool-22533604-0 +csi-blob-controller-56bfddd689-8pgr4 4/4 Running 0 35s 10.240.0.35 k8s-agentpool-22533604-1 +csi-blob-node-cvgbs 3/3 Running 0 35s 10.240.0.35 k8s-agentpool-22533604-1 +csi-blob-node-dr4s4 3/3 Running 0 35s 10.240.0.4 k8s-agentpool-22533604-0 +``` + +### clean up Blob CSI driver +- Option#1. remote uninstall +```console +curl -skSL https://raw.githubusercontent.com/kubernetes-sigs/blob-csi-driver/v1.21.4/deploy/uninstall-driver.sh | bash -s v1.21.4 -- +``` + + - Option#2. local uninstall +```console +git clone https://github.com/kubernetes-sigs/blob-csi-driver.git +cd blob-csi-driver +git checkout v1.21.4 +./deploy/uninstall-driver.sh v1.21.4 local +```