From d0717b232b7c32e27a3904dd57c007c974f1f159 Mon Sep 17 00:00:00 2001 From: Laila Kassar Date: Tue, 8 Jun 2021 00:06:05 +0000 Subject: [PATCH 1/2] feat: add support for defining preexisting sa --- charts/README.md | 9 +++++---- .../templates/csi-azuredisk-controller.yaml | 2 +- .../templates/csi-azuredisk-node-windows.yaml | 2 +- .../templates/csi-azuredisk-node.yaml | 2 +- .../templates/csi-snapshot-controller.yaml | 2 +- .../templates/rbac-csi-azuredisk-controller.yaml | 10 +++++----- .../templates/rbac-csi-azuredisk-node.yaml | 2 +- .../templates/rbac-csi-snapshot-controller.yaml | 6 +++--- .../serviceaccount-csi-azuredisk-controller.yaml | 2 +- .../templates/serviceaccount-csi-azuredisk-node.yaml | 2 +- .../serviceaccount-csi-snapshot-controller.yaml | 4 ++-- charts/latest/azuredisk-csi-driver/values.yaml | 9 +++++---- 12 files changed, 27 insertions(+), 25 deletions(-) diff --git a/charts/README.md b/charts/README.md index 24fa55c71f..797b4dd49e 100644 --- a/charts/README.md +++ b/charts/README.md @@ -66,10 +66,13 @@ The following table lists the configurable parameters of the latest Azure Disk C | `image.nodeDriverRegistrar.tag` | csi-node-driver-registrar docker image tag | v2.2.0 | | `image.nodeDriverRegistrar.pullPolicy` | csi-node-driver-registrar image pull policy | IfNotPresent | | `imagePullSecrets` | Specify docker-registry secret names as an array | [] (does not add image pull secrets to deployed pods) | | -| `serviceAccount.create` | whether create service account of csi-azuredisk-controller | true | +| `serviceAccount.create` | whether create service account of csi-azuredisk-controller, csi-azuredisk-node, and snapshot-controller| true | +| `serviceAccount.controller` | name of service account for csi-azuredisk-controller | csi-azuredisk-controller-sa | +| `serviceAccount.node` | name of service account for csi-azuredisk-node | csi-azuredisk-node-sa | +| `serviceAccount.snapshotController` | name of service account for csi-snapshot-controller | csi-snapshot-controller-sa | | `rbac.create` | whether create rbac of csi-azuredisk-controller | true | | `controller.replicas` | the replicas of csi-azuredisk-controller | 2 | -| `controller.metricsPort` | metrics port of csi-azuredisk-controller |29604 | +| `controller.metricsPort` | metrics port of csi-azuredisk-controller | 29604 | | `controller.runOnMaster` | run csi-azuredisk-controller on master node | false | | `controller.logLevel` | controller driver log level |`5` | | `node.metricsPort` | metrics port of csi-azuredisk-node |29605 | @@ -82,8 +85,6 @@ The following table lists the configurable parameters of the latest Azure Disk C | `snapshot.image.csiSnapshotController.tag` | snapshot-controller docker image tag | v3.0.3 | | `snapshot.image.csiSnapshotController.pullPolicy` | snapshot-controller image pull policy | IfNotPresent | | `snapshot.snapshotController.replicas` | the replicas of snapshot-controller | 1 | -| `snapshot.snapshotController.serviceAccount` | whether create service account of snapshot-controller | true | -| `snapshot.snapshotController.rbac` | whether create rbac of snapshot-controller | true | | `linux.enabled` | whether enable linux feature | true | | `linux.kubelet` | configure kubelet directory path on Linux agent node | `/var/lib/kubelet` | | `linux.distro` | configure ssl certificates for different Linux distribution(available values: `debian`, `fedora`) | `debian` | diff --git a/charts/latest/azuredisk-csi-driver/templates/csi-azuredisk-controller.yaml b/charts/latest/azuredisk-csi-driver/templates/csi-azuredisk-controller.yaml index 6d43e6dac8..0d0d3e71d0 100755 --- a/charts/latest/azuredisk-csi-driver/templates/csi-azuredisk-controller.yaml +++ b/charts/latest/azuredisk-csi-driver/templates/csi-azuredisk-controller.yaml @@ -19,7 +19,7 @@ spec: {{ toYaml .Values.imagePullSecrets | indent 8 }} {{- end }} hostNetwork: true - serviceAccountName: csi-azuredisk-controller-sa + serviceAccountName: {{ .Values.serviceAccount.controller }} nodeSelector: kubernetes.io/os: linux {{- if .Values.controller.runOnMaster}} diff --git a/charts/latest/azuredisk-csi-driver/templates/csi-azuredisk-node-windows.yaml b/charts/latest/azuredisk-csi-driver/templates/csi-azuredisk-node-windows.yaml index c531723880..e6697e3c5f 100755 --- a/charts/latest/azuredisk-csi-driver/templates/csi-azuredisk-node-windows.yaml +++ b/charts/latest/azuredisk-csi-driver/templates/csi-azuredisk-node-windows.yaml @@ -14,7 +14,7 @@ spec: {{ include "azuredisk.labels" . | indent 6 }} app: csi-azuredisk-node-win spec: - serviceAccountName: csi-azuredisk-node-sa + serviceAccountName: {{ .Values.serviceAccount.node }} tolerations: - key: "node.kubernetes.io/os" operator: "Exists" diff --git a/charts/latest/azuredisk-csi-driver/templates/csi-azuredisk-node.yaml b/charts/latest/azuredisk-csi-driver/templates/csi-azuredisk-node.yaml index 3a10942ea8..dcd9a2baab 100755 --- a/charts/latest/azuredisk-csi-driver/templates/csi-azuredisk-node.yaml +++ b/charts/latest/azuredisk-csi-driver/templates/csi-azuredisk-node.yaml @@ -20,7 +20,7 @@ spec: {{- end }} hostNetwork: true dnsPolicy: ClusterFirstWithHostNet - serviceAccountName: csi-azuredisk-node-sa + serviceAccountName: {{ .Values.serviceAccount.node }} nodeSelector: kubernetes.io/os: linux affinity: diff --git a/charts/latest/azuredisk-csi-driver/templates/csi-snapshot-controller.yaml b/charts/latest/azuredisk-csi-driver/templates/csi-snapshot-controller.yaml index db94c31d26..e2e5da0428 100755 --- a/charts/latest/azuredisk-csi-driver/templates/csi-snapshot-controller.yaml +++ b/charts/latest/azuredisk-csi-driver/templates/csi-snapshot-controller.yaml @@ -15,7 +15,7 @@ spec: {{ include "azuredisk.labels" . | indent 6 }} app: csi-snapshot-controller spec: - serviceAccountName: csi-snapshot-controller-sa + serviceAccountName: {{ .Values.serviceAccount.snapshotController }} nodeSelector: kubernetes.io/os: linux priorityClassName: system-cluster-critical diff --git a/charts/latest/azuredisk-csi-driver/templates/rbac-csi-azuredisk-controller.yaml b/charts/latest/azuredisk-csi-driver/templates/rbac-csi-azuredisk-controller.yaml index 99979a0e66..7c1ad1aaea 100755 --- a/charts/latest/azuredisk-csi-driver/templates/rbac-csi-azuredisk-controller.yaml +++ b/charts/latest/azuredisk-csi-driver/templates/rbac-csi-azuredisk-controller.yaml @@ -42,7 +42,7 @@ metadata: {{ include "azuredisk.labels" . | indent 2 }} subjects: - kind: ServiceAccount - name: csi-azuredisk-controller-sa + name: {{ .Values.serviceAccount.controller }} namespace: {{ .Release.Namespace }} roleRef: kind: ClusterRole @@ -84,7 +84,7 @@ metadata: {{ include "azuredisk.labels" . | indent 2 }} subjects: - kind: ServiceAccount - name: csi-azuredisk-controller-sa + name: {{ .Values.serviceAccount.controller }} namespace: {{ .Release.Namespace }} roleRef: kind: ClusterRole @@ -129,7 +129,7 @@ metadata: {{ include "azuredisk.labels" . | indent 2 }} subjects: - kind: ServiceAccount - name: csi-azuredisk-controller-sa + name: {{ .Values.serviceAccount.controller }} namespace: {{ .Release.Namespace }} roleRef: kind: ClusterRole @@ -169,7 +169,7 @@ metadata: {{ include "azuredisk.labels" . | indent 2 }} subjects: - kind: ServiceAccount - name: csi-azuredisk-controller-sa + name: {{ .Values.serviceAccount.controller }} namespace: {{ .Release.Namespace }} roleRef: kind: ClusterRole @@ -193,7 +193,7 @@ metadata: name: csi-azuredisk-controller-secret-binding subjects: - kind: ServiceAccount - name: csi-azuredisk-controller-sa + name: {{ .Values.serviceAccount.controller }} namespace: {{ .Release.Namespace }} roleRef: kind: ClusterRole diff --git a/charts/latest/azuredisk-csi-driver/templates/rbac-csi-azuredisk-node.yaml b/charts/latest/azuredisk-csi-driver/templates/rbac-csi-azuredisk-node.yaml index 54d15e908c..1177837ff7 100755 --- a/charts/latest/azuredisk-csi-driver/templates/rbac-csi-azuredisk-node.yaml +++ b/charts/latest/azuredisk-csi-driver/templates/rbac-csi-azuredisk-node.yaml @@ -16,7 +16,7 @@ metadata: name: csi-azuredisk-node-secret-binding subjects: - kind: ServiceAccount - name: csi-azuredisk-node-sa + name: {{ .Values.serviceAccount.node }} namespace: {{ .Release.Namespace }} roleRef: kind: ClusterRole diff --git a/charts/latest/azuredisk-csi-driver/templates/rbac-csi-snapshot-controller.yaml b/charts/latest/azuredisk-csi-driver/templates/rbac-csi-snapshot-controller.yaml index d9cae48020..bbca06976f 100755 --- a/charts/latest/azuredisk-csi-driver/templates/rbac-csi-snapshot-controller.yaml +++ b/charts/latest/azuredisk-csi-driver/templates/rbac-csi-snapshot-controller.yaml @@ -1,4 +1,4 @@ -{{- if and .Values.snapshot.enabled .Values.snapshot.snapshotController.rbac -}} +{{- if and .Values.snapshot.enabled .Values.rbac.create -}} kind: ClusterRole apiVersion: rbac.authorization.k8s.io/v1 metadata: @@ -36,7 +36,7 @@ metadata: name: csi-snapshot-controller-binding subjects: - kind: ServiceAccount - name: csi-snapshot-controller-sa + name: {{ .Values.serviceAccount.snapshotController }} namespace: {{ .Release.Namespace }} roleRef: kind: ClusterRole @@ -60,7 +60,7 @@ metadata: name: csi-snapshot-controller-leaderelection-binding subjects: - kind: ServiceAccount - name: csi-snapshot-controller-sa + name: {{ .Values.serviceAccount.snapshotController }} namespace: {{ .Release.Namespace }} roleRef: kind: ClusterRole diff --git a/charts/latest/azuredisk-csi-driver/templates/serviceaccount-csi-azuredisk-controller.yaml b/charts/latest/azuredisk-csi-driver/templates/serviceaccount-csi-azuredisk-controller.yaml index e10d1a8d4f..08bd06cda5 100755 --- a/charts/latest/azuredisk-csi-driver/templates/serviceaccount-csi-azuredisk-controller.yaml +++ b/charts/latest/azuredisk-csi-driver/templates/serviceaccount-csi-azuredisk-controller.yaml @@ -2,7 +2,7 @@ apiVersion: v1 kind: ServiceAccount metadata: - name: csi-azuredisk-controller-sa + name: {{ .Values.serviceAccount.controller }} namespace: {{ .Release.Namespace }} {{ include "azuredisk.labels" . | indent 2 }} {{- end -}} diff --git a/charts/latest/azuredisk-csi-driver/templates/serviceaccount-csi-azuredisk-node.yaml b/charts/latest/azuredisk-csi-driver/templates/serviceaccount-csi-azuredisk-node.yaml index 0a56802e42..941f3eb92c 100755 --- a/charts/latest/azuredisk-csi-driver/templates/serviceaccount-csi-azuredisk-node.yaml +++ b/charts/latest/azuredisk-csi-driver/templates/serviceaccount-csi-azuredisk-node.yaml @@ -2,7 +2,7 @@ apiVersion: v1 kind: ServiceAccount metadata: - name: csi-azuredisk-node-sa + name: {{ .Values.serviceAccount.node }} namespace: {{ .Release.Namespace }} {{ include "azuredisk.labels" . | indent 2 }} {{- end -}} diff --git a/charts/latest/azuredisk-csi-driver/templates/serviceaccount-csi-snapshot-controller.yaml b/charts/latest/azuredisk-csi-driver/templates/serviceaccount-csi-snapshot-controller.yaml index 518ccbfdf4..7cdaad0b4f 100755 --- a/charts/latest/azuredisk-csi-driver/templates/serviceaccount-csi-snapshot-controller.yaml +++ b/charts/latest/azuredisk-csi-driver/templates/serviceaccount-csi-snapshot-controller.yaml @@ -1,7 +1,7 @@ -{{- if and .Values.snapshot.enabled .Values.snapshot.snapshotController.serviceAccount -}} +{{- if and .Values.snapshot.enabled .Values.serviceAccount.create -}} apiVersion: v1 kind: ServiceAccount metadata: - name: csi-snapshot-controller-sa + name: {{ .Values.serviceAccount.snapshotController }} namespace: {{ .Release.Namespace }} {{- end -}} diff --git a/charts/latest/azuredisk-csi-driver/values.yaml b/charts/latest/azuredisk-csi-driver/values.yaml index 75e9241601..ec4a21db8d 100755 --- a/charts/latest/azuredisk-csi-driver/values.yaml +++ b/charts/latest/azuredisk-csi-driver/values.yaml @@ -25,11 +25,14 @@ image: pullPolicy: IfNotPresent serviceAccount: - create: true + create: true # When true, service accounts will be created for you. Set to false if you want to use your own. + controller: csi-azuredisk-controller-sa # Name of Service Account to be created or used + node: csi-azuredisk-node-sa # Name of Service Account to be created or used + snapshotController: csi-snapshot-controller-sa # Name of Service Account to be created or used rbac: create: true - + controller: replicas: 2 metricsPort: 29604 @@ -59,8 +62,6 @@ snapshot: pullPolicy: IfNotPresent snapshotController: replicas: 1 - serviceAccount: true - rbac: true feature: enableFSGroupPolicy: false From 568693909dbbecb696f929faa23e3c98a6d410cd Mon Sep 17 00:00:00 2001 From: andyzhangx Date: Sun, 13 Jun 2021 08:30:28 +0000 Subject: [PATCH 2/2] chore: update chart file --- charts/latest/azuredisk-csi-driver-v1.4.0.tgz | Bin 12051 -> 12125 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/charts/latest/azuredisk-csi-driver-v1.4.0.tgz b/charts/latest/azuredisk-csi-driver-v1.4.0.tgz index 7138881d3daeee021e60ebab5a5b446f7fb1c39e..1bdd2932378933b018dc852f819e1cb00f55f4f7 100644 GIT binary patch delta 11857 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 Gg!o^b^%5Zf delta 11835 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