From 8967a67fc679d67b3c09295d6c7e45d5d96c9821 Mon Sep 17 00:00:00 2001 From: andyzhangx Date: Fri, 11 Feb 2022 07:10:51 +0000 Subject: [PATCH] doc: cut v1.11.0 release --- README.md | 2 +- charts/README.md | 2 +- charts/index.yaml | 57 +- .../latest/azurefile-csi-driver-v1.11.0.tgz | Bin 10980 -> 10973 bytes charts/latest/azurefile-csi-driver/Chart.yaml | 2 +- .../latest/azurefile-csi-driver/values.yaml | 2 +- .../v1.11.0/azurefile-csi-driver-v1.11.0.tgz | Bin 0 -> 10973 bytes .../v1.11.0/azurefile-csi-driver/Chart.yaml | 5 + .../azurefile-csi-driver/templates/NOTES.txt | 5 + .../templates/_helpers.tpl | 49 ++ .../templates/crd-csi-snapshot.yaml | 661 ++++++++++++++++++ .../templates/csi-azurefile-controller.yaml | 205 ++++++ .../templates/csi-azurefile-driver.yaml | 19 + .../templates/csi-azurefile-node-windows.yaml | 195 ++++++ .../templates/csi-azurefile-node.yaml | 186 +++++ .../templates/csi-snapshot-controller.yaml | 50 ++ .../rbac-csi-azurefile-controller.yaml | 207 ++++++ .../templates/rbac-csi-azurefile-node.yaml | 29 + .../rbac-csi-snapshot-controller.yaml | 80 +++ ...rviceaccount-csi-azurefile-controller.yaml | 9 + .../serviceaccount-csi-azurefile-node.yaml | 9 + ...erviceaccount-csi-snapshot-controller.yaml | 9 + .../v1.11.0/azurefile-csi-driver/values.yaml | 225 ++++++ deploy/csi-azurefile-controller.yaml | 2 +- deploy/csi-azurefile-node-windows.yaml | 2 +- deploy/csi-azurefile-node.yaml | 2 +- deploy/v1.11.0/crd-csi-snapshot.yaml | 659 +++++++++++++++++ deploy/v1.11.0/csi-azurefile-controller.yaml | 173 +++++ deploy/v1.11.0/csi-azurefile-driver.yaml | 15 + .../v1.11.0/csi-azurefile-node-windows.yaml | 181 +++++ deploy/v1.11.0/csi-azurefile-node.yaml | 157 +++++ deploy/v1.11.0/csi-snapshot-controller.yaml | 41 ++ .../rbac-csi-azurefile-controller.yaml | 194 +++++ deploy/v1.11.0/rbac-csi-azurefile-node.yaml | 30 + .../v1.11.0/rbac-csi-snapshot-controller.yaml | 78 +++ docs/install-azurefile-csi-driver.md | 2 +- docs/install-csi-driver-v1.11.0.md | 26 + 37 files changed, 3538 insertions(+), 32 deletions(-) create mode 100644 charts/v1.11.0/azurefile-csi-driver-v1.11.0.tgz create mode 100644 charts/v1.11.0/azurefile-csi-driver/Chart.yaml create mode 100644 charts/v1.11.0/azurefile-csi-driver/templates/NOTES.txt create mode 100644 charts/v1.11.0/azurefile-csi-driver/templates/_helpers.tpl create mode 100644 charts/v1.11.0/azurefile-csi-driver/templates/crd-csi-snapshot.yaml create mode 100644 charts/v1.11.0/azurefile-csi-driver/templates/csi-azurefile-controller.yaml create mode 100644 charts/v1.11.0/azurefile-csi-driver/templates/csi-azurefile-driver.yaml create mode 100644 charts/v1.11.0/azurefile-csi-driver/templates/csi-azurefile-node-windows.yaml create mode 100644 charts/v1.11.0/azurefile-csi-driver/templates/csi-azurefile-node.yaml create mode 100644 charts/v1.11.0/azurefile-csi-driver/templates/csi-snapshot-controller.yaml create mode 100644 charts/v1.11.0/azurefile-csi-driver/templates/rbac-csi-azurefile-controller.yaml create mode 100644 charts/v1.11.0/azurefile-csi-driver/templates/rbac-csi-azurefile-node.yaml create mode 100644 charts/v1.11.0/azurefile-csi-driver/templates/rbac-csi-snapshot-controller.yaml create mode 100644 charts/v1.11.0/azurefile-csi-driver/templates/serviceaccount-csi-azurefile-controller.yaml create mode 100644 charts/v1.11.0/azurefile-csi-driver/templates/serviceaccount-csi-azurefile-node.yaml create mode 100644 charts/v1.11.0/azurefile-csi-driver/templates/serviceaccount-csi-snapshot-controller.yaml create mode 100644 charts/v1.11.0/azurefile-csi-driver/values.yaml create mode 100644 deploy/v1.11.0/crd-csi-snapshot.yaml create mode 100644 deploy/v1.11.0/csi-azurefile-controller.yaml create mode 100644 deploy/v1.11.0/csi-azurefile-driver.yaml create mode 100644 deploy/v1.11.0/csi-azurefile-node-windows.yaml create mode 100644 deploy/v1.11.0/csi-azurefile-node.yaml create mode 100644 deploy/v1.11.0/csi-snapshot-controller.yaml create mode 100644 deploy/v1.11.0/rbac-csi-azurefile-controller.yaml create mode 100644 deploy/v1.11.0/rbac-csi-azurefile-node.yaml create mode 100644 deploy/v1.11.0/rbac-csi-snapshot-controller.yaml create mode 100644 docs/install-csi-driver-v1.11.0.md diff --git a/README.md b/README.md index 2ae24fec5e..71301b2e87 100644 --- a/README.md +++ b/README.md @@ -12,9 +12,9 @@ This driver allows Kubernetes to use [Azure File](https://docs.microsoft.com/en- |Driver Version |Image | supported k8s version | |----------------|----------------------------------------------- |-----------------------| |master branch |mcr.microsoft.com/k8s/csi/azurefile-csi:latest | 1.20+ | +|v1.11.0 |mcr.microsoft.com/k8s/csi/azurefile-csi:v1.11.0 | 1.20+ | |v1.10.0 |mcr.microsoft.com/k8s/csi/azurefile-csi:v1.10.0 | 1.20+ | |v1.9.0 |mcr.microsoft.com/k8s/csi/azurefile-csi:v1.9.0 | 1.19+ | -|v1.8.0 |mcr.microsoft.com/k8s/csi/azurefile-csi:v1.8.0 | 1.19+ | ### Driver parameters Please refer to [driver parameters](./docs/driver-parameters.md) diff --git a/charts/README.md b/charts/README.md index f9a50facb0..a65ebfdff1 100644 --- a/charts/README.md +++ b/charts/README.md @@ -16,7 +16,7 @@ ### install a specific version ```console helm repo add azurefile-csi-driver https://raw.githubusercontent.com/kubernetes-sigs/azurefile-csi-driver/master/charts -helm install azurefile-csi-driver azurefile-csi-driver/azurefile-csi-driver --namespace kube-system --version v1.10.0 +helm install azurefile-csi-driver azurefile-csi-driver/azurefile-csi-driver --namespace kube-system --version v1.11.0 ``` ### install on RedHat/CentOS diff --git a/charts/index.yaml b/charts/index.yaml index 7bea123043..372ec1b9f1 100644 --- a/charts/index.yaml +++ b/charts/index.yaml @@ -2,17 +2,26 @@ apiVersion: v1 entries: azurefile-csi-driver: - apiVersion: v1 - appVersion: latest - created: "2022-01-26T13:58:25.290322142Z" + appVersion: v1.11.0 + created: "2022-02-11T07:10:11.187950703Z" description: Azure File Container Storage Interface (CSI) Storage Plugin - digest: 2af3b82e76beb58e7aff295a761ee7b3328198fba0fea8d1e4bcacd2fc94c893 + digest: 76bd438f8391d08235b09fbca859f25a9fcf8e018fd1e7e33444ca9ea946ce4b name: azurefile-csi-driver urls: - https://raw.githubusercontent.com/kubernetes-sigs/azurefile-csi-driver/master/charts/latest/azurefile-csi-driver-v1.11.0.tgz version: v1.11.0 + - apiVersion: v1 + appVersion: v1.11.0 + created: "2022-02-11T07:10:11.206758509Z" + description: Azure File Container Storage Interface (CSI) Storage Plugin + digest: 76bd438f8391d08235b09fbca859f25a9fcf8e018fd1e7e33444ca9ea946ce4b + name: azurefile-csi-driver + urls: + - https://raw.githubusercontent.com/kubernetes-sigs/azurefile-csi-driver/master/charts/v1.11.0/azurefile-csi-driver-v1.11.0.tgz + version: v1.11.0 - apiVersion: v1 appVersion: v1.10.0 - created: "2022-01-26T13:58:25.298861194Z" + created: "2022-02-11T07:10:11.204989099Z" description: Azure File Container Storage Interface (CSI) Storage Plugin digest: 845a9de8b571b255d05ae9c643d9b90a57fe6507ff3fb735c88b41f99f6f28dc name: azurefile-csi-driver @@ -21,7 +30,7 @@ entries: version: v1.10.0 - apiVersion: v1 appVersion: v1.9.0 - created: "2022-01-26T13:58:25.309059156Z" + created: "2022-02-11T07:10:11.222048595Z" description: Azure File Container Storage Interface (CSI) Storage Plugin digest: 59a8057fbbd6d59919b84ef0c3396d5a0a46d1f29df604457db676f4af63c714 name: azurefile-csi-driver @@ -30,7 +39,7 @@ entries: version: v1.9.0 - apiVersion: v1 appVersion: v1.8.0 - created: "2022-01-26T13:58:25.307585847Z" + created: "2022-02-11T07:10:11.219827482Z" description: Azure File Container Storage Interface (CSI) Storage Plugin digest: 455b7c342194311046df526d10926d94f3bef24f753a07003fb1cad211c4cb52 name: azurefile-csi-driver @@ -39,7 +48,7 @@ entries: version: v1.8.0 - apiVersion: v1 appVersion: v1.7.0 - created: "2022-01-26T13:58:25.305839137Z" + created: "2022-02-11T07:10:11.217517669Z" description: Azure File Container Storage Interface (CSI) Storage Plugin digest: 057b3f6ef6001d3457fbffc27f90316c981a089696abd3d38bcc8de5537dfa6f name: azurefile-csi-driver @@ -48,7 +57,7 @@ entries: version: v1.7.0 - apiVersion: v1 appVersion: v1.6.0 - created: "2022-01-26T13:58:25.304620729Z" + created: "2022-02-11T07:10:11.215674759Z" description: Azure File Container Storage Interface (CSI) Storage Plugin digest: cc2a0dda824cdda4e8141e26878bbb481c5a52e45785a5dbf72e54f2a376e522 name: azurefile-csi-driver @@ -57,7 +66,7 @@ entries: version: v1.6.0 - apiVersion: v1 appVersion: v1.5.0 - created: "2022-01-26T13:58:25.302770318Z" + created: "2022-02-11T07:10:11.213806048Z" description: Azure File Container Storage Interface (CSI) Storage Plugin digest: 2258177477415ddecd83dc46dfd88833223623224c7fe396590b617082bcd845 name: azurefile-csi-driver @@ -66,7 +75,7 @@ entries: version: v1.5.0 - apiVersion: v1 appVersion: v1.4.0 - created: "2022-01-26T13:58:25.301804112Z" + created: "2022-02-11T07:10:11.211006233Z" description: Azure File Container Storage Interface (CSI) Storage Plugin digest: 40e9bc4ee187789166fcb7c3c82b85b33ecd3a6096266fe74e411d6b48961ece name: azurefile-csi-driver @@ -75,7 +84,7 @@ entries: version: v1.4.0 - apiVersion: v1 appVersion: v1.3.0 - created: "2022-01-26T13:58:25.300904107Z" + created: "2022-02-11T07:10:11.209341523Z" description: Azure File Container Storage Interface (CSI) Storage Plugin digest: 12942f422b7cccbfe950bbdbd5c844f5ae4b7c292f32389cba312730a6fe9a62 name: azurefile-csi-driver @@ -84,7 +93,7 @@ entries: version: v1.3.0 - apiVersion: v1 appVersion: v1.2.0 - created: "2022-01-26T13:58:25.2998338Z" + created: "2022-02-11T07:10:11.207918115Z" description: Azure File Container Storage Interface (CSI) Storage Plugin digest: b62f44b757416a9e1f5a91e19285f5f5056ec6068802dd9cd82373bef40c9ee9 name: azurefile-csi-driver @@ -93,7 +102,7 @@ entries: version: v1.2.0 - apiVersion: v1 appVersion: v1.1.0 - created: "2022-01-26T13:58:25.297458786Z" + created: "2022-02-11T07:10:11.202708686Z" description: Azure File Container Storage Interface (CSI) Storage Plugin digest: 675d96b309a1c5c491053ebbb854c046737420929c4f0692839afdaaf0db3933 name: azurefile-csi-driver @@ -102,7 +111,7 @@ entries: version: v1.1.0 - apiVersion: v1 appVersion: v1.0.0 - created: "2022-01-26T13:58:25.29653278Z" + created: "2022-02-11T07:10:11.201282978Z" description: Azure File Container Storage Interface (CSI) Storage Plugin digest: 6fd5e54e949ef1061a08d5477bc580204c91dde8f01da195e95dd60ade209492 name: azurefile-csi-driver @@ -111,7 +120,7 @@ entries: version: v1.0.0 - apiVersion: v1 appVersion: v0.10.0 - created: "2022-01-26T13:58:25.291076347Z" + created: "2022-02-11T07:10:11.189560112Z" description: Azure File Container Storage Interface (CSI) Storage Plugin digest: 8437b70c263de3ba365d4719f1cdd976e7461d217504b43d136d985b40f2f7ef name: azurefile-csi-driver @@ -120,7 +129,7 @@ entries: version: v0.10.0 - apiVersion: v1 appVersion: v0.9.0 - created: "2022-01-26T13:58:25.294991671Z" + created: "2022-02-11T07:10:11.198476262Z" description: Azure File Container Storage Interface (CSI) Storage Plugin digest: ff42d33b0b98ce138e95028e084ce1fe9cecde82d2b96e22ca4aaf3e6453a15b name: azurefile-csi-driver @@ -129,7 +138,7 @@ entries: version: v0.9.0 - apiVersion: v1 appVersion: v0.8.0 - created: "2022-01-26T13:58:25.294150766Z" + created: "2022-02-11T07:10:11.197154955Z" description: Azure File Container Storage Interface (CSI) Storage Plugin digest: 6811326fbd54832ef441bd54bb5a8bf5b0ca4734da1755c84b51ae713e35fb72 name: azurefile-csi-driver @@ -138,7 +147,7 @@ entries: version: v0.8.0 - apiVersion: v1 appVersion: v0.7.0 - created: "2022-01-26T13:58:25.293376861Z" + created: "2022-02-11T07:10:11.195772147Z" description: Azure File Container Storage Interface (CSI) Storage Plugin digest: cc529dd3f6d19acc695f79cb08656ed0d8192f449eb70af3ab94d6b76c28c38d name: azurefile-csi-driver @@ -147,7 +156,7 @@ entries: version: v0.7.0 - apiVersion: v1 appVersion: v0.6.0 - created: "2022-01-26T13:58:25.292889458Z" + created: "2022-02-11T07:10:11.19464364Z" description: Azure File Container Storage Interface (CSI) Storage Plugin digest: eb6bc5333d6ed5788c0aa6d42e14e6228c1bf72c0db44de6f60c746e6f0cd3dd name: azurefile-csi-driver @@ -156,7 +165,7 @@ entries: version: v0.6.0 - apiVersion: v1 appVersion: v0.5.0 - created: "2022-01-26T13:58:25.292422955Z" + created: "2022-02-11T07:10:11.193538934Z" description: Azure File Container Storage Interface (CSI) Storage Plugin digest: 2d16cae9af5e306e4b3f1cba341532089e9871abe31d9ff20f6751215f908a01 name: azurefile-csi-driver @@ -165,7 +174,7 @@ entries: version: v0.5.0 - apiVersion: v1 appVersion: v0.4.0 - created: "2022-01-26T13:58:25.291993252Z" + created: "2022-02-11T07:10:11.192420228Z" description: Azure File Container Storage Interface (CSI) Storage Plugin digest: fcc251b21abb2a5aee4df751424b33705850226119c1bfbb0c741d0ce020d1f2 name: azurefile-csi-driver @@ -174,7 +183,7 @@ entries: version: v0.4.0 - apiVersion: v1 appVersion: 0.3.0 - created: "2022-01-26T13:58:25.29162815Z" + created: "2022-02-11T07:10:11.191271222Z" description: Azure File Container Storage Interface (CSI) Storage Plugin digest: d0fa02e4c7c15f106050c6d795e97b437ec8be359d33130ca02509effc1d7082 name: azurefile-csi-driver @@ -183,11 +192,11 @@ entries: version: 0.3.0 - apiVersion: v1 appVersion: 0.2.0 - created: "2022-01-26T13:58:25.291354249Z" + created: "2022-02-11T07:10:11.190129415Z" description: Azure File Container Storage Interface (CSI) Storage Plugin digest: fde4b97c4a57b1aa6a9345e25c29eccc6b83da7746b465813473a955a4fe9896 name: azurefile-csi-driver urls: - https://raw.githubusercontent.com/kubernetes-sigs/azurefile-csi-driver/master/charts/v0.2.0/azurefile-csi-driver-0.2.0.tgz version: 0.2.0 -generated: "2022-01-26T13:58:25.288793333Z" +generated: "2022-02-11T07:10:11.185862191Z" diff --git a/charts/latest/azurefile-csi-driver-v1.11.0.tgz b/charts/latest/azurefile-csi-driver-v1.11.0.tgz index ed2716f6c6513ae854200b4ab64dc0c29ff0c419..fc7ec2577bd4d4f52191a0e826580bfcda7712af 100644 GIT binary patch delta 9624 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 delta 9665 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 nrQL9nJ4?1C-XCxa3ll-I9wOGUlbu75#j#L diff --git a/charts/latest/azurefile-csi-driver/Chart.yaml b/charts/latest/azurefile-csi-driver/Chart.yaml index 3261c30bcc..ee645e6939 100644 --- a/charts/latest/azurefile-csi-driver/Chart.yaml +++ b/charts/latest/azurefile-csi-driver/Chart.yaml @@ -1,5 +1,5 @@ apiVersion: v1 -appVersion: latest +appVersion: v1.11.0 description: Azure File Container Storage Interface (CSI) Storage Plugin name: azurefile-csi-driver version: v1.11.0 diff --git a/charts/latest/azurefile-csi-driver/values.yaml b/charts/latest/azurefile-csi-driver/values.yaml index 9ee2b6ba7b..7f4b1fad64 100644 --- a/charts/latest/azurefile-csi-driver/values.yaml +++ b/charts/latest/azurefile-csi-driver/values.yaml @@ -2,7 +2,7 @@ image: baseRepo: mcr.microsoft.com azurefile: repository: /k8s/csi/azurefile-csi - tag: latest + tag: v1.11.0 pullPolicy: IfNotPresent csiProvisioner: repository: /oss/kubernetes-csi/csi-provisioner diff --git a/charts/v1.11.0/azurefile-csi-driver-v1.11.0.tgz b/charts/v1.11.0/azurefile-csi-driver-v1.11.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..fc7ec2577bd4d4f52191a0e826580bfcda7712af GIT binary patch literal 10973 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 literal 0 HcmV?d00001 diff --git a/charts/v1.11.0/azurefile-csi-driver/Chart.yaml b/charts/v1.11.0/azurefile-csi-driver/Chart.yaml new file mode 100644 index 0000000000..ee645e6939 --- /dev/null +++ b/charts/v1.11.0/azurefile-csi-driver/Chart.yaml @@ -0,0 +1,5 @@ +apiVersion: v1 +appVersion: v1.11.0 +description: Azure File Container Storage Interface (CSI) Storage Plugin +name: azurefile-csi-driver +version: v1.11.0 diff --git a/charts/v1.11.0/azurefile-csi-driver/templates/NOTES.txt b/charts/v1.11.0/azurefile-csi-driver/templates/NOTES.txt new file mode 100644 index 0000000000..3fadd8ad36 --- /dev/null +++ b/charts/v1.11.0/azurefile-csi-driver/templates/NOTES.txt @@ -0,0 +1,5 @@ +The Azure File CSI Driver is getting deployed to your cluster. + +To check Azure File CSI Driver pods status, please run: + + kubectl --namespace={{ .Release.Namespace }} get pods --selector="release={{ .Release.Name }}" --watch diff --git a/charts/v1.11.0/azurefile-csi-driver/templates/_helpers.tpl b/charts/v1.11.0/azurefile-csi-driver/templates/_helpers.tpl new file mode 100644 index 0000000000..b1bf4dc1b6 --- /dev/null +++ b/charts/v1.11.0/azurefile-csi-driver/templates/_helpers.tpl @@ -0,0 +1,49 @@ +{{/* vim: set filetype=mustache: */}} + +{{/* Expand the name of the chart.*/}} +{{- define "azurefile.name" -}} +{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "azurefile.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{/* +Common selectors. +*/}} +{{- define "azurefile.selectorLabels" -}} +app.kubernetes.io/name: {{ template "azurefile.name" . }} +app.kubernetes.io/instance: {{ .Release.Name }} +{{- end -}} + +{{/* +Common labels. +*/}} +{{- define "azurefile.labels" -}} +{{- include "azurefile.selectorLabels" . }} +app.kubernetes.io/component: csi-driver +app.kubernetes.io/part-of: {{ template "azurefile.name" . }} +app.kubernetes.io/managed-by: {{ .Release.Service }} +{{- if .Chart.AppVersion }} +app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} +{{- end }} +helm.sh/chart: {{ template "azurefile.chart" . }} +{{- if .Values.customLabels }} +{{ toYaml .Values.customLabels }} +{{- end }} +{{- end -}} + + +{{/* pull secrets for containers */}} +{{- define "azurefile.pullSecrets" -}} +{{- if .Values.imagePullSecrets }} +imagePullSecrets: +{{- range .Values.imagePullSecrets }} + - name: {{ . }} +{{- end }} +{{- end }} +{{- end -}} diff --git a/charts/v1.11.0/azurefile-csi-driver/templates/crd-csi-snapshot.yaml b/charts/v1.11.0/azurefile-csi-driver/templates/crd-csi-snapshot.yaml new file mode 100644 index 0000000000..b0e29453c5 --- /dev/null +++ b/charts/v1.11.0/azurefile-csi-driver/templates/crd-csi-snapshot.yaml @@ -0,0 +1,661 @@ +{{- if .Values.snapshot.enabled -}} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.4.0 + api-approved.kubernetes.io: "https://github.com/kubernetes-csi/external-snapshotter/pull/419" + creationTimestamp: null + name: volumesnapshots.snapshot.storage.k8s.io +spec: + group: snapshot.storage.k8s.io + names: + kind: VolumeSnapshot + listKind: VolumeSnapshotList + plural: volumesnapshots + shortNames: + - vs + singular: volumesnapshot + scope: Namespaced + versions: + - additionalPrinterColumns: + - description: Indicates if the snapshot is ready to be used to restore a volume. + jsonPath: .status.readyToUse + name: ReadyToUse + type: boolean + - description: If a new snapshot needs to be created, this contains the name of the source PVC from which this snapshot was (or will be) created. + jsonPath: .spec.source.persistentVolumeClaimName + name: SourcePVC + type: string + - description: If a snapshot already exists, this contains the name of the existing VolumeSnapshotContent object representing the existing snapshot. + jsonPath: .spec.source.volumeSnapshotContentName + name: SourceSnapshotContent + type: string + - description: Represents the minimum size of volume required to rehydrate from this snapshot. + jsonPath: .status.restoreSize + name: RestoreSize + type: string + - description: The name of the VolumeSnapshotClass requested by the VolumeSnapshot. + jsonPath: .spec.volumeSnapshotClassName + name: SnapshotClass + type: string + - description: Name of the VolumeSnapshotContent object to which the VolumeSnapshot object intends to bind to. Please note that verification of binding actually requires checking both VolumeSnapshot and VolumeSnapshotContent to ensure both are pointing at each other. Binding MUST be verified prior to usage of this object. + jsonPath: .status.boundVolumeSnapshotContentName + name: SnapshotContent + type: string + - description: Timestamp when the point-in-time snapshot was taken by the underlying storage system. + jsonPath: .status.creationTime + name: CreationTime + type: date + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1 + schema: + openAPIV3Schema: + description: VolumeSnapshot is a user's request for either creating a point-in-time snapshot of a persistent volume, or binding to a pre-existing snapshot. + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + spec: + description: 'spec defines the desired characteristics of a snapshot requested by a user. More info: https://kubernetes.io/docs/concepts/storage/volume-snapshots#volumesnapshots Required.' + properties: + source: + description: source specifies where a snapshot will be created from. This field is immutable after creation. Required. + properties: + persistentVolumeClaimName: + description: persistentVolumeClaimName specifies the name of the PersistentVolumeClaim object representing the volume from which a snapshot should be created. This PVC is assumed to be in the same namespace as the VolumeSnapshot object. This field should be set if the snapshot does not exists, and needs to be created. This field is immutable. + type: string + volumeSnapshotContentName: + description: volumeSnapshotContentName specifies the name of a pre-existing VolumeSnapshotContent object representing an existing volume snapshot. This field should be set if the snapshot already exists and only needs a representation in Kubernetes. This field is immutable. + type: string + type: object + oneOf: + - required: ["persistentVolumeClaimName"] + - required: ["volumeSnapshotContentName"] + volumeSnapshotClassName: + description: 'VolumeSnapshotClassName is the name of the VolumeSnapshotClass requested by the VolumeSnapshot. VolumeSnapshotClassName may be left nil to indicate that the default SnapshotClass should be used. A given cluster may have multiple default Volume SnapshotClasses: one default per CSI Driver. If a VolumeSnapshot does not specify a SnapshotClass, VolumeSnapshotSource will be checked to figure out what the associated CSI Driver is, and the default VolumeSnapshotClass associated with that CSI Driver will be used. If more than one VolumeSnapshotClass exist for a given CSI Driver and more than one have been marked as default, CreateSnapshot will fail and generate an event. Empty string is not allowed for this field.' + type: string + required: + - source + type: object + status: + description: status represents the current information of a snapshot. Consumers must verify binding between VolumeSnapshot and VolumeSnapshotContent objects is successful (by validating that both VolumeSnapshot and VolumeSnapshotContent point at each other) before using this object. + properties: + boundVolumeSnapshotContentName: + description: 'boundVolumeSnapshotContentName is the name of the VolumeSnapshotContent object to which this VolumeSnapshot object intends to bind to. If not specified, it indicates that the VolumeSnapshot object has not been successfully bound to a VolumeSnapshotContent object yet. NOTE: To avoid possible security issues, consumers must verify binding between VolumeSnapshot and VolumeSnapshotContent objects is successful (by validating that both VolumeSnapshot and VolumeSnapshotContent point at each other) before using this object.' + type: string + creationTime: + description: creationTime is the timestamp when the point-in-time snapshot is taken by the underlying storage system. In dynamic snapshot creation case, this field will be filled in by the snapshot controller with the "creation_time" value returned from CSI "CreateSnapshot" gRPC call. For a pre-existing snapshot, this field will be filled with the "creation_time" value returned from the CSI "ListSnapshots" gRPC call if the driver supports it. If not specified, it may indicate that the creation time of the snapshot is unknown. + format: date-time + type: string + error: + description: error is the last observed error during snapshot creation, if any. This field could be helpful to upper level controllers(i.e., application controller) to decide whether they should continue on waiting for the snapshot to be created based on the type of error reported. The snapshot controller will keep retrying when an error occurrs during the snapshot creation. Upon success, this error field will be cleared. + properties: + message: + description: 'message is a string detailing the encountered error during snapshot creation if specified. NOTE: message may be logged, and it should not contain sensitive information.' + type: string + time: + description: time is the timestamp when the error was encountered. + format: date-time + type: string + type: object + readyToUse: + description: readyToUse indicates if the snapshot is ready to be used to restore a volume. In dynamic snapshot creation case, this field will be filled in by the snapshot controller with the "ready_to_use" value returned from CSI "CreateSnapshot" gRPC call. For a pre-existing snapshot, this field will be filled with the "ready_to_use" value returned from the CSI "ListSnapshots" gRPC call if the driver supports it, otherwise, this field will be set to "True". If not specified, it means the readiness of a snapshot is unknown. + type: boolean + restoreSize: + type: string + description: restoreSize represents the minimum size of volume required to create a volume from this snapshot. In dynamic snapshot creation case, this field will be filled in by the snapshot controller with the "size_bytes" value returned from CSI "CreateSnapshot" gRPC call. For a pre-existing snapshot, this field will be filled with the "size_bytes" value returned from the CSI "ListSnapshots" gRPC call if the driver supports it. When restoring a volume from this snapshot, the size of the volume MUST NOT be smaller than the restoreSize if it is specified, otherwise the restoration will fail. If not specified, it indicates that the size is unknown. + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + required: + - spec + type: object + served: true + storage: true + subresources: + status: {} + - additionalPrinterColumns: + - description: Indicates if the snapshot is ready to be used to restore a volume. + jsonPath: .status.readyToUse + name: ReadyToUse + type: boolean + - description: If a new snapshot needs to be created, this contains the name of the source PVC from which this snapshot was (or will be) created. + jsonPath: .spec.source.persistentVolumeClaimName + name: SourcePVC + type: string + - description: If a snapshot already exists, this contains the name of the existing VolumeSnapshotContent object representing the existing snapshot. + jsonPath: .spec.source.volumeSnapshotContentName + name: SourceSnapshotContent + type: string + - description: Represents the minimum size of volume required to rehydrate from this snapshot. + jsonPath: .status.restoreSize + name: RestoreSize + type: string + - description: The name of the VolumeSnapshotClass requested by the VolumeSnapshot. + jsonPath: .spec.volumeSnapshotClassName + name: SnapshotClass + type: string + - description: Name of the VolumeSnapshotContent object to which the VolumeSnapshot object intends to bind to. Please note that verification of binding actually requires checking both VolumeSnapshot and VolumeSnapshotContent to ensure both are pointing at each other. Binding MUST be verified prior to usage of this object. + jsonPath: .status.boundVolumeSnapshotContentName + name: SnapshotContent + type: string + - description: Timestamp when the point-in-time snapshot was taken by the underlying storage system. + jsonPath: .status.creationTime + name: CreationTime + type: date + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1beta1 + # This indicates the v1beta1 version of the custom resource is deprecated. + # API requests to this version receive a warning in the server response. + deprecated: true + # This overrides the default warning returned to clients making v1beta1 API requests. + deprecationWarning: "snapshot.storage.k8s.io/v1beta1 VolumeSnapshot is deprecated; use snapshot.storage.k8s.io/v1 VolumeSnapshot" + schema: + openAPIV3Schema: + description: VolumeSnapshot is a user's request for either creating a point-in-time snapshot of a persistent volume, or binding to a pre-existing snapshot. + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + spec: + description: 'spec defines the desired characteristics of a snapshot requested by a user. More info: https://kubernetes.io/docs/concepts/storage/volume-snapshots#volumesnapshots Required.' + properties: + source: + description: source specifies where a snapshot will be created from. This field is immutable after creation. Required. + properties: + persistentVolumeClaimName: + description: persistentVolumeClaimName specifies the name of the PersistentVolumeClaim object representing the volume from which a snapshot should be created. This PVC is assumed to be in the same namespace as the VolumeSnapshot object. This field should be set if the snapshot does not exists, and needs to be created. This field is immutable. + type: string + volumeSnapshotContentName: + description: volumeSnapshotContentName specifies the name of a pre-existing VolumeSnapshotContent object representing an existing volume snapshot. This field should be set if the snapshot already exists and only needs a representation in Kubernetes. This field is immutable. + type: string + type: object + volumeSnapshotClassName: + description: 'VolumeSnapshotClassName is the name of the VolumeSnapshotClass requested by the VolumeSnapshot. VolumeSnapshotClassName may be left nil to indicate that the default SnapshotClass should be used. A given cluster may have multiple default Volume SnapshotClasses: one default per CSI Driver. If a VolumeSnapshot does not specify a SnapshotClass, VolumeSnapshotSource will be checked to figure out what the associated CSI Driver is, and the default VolumeSnapshotClass associated with that CSI Driver will be used. If more than one VolumeSnapshotClass exist for a given CSI Driver and more than one have been marked as default, CreateSnapshot will fail and generate an event. Empty string is not allowed for this field.' + type: string + required: + - source + type: object + status: + description: status represents the current information of a snapshot. Consumers must verify binding between VolumeSnapshot and VolumeSnapshotContent objects is successful (by validating that both VolumeSnapshot and VolumeSnapshotContent point at each other) before using this object. + properties: + boundVolumeSnapshotContentName: + description: 'boundVolumeSnapshotContentName is the name of the VolumeSnapshotContent object to which this VolumeSnapshot object intends to bind to. If not specified, it indicates that the VolumeSnapshot object has not been successfully bound to a VolumeSnapshotContent object yet. NOTE: To avoid possible security issues, consumers must verify binding between VolumeSnapshot and VolumeSnapshotContent objects is successful (by validating that both VolumeSnapshot and VolumeSnapshotContent point at each other) before using this object.' + type: string + creationTime: + description: creationTime is the timestamp when the point-in-time snapshot is taken by the underlying storage system. In dynamic snapshot creation case, this field will be filled in by the snapshot controller with the "creation_time" value returned from CSI "CreateSnapshot" gRPC call. For a pre-existing snapshot, this field will be filled with the "creation_time" value returned from the CSI "ListSnapshots" gRPC call if the driver supports it. If not specified, it may indicate that the creation time of the snapshot is unknown. + format: date-time + type: string + error: + description: error is the last observed error during snapshot creation, if any. This field could be helpful to upper level controllers(i.e., application controller) to decide whether they should continue on waiting for the snapshot to be created based on the type of error reported. The snapshot controller will keep retrying when an error occurrs during the snapshot creation. Upon success, this error field will be cleared. + properties: + message: + description: 'message is a string detailing the encountered error during snapshot creation if specified. NOTE: message may be logged, and it should not contain sensitive information.' + type: string + time: + description: time is the timestamp when the error was encountered. + format: date-time + type: string + type: object + readyToUse: + description: readyToUse indicates if the snapshot is ready to be used to restore a volume. In dynamic snapshot creation case, this field will be filled in by the snapshot controller with the "ready_to_use" value returned from CSI "CreateSnapshot" gRPC call. For a pre-existing snapshot, this field will be filled with the "ready_to_use" value returned from the CSI "ListSnapshots" gRPC call if the driver supports it, otherwise, this field will be set to "True". If not specified, it means the readiness of a snapshot is unknown. + type: boolean + restoreSize: + type: string + description: restoreSize represents the minimum size of volume required to create a volume from this snapshot. In dynamic snapshot creation case, this field will be filled in by the snapshot controller with the "size_bytes" value returned from CSI "CreateSnapshot" gRPC call. For a pre-existing snapshot, this field will be filled with the "size_bytes" value returned from the CSI "ListSnapshots" gRPC call if the driver supports it. When restoring a volume from this snapshot, the size of the volume MUST NOT be smaller than the restoreSize if it is specified, otherwise the restoration will fail. If not specified, it indicates that the size is unknown. + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + required: + - spec + type: object + served: true + storage: false + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] + +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.4.0 + api-approved.kubernetes.io: "https://github.com/kubernetes-csi/external-snapshotter/pull/419" + creationTimestamp: null + name: volumesnapshotclasses.snapshot.storage.k8s.io +spec: + group: snapshot.storage.k8s.io + names: + kind: VolumeSnapshotClass + listKind: VolumeSnapshotClassList + plural: volumesnapshotclasses + shortNames: + - vsclass + - vsclasses + singular: volumesnapshotclass + scope: Cluster + versions: + - additionalPrinterColumns: + - jsonPath: .driver + name: Driver + type: string + - description: Determines whether a VolumeSnapshotContent created through the VolumeSnapshotClass should be deleted when its bound VolumeSnapshot is deleted. + jsonPath: .deletionPolicy + name: DeletionPolicy + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1 + schema: + openAPIV3Schema: + description: VolumeSnapshotClass specifies parameters that a underlying storage system uses when creating a volume snapshot. A specific VolumeSnapshotClass is used by specifying its name in a VolumeSnapshot object. VolumeSnapshotClasses are non-namespaced + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + deletionPolicy: + description: deletionPolicy determines whether a VolumeSnapshotContent created through the VolumeSnapshotClass should be deleted when its bound VolumeSnapshot is deleted. Supported values are "Retain" and "Delete". "Retain" means that the VolumeSnapshotContent and its physical snapshot on underlying storage system are kept. "Delete" means that the VolumeSnapshotContent and its physical snapshot on underlying storage system are deleted. Required. + enum: + - Delete + - Retain + type: string + driver: + description: driver is the name of the storage driver that handles this VolumeSnapshotClass. Required. + type: string + kind: + description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + parameters: + additionalProperties: + type: string + description: parameters is a key-value map with storage driver specific parameters for creating snapshots. These values are opaque to Kubernetes. + type: object + required: + - deletionPolicy + - driver + type: object + served: true + storage: true + subresources: {} + - additionalPrinterColumns: + - jsonPath: .driver + name: Driver + type: string + - description: Determines whether a VolumeSnapshotContent created through the VolumeSnapshotClass should be deleted when its bound VolumeSnapshot is deleted. + jsonPath: .deletionPolicy + name: DeletionPolicy + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1beta1 + # This indicates the v1beta1 version of the custom resource is deprecated. + # API requests to this version receive a warning in the server response. + deprecated: true + # This overrides the default warning returned to clients making v1beta1 API requests. + deprecationWarning: "snapshot.storage.k8s.io/v1beta1 VolumeSnapshotClass is deprecated; use snapshot.storage.k8s.io/v1 VolumeSnapshotClass" + schema: + openAPIV3Schema: + description: VolumeSnapshotClass specifies parameters that a underlying storage system uses when creating a volume snapshot. A specific VolumeSnapshotClass is used by specifying its name in a VolumeSnapshot object. VolumeSnapshotClasses are non-namespaced + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + deletionPolicy: + description: deletionPolicy determines whether a VolumeSnapshotContent created through the VolumeSnapshotClass should be deleted when its bound VolumeSnapshot is deleted. Supported values are "Retain" and "Delete". "Retain" means that the VolumeSnapshotContent and its physical snapshot on underlying storage system are kept. "Delete" means that the VolumeSnapshotContent and its physical snapshot on underlying storage system are deleted. Required. + enum: + - Delete + - Retain + type: string + driver: + description: driver is the name of the storage driver that handles this VolumeSnapshotClass. Required. + type: string + kind: + description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + parameters: + additionalProperties: + type: string + description: parameters is a key-value map with storage driver specific parameters for creating snapshots. These values are opaque to Kubernetes. + type: object + required: + - deletionPolicy + - driver + type: object + served: true + storage: false + subresources: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] + +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.4.0 + api-approved.kubernetes.io: "https://github.com/kubernetes-csi/external-snapshotter/pull/419" + creationTimestamp: null + name: volumesnapshotcontents.snapshot.storage.k8s.io +spec: + group: snapshot.storage.k8s.io + names: + kind: VolumeSnapshotContent + listKind: VolumeSnapshotContentList + plural: volumesnapshotcontents + shortNames: + - vsc + - vscs + singular: volumesnapshotcontent + scope: Cluster + versions: + - additionalPrinterColumns: + - description: Indicates if the snapshot is ready to be used to restore a volume. + jsonPath: .status.readyToUse + name: ReadyToUse + type: boolean + - description: Represents the complete size of the snapshot in bytes + jsonPath: .status.restoreSize + name: RestoreSize + type: integer + - description: Determines whether this VolumeSnapshotContent and its physical snapshot on the underlying storage system should be deleted when its bound VolumeSnapshot is deleted. + jsonPath: .spec.deletionPolicy + name: DeletionPolicy + type: string + - description: Name of the CSI driver used to create the physical snapshot on the underlying storage system. + jsonPath: .spec.driver + name: Driver + type: string + - description: Name of the VolumeSnapshotClass to which this snapshot belongs. + jsonPath: .spec.volumeSnapshotClassName + name: VolumeSnapshotClass + type: string + - description: Name of the VolumeSnapshot object to which this VolumeSnapshotContent object is bound. + jsonPath: .spec.volumeSnapshotRef.name + name: VolumeSnapshot + type: string + - description: Namespace of the VolumeSnapshot object to which this VolumeSnapshotContent object is bound. + jsonPath: .spec.volumeSnapshotRef.namespace + name: VolumeSnapshotNamespace + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1 + schema: + openAPIV3Schema: + description: VolumeSnapshotContent represents the actual "on-disk" snapshot object in the underlying storage system + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + spec: + description: spec defines properties of a VolumeSnapshotContent created by the underlying storage system. Required. + properties: + deletionPolicy: + description: deletionPolicy determines whether this VolumeSnapshotContent and its physical snapshot on the underlying storage system should be deleted when its bound VolumeSnapshot is deleted. Supported values are "Retain" and "Delete". "Retain" means that the VolumeSnapshotContent and its physical snapshot on underlying storage system are kept. "Delete" means that the VolumeSnapshotContent and its physical snapshot on underlying storage system are deleted. For dynamically provisioned snapshots, this field will automatically be filled in by the CSI snapshotter sidecar with the "DeletionPolicy" field defined in the corresponding VolumeSnapshotClass. For pre-existing snapshots, users MUST specify this field when creating the VolumeSnapshotContent object. Required. + enum: + - Delete + - Retain + type: string + driver: + description: driver is the name of the CSI driver used to create the physical snapshot on the underlying storage system. This MUST be the same as the name returned by the CSI GetPluginName() call for that driver. Required. + type: string + source: + description: source specifies whether the snapshot is (or should be) dynamically provisioned or already exists, and just requires a Kubernetes object representation. This field is immutable after creation. Required. + properties: + snapshotHandle: + description: snapshotHandle specifies the CSI "snapshot_id" of a pre-existing snapshot on the underlying storage system for which a Kubernetes object representation was (or should be) created. This field is immutable. + type: string + volumeHandle: + description: volumeHandle specifies the CSI "volume_id" of the volume from which a snapshot should be dynamically taken from. This field is immutable. + type: string + type: object + oneOf: + - required: ["snapshotHandle"] + - required: ["volumeHandle"] + volumeSnapshotClassName: + description: name of the VolumeSnapshotClass from which this snapshot was (or will be) created. Note that after provisioning, the VolumeSnapshotClass may be deleted or recreated with different set of values, and as such, should not be referenced post-snapshot creation. + type: string + volumeSnapshotRef: + description: volumeSnapshotRef specifies the VolumeSnapshot object to which this VolumeSnapshotContent object is bound. VolumeSnapshot.Spec.VolumeSnapshotContentName field must reference to this VolumeSnapshotContent's name for the bidirectional binding to be valid. For a pre-existing VolumeSnapshotContent object, name and namespace of the VolumeSnapshot object MUST be provided for binding to happen. This field is immutable after creation. Required. + properties: + apiVersion: + description: API version of the referent. + type: string + fieldPath: + description: 'If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: "spec.containers{name}" (where "name" refers to the name of the container that triggered the event) or if no container name is specified "spec.containers[2]" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object. TODO: this design is not final and this field is subject to change in the future.' + type: string + kind: + description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + namespace: + description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/' + type: string + resourceVersion: + description: 'Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency' + type: string + uid: + description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids' + type: string + type: object + required: + - deletionPolicy + - driver + - source + - volumeSnapshotRef + type: object + status: + description: status represents the current information of a snapshot. + properties: + creationTime: + description: creationTime is the timestamp when the point-in-time snapshot is taken by the underlying storage system. In dynamic snapshot creation case, this field will be filled in by the CSI snapshotter sidecar with the "creation_time" value returned from CSI "CreateSnapshot" gRPC call. For a pre-existing snapshot, this field will be filled with the "creation_time" value returned from the CSI "ListSnapshots" gRPC call if the driver supports it. If not specified, it indicates the creation time is unknown. The format of this field is a Unix nanoseconds time encoded as an int64. On Unix, the command `date +%s%N` returns the current time in nanoseconds since 1970-01-01 00:00:00 UTC. + format: int64 + type: integer + error: + description: error is the last observed error during snapshot creation, if any. Upon success after retry, this error field will be cleared. + properties: + message: + description: 'message is a string detailing the encountered error during snapshot creation if specified. NOTE: message may be logged, and it should not contain sensitive information.' + type: string + time: + description: time is the timestamp when the error was encountered. + format: date-time + type: string + type: object + readyToUse: + description: readyToUse indicates if a snapshot is ready to be used to restore a volume. In dynamic snapshot creation case, this field will be filled in by the CSI snapshotter sidecar with the "ready_to_use" value returned from CSI "CreateSnapshot" gRPC call. For a pre-existing snapshot, this field will be filled with the "ready_to_use" value returned from the CSI "ListSnapshots" gRPC call if the driver supports it, otherwise, this field will be set to "True". If not specified, it means the readiness of a snapshot is unknown. + type: boolean + restoreSize: + description: restoreSize represents the complete size of the snapshot in bytes. In dynamic snapshot creation case, this field will be filled in by the CSI snapshotter sidecar with the "size_bytes" value returned from CSI "CreateSnapshot" gRPC call. For a pre-existing snapshot, this field will be filled with the "size_bytes" value returned from the CSI "ListSnapshots" gRPC call if the driver supports it. When restoring a volume from this snapshot, the size of the volume MUST NOT be smaller than the restoreSize if it is specified, otherwise the restoration will fail. If not specified, it indicates that the size is unknown. + format: int64 + minimum: 0 + type: integer + snapshotHandle: + description: snapshotHandle is the CSI "snapshot_id" of a snapshot on the underlying storage system. If not specified, it indicates that dynamic snapshot creation has either failed or it is still in progress. + type: string + type: object + required: + - spec + type: object + served: true + storage: true + subresources: + status: {} + - additionalPrinterColumns: + - description: Indicates if the snapshot is ready to be used to restore a volume. + jsonPath: .status.readyToUse + name: ReadyToUse + type: boolean + - description: Represents the complete size of the snapshot in bytes + jsonPath: .status.restoreSize + name: RestoreSize + type: integer + - description: Determines whether this VolumeSnapshotContent and its physical snapshot on the underlying storage system should be deleted when its bound VolumeSnapshot is deleted. + jsonPath: .spec.deletionPolicy + name: DeletionPolicy + type: string + - description: Name of the CSI driver used to create the physical snapshot on the underlying storage system. + jsonPath: .spec.driver + name: Driver + type: string + - description: Name of the VolumeSnapshotClass to which this snapshot belongs. + jsonPath: .spec.volumeSnapshotClassName + name: VolumeSnapshotClass + type: string + - description: Name of the VolumeSnapshot object to which this VolumeSnapshotContent object is bound. + jsonPath: .spec.volumeSnapshotRef.name + name: VolumeSnapshot + type: string + - description: Namespace of the VolumeSnapshot object to which this VolumeSnapshotContent object is bound. + jsonPath: .spec.volumeSnapshotRef.namespace + name: VolumeSnapshotNamespace + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1beta1 + # This indicates the v1beta1 version of the custom resource is deprecated. + # API requests to this version receive a warning in the server response. + deprecated: true + # This overrides the default warning returned to clients making v1beta1 API requests. + deprecationWarning: "snapshot.storage.k8s.io/v1beta1 VolumeSnapshotContent is deprecated; use snapshot.storage.k8s.io/v1 VolumeSnapshotContent" + schema: + openAPIV3Schema: + description: VolumeSnapshotContent represents the actual "on-disk" snapshot object in the underlying storage system + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + spec: + description: spec defines properties of a VolumeSnapshotContent created by the underlying storage system. Required. + properties: + deletionPolicy: + description: deletionPolicy determines whether this VolumeSnapshotContent and its physical snapshot on the underlying storage system should be deleted when its bound VolumeSnapshot is deleted. Supported values are "Retain" and "Delete". "Retain" means that the VolumeSnapshotContent and its physical snapshot on underlying storage system are kept. "Delete" means that the VolumeSnapshotContent and its physical snapshot on underlying storage system are deleted. For dynamically provisioned snapshots, this field will automatically be filled in by the CSI snapshotter sidecar with the "DeletionPolicy" field defined in the corresponding VolumeSnapshotClass. For pre-existing snapshots, users MUST specify this field when creating the VolumeSnapshotContent object. Required. + enum: + - Delete + - Retain + type: string + driver: + description: driver is the name of the CSI driver used to create the physical snapshot on the underlying storage system. This MUST be the same as the name returned by the CSI GetPluginName() call for that driver. Required. + type: string + source: + description: source specifies whether the snapshot is (or should be) dynamically provisioned or already exists, and just requires a Kubernetes object representation. This field is immutable after creation. Required. + properties: + snapshotHandle: + description: snapshotHandle specifies the CSI "snapshot_id" of a pre-existing snapshot on the underlying storage system for which a Kubernetes object representation was (or should be) created. This field is immutable. + type: string + volumeHandle: + description: volumeHandle specifies the CSI "volume_id" of the volume from which a snapshot should be dynamically taken from. This field is immutable. + type: string + type: object + volumeSnapshotClassName: + description: name of the VolumeSnapshotClass from which this snapshot was (or will be) created. Note that after provisioning, the VolumeSnapshotClass may be deleted or recreated with different set of values, and as such, should not be referenced post-snapshot creation. + type: string + volumeSnapshotRef: + description: volumeSnapshotRef specifies the VolumeSnapshot object to which this VolumeSnapshotContent object is bound. VolumeSnapshot.Spec.VolumeSnapshotContentName field must reference to this VolumeSnapshotContent's name for the bidirectional binding to be valid. For a pre-existing VolumeSnapshotContent object, name and namespace of the VolumeSnapshot object MUST be provided for binding to happen. This field is immutable after creation. Required. + properties: + apiVersion: + description: API version of the referent. + type: string + fieldPath: + description: 'If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: "spec.containers{name}" (where "name" refers to the name of the container that triggered the event) or if no container name is specified "spec.containers[2]" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object. TODO: this design is not final and this field is subject to change in the future.' + type: string + kind: + description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + namespace: + description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/' + type: string + resourceVersion: + description: 'Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency' + type: string + uid: + description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids' + type: string + type: object + required: + - deletionPolicy + - driver + - source + - volumeSnapshotRef + type: object + status: + description: status represents the current information of a snapshot. + properties: + creationTime: + description: creationTime is the timestamp when the point-in-time snapshot is taken by the underlying storage system. In dynamic snapshot creation case, this field will be filled in by the CSI snapshotter sidecar with the "creation_time" value returned from CSI "CreateSnapshot" gRPC call. For a pre-existing snapshot, this field will be filled with the "creation_time" value returned from the CSI "ListSnapshots" gRPC call if the driver supports it. If not specified, it indicates the creation time is unknown. The format of this field is a Unix nanoseconds time encoded as an int64. On Unix, the command `date +%s%N` returns the current time in nanoseconds since 1970-01-01 00:00:00 UTC. + format: int64 + type: integer + error: + description: error is the last observed error during snapshot creation, if any. Upon success after retry, this error field will be cleared. + properties: + message: + description: 'message is a string detailing the encountered error during snapshot creation if specified. NOTE: message may be logged, and it should not contain sensitive information.' + type: string + time: + description: time is the timestamp when the error was encountered. + format: date-time + type: string + type: object + readyToUse: + description: readyToUse indicates if a snapshot is ready to be used to restore a volume. In dynamic snapshot creation case, this field will be filled in by the CSI snapshotter sidecar with the "ready_to_use" value returned from CSI "CreateSnapshot" gRPC call. For a pre-existing snapshot, this field will be filled with the "ready_to_use" value returned from the CSI "ListSnapshots" gRPC call if the driver supports it, otherwise, this field will be set to "True". If not specified, it means the readiness of a snapshot is unknown. + type: boolean + restoreSize: + description: restoreSize represents the complete size of the snapshot in bytes. In dynamic snapshot creation case, this field will be filled in by the CSI snapshotter sidecar with the "size_bytes" value returned from CSI "CreateSnapshot" gRPC call. For a pre-existing snapshot, this field will be filled with the "size_bytes" value returned from the CSI "ListSnapshots" gRPC call if the driver supports it. When restoring a volume from this snapshot, the size of the volume MUST NOT be smaller than the restoreSize if it is specified, otherwise the restoration will fail. If not specified, it indicates that the size is unknown. + format: int64 + minimum: 0 + type: integer + snapshotHandle: + description: snapshotHandle is the CSI "snapshot_id" of a snapshot on the underlying storage system. If not specified, it indicates that dynamic snapshot creation has either failed or it is still in progress. + type: string + type: object + required: + - spec + type: object + served: true + storage: false + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] +{{- end -}} diff --git a/charts/v1.11.0/azurefile-csi-driver/templates/csi-azurefile-controller.yaml b/charts/v1.11.0/azurefile-csi-driver/templates/csi-azurefile-controller.yaml new file mode 100644 index 0000000000..500910bad0 --- /dev/null +++ b/charts/v1.11.0/azurefile-csi-driver/templates/csi-azurefile-controller.yaml @@ -0,0 +1,205 @@ +kind: Deployment +apiVersion: apps/v1 +metadata: + name: {{ .Values.controller.name }} + namespace: {{ .Release.Namespace }} + labels: + app: {{ .Values.controller.name }} + {{- include "azurefile.labels" . | nindent 4 }} +spec: + replicas: {{ .Values.controller.replicas }} + selector: + matchLabels: + {{- include "azurefile.selectorLabels" . | nindent 6 }} + app: {{ .Values.controller.name }} + template: + metadata: + labels: + {{- include "azurefile.labels" . | nindent 8 }} + app: {{ .Values.controller.name }} + spec: + hostNetwork: {{ .Values.controller.hostNetwork }} + serviceAccountName: {{ .Values.serviceAccount.controller }} + nodeSelector: + kubernetes.io/os: linux + {{- if .Values.controller.runOnMaster}} + kubernetes.io/role: master + {{- end}} + priorityClassName: system-cluster-critical +{{- with .Values.controller.tolerations }} + tolerations: +{{ toYaml . | indent 8 }} +{{- end }} +{{- with .Values.controller.affinity }} + affinity: +{{ toYaml . | indent 8 }} +{{- end }} + {{- if .Values.imagePullSecrets }} + imagePullSecrets: +{{ toYaml .Values.imagePullSecrets | indent 8 }} + {{- end }} + containers: + - name: csi-provisioner +{{- if hasPrefix "/" .Values.image.csiProvisioner.repository }} + image: "{{ .Values.image.baseRepo }}{{ .Values.image.csiProvisioner.repository }}:{{ .Values.image.csiProvisioner.tag }}" +{{- else }} + image: "{{ .Values.image.csiProvisioner.repository }}:{{ .Values.image.csiProvisioner.tag }}" +{{- end }} + args: + - "-v=2" + - "--csi-address=$(ADDRESS)" + - "--leader-election" + - "--timeout=300s" + - "--extra-create-metadata=true" + env: + - name: ADDRESS + value: /csi/csi.sock + imagePullPolicy: {{ .Values.image.csiProvisioner.pullPolicy }} + volumeMounts: + - mountPath: /csi + name: socket-dir + resources: {{- toYaml .Values.controller.resources.csiProvisioner | nindent 12 }} + - name: csi-attacher +{{- if hasPrefix "/" .Values.image.csiAttacher.repository }} + image: "{{ .Values.image.baseRepo }}{{ .Values.image.csiAttacher.repository }}:{{ .Values.image.csiAttacher.tag }}" +{{- else }} + image: "{{ .Values.image.csiAttacher.repository }}:{{ .Values.image.csiAttacher.tag }}" +{{- end }} + args: + - "-v=2" + - "-csi-address=$(ADDRESS)" + - "-timeout=120s" + - "-leader-election" + env: + - name: ADDRESS + value: /csi/csi.sock + imagePullPolicy: {{ .Values.image.csiAttacher.pullPolicy }} + volumeMounts: + - mountPath: /csi + name: socket-dir + resources: {{- toYaml .Values.controller.resources.csiAttacher | nindent 12 }} + - name: csi-snapshotter +{{- if hasPrefix "/" .Values.snapshot.image.csiSnapshotter.repository }} + image: "{{ .Values.image.baseRepo }}{{ .Values.snapshot.image.csiSnapshotter.repository }}:{{ .Values.snapshot.image.csiSnapshotter.tag }}" +{{- else }} + image: "{{ .Values.snapshot.image.csiSnapshotter.repository }}:{{ .Values.snapshot.image.csiSnapshotter.tag }}" +{{- end }} + args: + - "-csi-address=$(ADDRESS)" + - "-leader-election" + - "-v=2" + env: + - name: ADDRESS + value: /csi/csi.sock + volumeMounts: + - name: socket-dir + mountPath: /csi + resources: {{- toYaml .Values.controller.resources.csiSnapshotter | nindent 12 }} + - name: csi-resizer +{{- if hasPrefix "/" .Values.image.csiResizer.repository }} + image: "{{ .Values.image.baseRepo }}{{ .Values.image.csiResizer.repository }}:{{ .Values.image.csiResizer.tag }}" +{{- else }} + image: "{{ .Values.image.csiResizer.repository }}:{{ .Values.image.csiResizer.tag }}" +{{- end }} + args: + - "-csi-address=$(ADDRESS)" + - "-v=2" + - "-leader-election" + - '-handle-volume-inuse-error=false' + - '-timeout=120s' + - '-feature-gates=RecoverVolumeExpansionFailure=true' + env: + - name: ADDRESS + value: /csi/csi.sock + imagePullPolicy: {{ .Values.image.csiResizer.pullPolicy }} + volumeMounts: + - name: socket-dir + mountPath: /csi + resources: {{- toYaml .Values.controller.resources.csiResizer | nindent 12 }} + - name: liveness-probe +{{- if hasPrefix "/" .Values.image.livenessProbe.repository }} + image: "{{ .Values.image.baseRepo }}{{ .Values.image.livenessProbe.repository }}:{{ .Values.image.livenessProbe.tag }}" +{{- else }} + image: "{{ .Values.image.livenessProbe.repository }}:{{ .Values.image.livenessProbe.tag }}" +{{- end }} + args: + - --csi-address=/csi/csi.sock + - --probe-timeout=3s + - --health-port={{ .Values.controller.livenessProbe.healthPort }} + - --v=2 + imagePullPolicy: {{ .Values.image.livenessProbe.pullPolicy }} + volumeMounts: + - name: socket-dir + mountPath: /csi + resources: {{- toYaml .Values.controller.resources.livenessProbe | nindent 12 }} + - name: azurefile +{{- if hasPrefix "/" .Values.image.azurefile.repository }} + image: "{{ .Values.image.baseRepo }}{{ .Values.image.azurefile.repository }}:{{ .Values.image.azurefile.tag }}" +{{- else }} + image: "{{ .Values.image.azurefile.repository }}:{{ .Values.image.azurefile.tag }}" +{{- end }} + args: + - "--v={{ .Values.controller.logLevel }}" + - "--endpoint=$(CSI_ENDPOINT)" + - "--metrics-address=0.0.0.0:{{ .Values.controller.metricsPort }}" + - "--kubeconfig={{ .Values.controller.kubeconfig }}" + - "--drivername={{ .Values.driver.name }}" + - "--cloud-config-secret-name={{ .Values.controller.cloudConfigSecretName }}" + - "--cloud-config-secret-namespace={{ .Values.controller.cloudConfigSecretNamespace }}" + - "--custom-user-agent={{ .Values.driver.customUserAgent }}" + - "--user-agent-suffix={{ .Values.driver.userAgentSuffix }}" + - "--allow-empty-cloud-config={{ .Values.controller.allowEmptyCloudConfig }}" + ports: + - containerPort: {{ .Values.controller.livenessProbe.healthPort }} + name: healthz + protocol: TCP + - containerPort: {{ .Values.controller.metricsPort }} + 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 + imagePullPolicy: {{ .Values.image.azurefile.pullPolicy }} + volumeMounts: + - mountPath: /csi + name: socket-dir + - mountPath: /etc/kubernetes/ + name: azure-cred + {{- if eq .Values.linux.distro "fedora" }} + - name: ssl + mountPath: /etc/ssl/certs + readOnly: true + - name: ssl-pki + mountPath: /etc/pki/ca-trust/extracted + readOnly: true + {{- end }} + resources: {{- toYaml .Values.controller.resources.azurefile | nindent 12 }} + volumes: + - name: socket-dir + emptyDir: {} + - name: azure-cred + hostPath: + path: /etc/kubernetes/ + type: DirectoryOrCreate + {{- if eq .Values.linux.distro "fedora" }} + - name: ssl + hostPath: + path: /etc/ssl/certs + - name: ssl-pki + hostPath: + path: /etc/pki/ca-trust/extracted + {{- end }} diff --git a/charts/v1.11.0/azurefile-csi-driver/templates/csi-azurefile-driver.yaml b/charts/v1.11.0/azurefile-csi-driver/templates/csi-azurefile-driver.yaml new file mode 100644 index 0000000000..b29daa265a --- /dev/null +++ b/charts/v1.11.0/azurefile-csi-driver/templates/csi-azurefile-driver.yaml @@ -0,0 +1,19 @@ +--- +apiVersion: storage.k8s.io/v1 +kind: CSIDriver +metadata: + name: {{ .Values.driver.name }} + labels: + {{- include "azurefile.labels" . | nindent 4 }} + annotations: + csiDriver: "{{ .Values.image.azurefile.tag }}" + snapshot: "{{ .Values.snapshot.image.csiSnapshotter.tag }}" +spec: + attachRequired: {{ .Values.controller.attachRequired }} + podInfoOnMount: true + volumeLifecycleModes: + - Persistent + - Ephemeral + {{- if .Values.feature.enableFSGroupPolicy}} + fsGroupPolicy: File + {{- end}} diff --git a/charts/v1.11.0/azurefile-csi-driver/templates/csi-azurefile-node-windows.yaml b/charts/v1.11.0/azurefile-csi-driver/templates/csi-azurefile-node-windows.yaml new file mode 100644 index 0000000000..cdc45e7691 --- /dev/null +++ b/charts/v1.11.0/azurefile-csi-driver/templates/csi-azurefile-node-windows.yaml @@ -0,0 +1,195 @@ +{{- if .Values.windows.enabled}} +kind: DaemonSet +apiVersion: apps/v1 +metadata: + name: {{ .Values.windows.dsName }} + namespace: {{ .Release.Namespace }} + labels: + app: {{ .Values.windows.dsName }} + {{- include "azurefile.labels" . | nindent 4 }} +spec: + updateStrategy: + rollingUpdate: + maxUnavailable: {{ .Values.node.maxUnavailable }} + type: RollingUpdate + selector: + matchLabels: + app: {{ .Values.windows.dsName }} + {{- include "azurefile.selectorLabels" . | nindent 6 }} + template: + metadata: + labels: + app: {{ .Values.windows.dsName }} + {{- include "azurefile.labels" . | nindent 8 }} + spec: + serviceAccountName: {{ .Values.serviceAccount.node }} +{{- with .Values.windows.tolerations }} + tolerations: +{{ toYaml . | indent 8 }} +{{- end }} + nodeSelector: + kubernetes.io/os: windows + affinity: + nodeAffinity: +{{ toYaml .Values.windows.nodeAffinity | indent 10 }} + priorityClassName: system-node-critical + {{- if .Values.imagePullSecrets }} + imagePullSecrets: +{{ toYaml .Values.imagePullSecrets | indent 8 }} + {{- end }} + containers: + - name: liveness-probe + volumeMounts: + - mountPath: C:\csi + name: plugin-dir +{{- if hasPrefix "/" .Values.image.livenessProbe.repository }} + image: "{{ .Values.image.baseRepo }}{{ .Values.image.livenessProbe.repository }}:{{ .Values.image.livenessProbe.tag }}" +{{- else }} + image: "{{ .Values.image.livenessProbe.repository }}:{{ .Values.image.livenessProbe.tag }}" +{{- end }} + args: + - "--csi-address=$(CSI_ENDPOINT)" + - "--probe-timeout=3s" + - "--health-port={{ .Values.node.livenessProbe.healthPort }}" + - "--v=2" + env: + - name: CSI_ENDPOINT + value: unix://C:\\csi\\csi.sock + imagePullPolicy: {{ .Values.image.livenessProbe.pullPolicy }} + resources: {{- toYaml .Values.windows.resources.livenessProbe | nindent 12 }} + - name: node-driver-registrar +{{- if hasPrefix "/" .Values.image.nodeDriverRegistrar.repository }} + image: "{{ .Values.image.baseRepo }}{{ .Values.image.nodeDriverRegistrar.repository }}:{{ .Values.image.nodeDriverRegistrar.tag }}" +{{- else }} + image: "{{ .Values.image.nodeDriverRegistrar.repository }}:{{ .Values.image.nodeDriverRegistrar.tag }}" +{{- end }} + args: + - "--csi-address=$(CSI_ENDPOINT)" + - "--kubelet-registration-path=$(DRIVER_REG_SOCK_PATH)" + - "--v=2" + livenessProbe: + exec: + command: + - /csi-node-driver-registrar.exe + - --kubelet-registration-path=$(DRIVER_REG_SOCK_PATH) + - --mode=kubelet-registration-probe + initialDelaySeconds: 60 + timeoutSeconds: 30 + env: + - name: CSI_ENDPOINT + value: unix://C:\\csi\\csi.sock + - name: DRIVER_REG_SOCK_PATH + value: C:\\var\\lib\\kubelet\\plugins\\{{ .Values.driver.name }}\\csi.sock + - name: KUBE_NODE_NAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName + imagePullPolicy: {{ .Values.image.nodeDriverRegistrar.pullPolicy }} + volumeMounts: + - name: kubelet-dir + mountPath: "C:\\var\\lib\\kubelet" + - name: plugin-dir + mountPath: C:\csi + - name: registration-dir + mountPath: C:\registration + resources: {{- toYaml .Values.windows.resources.nodeDriverRegistrar | nindent 12 }} + - name: azurefile +{{- if hasPrefix "/" .Values.image.azurefile.repository }} + image: "{{ .Values.image.baseRepo }}{{ .Values.image.azurefile.repository }}:{{ .Values.image.azurefile.tag }}" +{{- else }} + image: "{{ .Values.image.azurefile.repository }}:{{ .Values.image.azurefile.tag }}" +{{- end }} + args: + - "--v={{ .Values.node.logLevel }}" + - "--endpoint=$(CSI_ENDPOINT)" + - "--nodeid=$(KUBE_NODE_NAME)" + - "--metrics-address=0.0.0.0:{{ .Values.node.metricsPort }}" + - "--kubeconfig={{ .Values.windows.kubeconfig }}" + - "--drivername={{ .Values.driver.name }}" + - "--cloud-config-secret-name={{ .Values.node.cloudConfigSecretName }}" + - "--cloud-config-secret-namespace={{ .Values.node.cloudConfigSecretNamespace }}" + - "--custom-user-agent={{ .Values.driver.customUserAgent }}" + - "--user-agent-suffix={{ .Values.driver.userAgentSuffix }}" + - "--allow-empty-cloud-config={{ .Values.node.allowEmptyCloudConfig }}" + - "--enable-get-volume-stats={{ .Values.feature.enableGetVolumeStats }}" + ports: + - containerPort: {{ .Values.node.livenessProbe.healthPort }} + 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-windows + optional: true + - name: CSI_ENDPOINT + value: unix://C:\\csi\\csi.sock + - name: KUBE_NODE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: spec.nodeName + imagePullPolicy: {{ .Values.image.pullPolicy }} + volumeMounts: + - name: kubelet-dir + mountPath: "C:\\var\\lib\\kubelet" + - name: plugin-dir + mountPath: C:\csi + - name: azure-config + mountPath: C:\k + - name: csi-proxy-fs-pipe-v1 + mountPath: \\.\pipe\csi-proxy-filesystem-v1 + - name: csi-proxy-smb-pipe-v1 + mountPath: \\.\pipe\csi-proxy-smb-v1 + # these paths are still included for compatibility, they're used + # only if the node has still the beta version of the CSI proxy + - name: csi-proxy-fs-pipe-v1beta1 + mountPath: \\.\pipe\csi-proxy-filesystem-v1beta1 + - name: csi-proxy-smb-pipe-v1beta1 + mountPath: \\.\pipe\csi-proxy-smb-v1beta1 + resources: {{- toYaml .Values.windows.resources.azurefile | nindent 12 }} + volumes: + - name: csi-proxy-fs-pipe-v1 + hostPath: + path: \\.\pipe\csi-proxy-filesystem-v1 + type: "" + - name: csi-proxy-smb-pipe-v1 + hostPath: + path: \\.\pipe\csi-proxy-smb-v1 + type: "" + # these paths are still included for compatibility, they're used + # only if the node has still the beta version of the CSI proxy + - name: csi-proxy-fs-pipe-v1beta1 + hostPath: + path: \\.\pipe\csi-proxy-filesystem-v1beta1 + type: "" + - name: csi-proxy-smb-pipe-v1beta1 + hostPath: + path: \\.\pipe\csi-proxy-smb-v1beta1 + type: "" + - name: registration-dir + hostPath: + path: {{ .Values.windows.kubelet }}\plugins_registry\ + type: Directory + - name: kubelet-dir + hostPath: + path: {{ .Values.windows.kubelet }}\ + type: Directory + - name: plugin-dir + hostPath: + path: {{ .Values.windows.kubelet }}\plugins\{{ .Values.driver.name }}\ + type: DirectoryOrCreate + - name: azure-config + hostPath: + path: C:\k + type: Directory +{{- end -}} diff --git a/charts/v1.11.0/azurefile-csi-driver/templates/csi-azurefile-node.yaml b/charts/v1.11.0/azurefile-csi-driver/templates/csi-azurefile-node.yaml new file mode 100644 index 0000000000..3f357c77ba --- /dev/null +++ b/charts/v1.11.0/azurefile-csi-driver/templates/csi-azurefile-node.yaml @@ -0,0 +1,186 @@ +{{- if .Values.linux.enabled}} +kind: DaemonSet +apiVersion: apps/v1 +metadata: + name: {{ .Values.linux.dsName }} + namespace: {{ .Release.Namespace }} + labels: + app: {{ .Values.linux.dsName }} + {{- include "azurefile.labels" . | nindent 4 }} +spec: + updateStrategy: + rollingUpdate: + maxUnavailable: {{ .Values.node.maxUnavailable }} + type: RollingUpdate + selector: + matchLabels: + app: {{ .Values.linux.dsName }} + {{- include "azurefile.selectorLabels" . | nindent 6 }} + template: + metadata: + labels: + app: {{ .Values.linux.dsName }} + {{- include "azurefile.labels" . | nindent 8 }} + spec: + hostNetwork: true + dnsPolicy: {{ .Values.linux.dnsPolicy }} + serviceAccountName: {{ .Values.serviceAccount.node }} + nodeSelector: + kubernetes.io/os: linux + affinity: + nodeAffinity: +{{ toYaml .Values.linux.nodeAffinity | indent 10 }} + priorityClassName: system-node-critical +{{- with .Values.linux.tolerations }} + tolerations: +{{ toYaml . | indent 8 }} +{{- end }} + {{- if .Values.imagePullSecrets }} + imagePullSecrets: +{{ toYaml .Values.imagePullSecrets | indent 8 }} + {{- end }} + containers: + - name: liveness-probe + volumeMounts: + - mountPath: /csi + name: socket-dir +{{- if hasPrefix "/" .Values.image.livenessProbe.repository }} + image: "{{ .Values.image.baseRepo }}{{ .Values.image.livenessProbe.repository }}:{{ .Values.image.livenessProbe.tag }}" +{{- else }} + image: "{{ .Values.image.livenessProbe.repository }}:{{ .Values.image.livenessProbe.tag }}" +{{- end }} + args: + - --csi-address=/csi/csi.sock + - --probe-timeout=3s + - --health-port={{ .Values.node.livenessProbe.healthPort }} + - --v=2 + imagePullPolicy: {{ .Values.image.livenessProbe.pullPolicy }} + resources: {{- toYaml .Values.linux.resources.livenessProbe | nindent 12 }} + - name: node-driver-registrar +{{- if hasPrefix "/" .Values.image.nodeDriverRegistrar.repository }} + image: "{{ .Values.image.baseRepo }}{{ .Values.image.nodeDriverRegistrar.repository }}:{{ .Values.image.nodeDriverRegistrar.tag }}" +{{- else }} + image: "{{ .Values.image.nodeDriverRegistrar.repository }}:{{ .Values.image.nodeDriverRegistrar.tag }}" +{{- end }} + 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: {{ .Values.linux.kubelet }}/plugins/{{ .Values.driver.name }}/csi.sock + imagePullPolicy: {{ .Values.image.nodeDriverRegistrar.pullPolicy }} + volumeMounts: + - name: socket-dir + mountPath: /csi + - name: registration-dir + mountPath: /registration + resources: {{- toYaml .Values.linux.resources.nodeDriverRegistrar | nindent 12 }} + - name: azurefile +{{- if hasPrefix "/" .Values.image.azurefile.repository }} + image: "{{ .Values.image.baseRepo }}{{ .Values.image.azurefile.repository }}:{{ .Values.image.azurefile.tag }}" +{{- else }} + image: "{{ .Values.image.azurefile.repository }}:{{ .Values.image.azurefile.tag }}" +{{- end }} + args: + - "--v={{ .Values.node.logLevel }}" + - "--endpoint=$(CSI_ENDPOINT)" + - "--nodeid=$(KUBE_NODE_NAME)" + - "--metrics-address=0.0.0.0:{{ .Values.node.metricsPort }}" + - "--kubeconfig={{ .Values.linux.kubeconfig }}" + - "--drivername={{ .Values.driver.name }}" + - "--cloud-config-secret-name={{ .Values.node.cloudConfigSecretName }}" + - "--cloud-config-secret-namespace={{ .Values.node.cloudConfigSecretNamespace }}" + - "--custom-user-agent={{ .Values.driver.customUserAgent }}" + - "--user-agent-suffix={{ .Values.driver.userAgentSuffix }}" + - "--allow-empty-cloud-config={{ .Values.node.allowEmptyCloudConfig }}" + - "--enable-get-volume-stats={{ .Values.feature.enableGetVolumeStats }}" + - "--mount-permissions={{ .Values.linux.mountPermissions }}" + ports: + - containerPort: {{ .Values.node.livenessProbe.healthPort }} + 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: KUBE_NODE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: spec.nodeName + imagePullPolicy: {{ .Values.image.azurefile.pullPolicy }} + securityContext: + privileged: true + volumeMounts: + - mountPath: /csi + name: socket-dir + - mountPath: {{ .Values.linux.kubelet }}/ + mountPropagation: Bidirectional + name: mountpoint-dir + - mountPath: /etc/kubernetes/ + name: azure-cred + - mountPath: /dev + name: device-dir + {{- if eq .Values.linux.distro "fedora" }} + - name: ssl + mountPath: /etc/ssl/certs + readOnly: true + - name: ssl-pki + mountPath: /etc/pki/ca-trust/extracted + readOnly: true + {{- end }} + resources: {{- toYaml .Values.linux.resources.azurefile | nindent 12 }} + volumes: + - hostPath: + path: {{ .Values.linux.kubelet }}/plugins/{{ .Values.driver.name }} + type: DirectoryOrCreate + name: socket-dir + - hostPath: + path: {{ .Values.linux.kubelet }}/ + type: DirectoryOrCreate + name: mountpoint-dir + - hostPath: + path: {{ .Values.linux.kubelet }}/plugins_registry/ + type: DirectoryOrCreate + name: registration-dir + - hostPath: + path: /etc/kubernetes/ + type: DirectoryOrCreate + name: azure-cred + - hostPath: + path: /dev + type: Directory + name: device-dir + {{- if eq .Values.linux.distro "fedora" }} + - name: ssl + hostPath: + path: /etc/ssl/certs + - name: ssl-pki + hostPath: + path: /etc/pki/ca-trust/extracted + {{- end }} +{{- end -}} diff --git a/charts/v1.11.0/azurefile-csi-driver/templates/csi-snapshot-controller.yaml b/charts/v1.11.0/azurefile-csi-driver/templates/csi-snapshot-controller.yaml new file mode 100644 index 0000000000..0b7efae196 --- /dev/null +++ b/charts/v1.11.0/azurefile-csi-driver/templates/csi-snapshot-controller.yaml @@ -0,0 +1,50 @@ +{{- if .Values.snapshot.enabled -}} +kind: Deployment +apiVersion: apps/v1 +metadata: + name: {{ .Values.snapshot.snapshotController.name}} + namespace: {{ .Release.Namespace }} + labels: + app: {{ .Values.snapshot.snapshotController.name}} + {{- include "azurefile.labels" . | nindent 4 }} +spec: + replicas: {{ .Values.snapshot.snapshotController.replicas }} + selector: + matchLabels: + app: {{ .Values.snapshot.snapshotController.name}} + {{- include "azurefile.selectorLabels" . | nindent 6 }} + template: + metadata: + labels: + app: {{ .Values.snapshot.snapshotController.name}} + {{- include "azurefile.labels" . | nindent 8 }} + spec: + serviceAccountName: {{ .Values.serviceAccount.snapshotController }} + nodeSelector: + kubernetes.io/os: linux + priorityClassName: system-cluster-critical +{{- with .Values.controller.tolerations }} + tolerations: +{{ toYaml . | indent 8 }} +{{- end }} +{{- with .Values.controller.affinity }} + affinity: +{{ toYaml . | indent 8 }} +{{- end }} + {{- if .Values.imagePullSecrets }} + imagePullSecrets: +{{ toYaml .Values.imagePullSecrets | indent 8 }} + {{- end }} + containers: + - name: {{ .Values.snapshot.snapshotController.name}} +{{- if hasPrefix "/" .Values.snapshot.image.csiSnapshotController.repository }} + image: "{{ .Values.image.baseRepo }}{{ .Values.snapshot.image.csiSnapshotController.repository }}:{{ .Values.snapshot.image.csiSnapshotController.tag }}" +{{- else }} + image: "{{ .Values.snapshot.image.csiSnapshotController.repository }}:{{ .Values.snapshot.image.csiSnapshotController.tag }}" +{{- end }} + args: + - "--v=2" + - "--leader-election=true" + resources: {{- toYaml .Values.snapshot.snapshotController.resources | nindent 12 }} + imagePullPolicy: {{ .Values.snapshot.image.csiSnapshotController.pullPolicy }} +{{- end -}} diff --git a/charts/v1.11.0/azurefile-csi-driver/templates/rbac-csi-azurefile-controller.yaml b/charts/v1.11.0/azurefile-csi-driver/templates/rbac-csi-azurefile-controller.yaml new file mode 100644 index 0000000000..597f551b42 --- /dev/null +++ b/charts/v1.11.0/azurefile-csi-driver/templates/rbac-csi-azurefile-controller.yaml @@ -0,0 +1,207 @@ +{{- if .Values.rbac.create -}} +kind: ClusterRole +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: {{ .Values.rbac.name }}-external-provisioner-role + labels: + {{- include "azurefile.labels" . | nindent 4 }} +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: ["snapshot.storage.k8s.io"] + resources: ["volumesnapshots"] + verbs: ["get", "list"] + - apiGroups: ["snapshot.storage.k8s.io"] + resources: ["volumesnapshotcontents"] + verbs: ["get", "list"] + - apiGroups: ["coordination.k8s.io"] + resources: ["leases"] + verbs: ["get", "watch", "list", "delete", "update", "create", "patch"] +--- + +kind: ClusterRoleBinding +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: {{ .Values.rbac.name }}-csi-provisioner-binding + labels: + {{- include "azurefile.labels" . | nindent 4 }} +subjects: + - kind: ServiceAccount + name: {{ .Values.serviceAccount.controller }} + namespace: {{ .Release.Namespace }} +roleRef: + kind: ClusterRole + name: {{ .Values.rbac.name }}-external-provisioner-role + apiGroup: rbac.authorization.k8s.io + +--- + +kind: ClusterRole +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: {{ .Values.rbac.name }}-external-attacher-role + labels: + {{- include "azurefile.labels" . | nindent 4 }} +rules: + - apiGroups: [""] + resources: ["persistentvolumes"] + verbs: ["get", "list", "watch", "update"] + - apiGroups: [""] + resources: ["nodes"] + verbs: ["get", "list", "watch"] + - apiGroups: ["csi.storage.k8s.io"] + resources: ["csinodeinfos"] + verbs: ["get", "list", "watch"] + - apiGroups: ["storage.k8s.io"] + resources: ["volumeattachments"] + verbs: ["get", "list", "watch", "update", "patch"] + - apiGroups: ["storage.k8s.io"] + resources: ["volumeattachments/status"] + verbs: ["get", "list", "watch", "update", "patch"] + - apiGroups: ["coordination.k8s.io"] + resources: ["leases"] + verbs: ["get", "watch", "list", "delete", "update", "create", "patch"] +--- + +kind: ClusterRoleBinding +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: {{ .Values.rbac.name }}-csi-attacher-binding + labels: + {{- include "azurefile.labels" . | nindent 4 }} +subjects: + - kind: ServiceAccount + name: {{ .Values.serviceAccount.controller }} + namespace: {{ .Release.Namespace }} +roleRef: + kind: ClusterRole + name: {{ .Values.rbac.name }}-external-attacher-role + apiGroup: rbac.authorization.k8s.io + +--- + +kind: ClusterRole +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: {{ .Values.rbac.name }}-external-snapshotter-role + labels: + {{- include "azurefile.labels" . | nindent 4 }} +rules: + - apiGroups: [""] + resources: ["events"] + verbs: ["list", "watch", "create", "update", "patch"] + - apiGroups: [""] + resources: ["secrets"] + verbs: ["get", "list"] + - apiGroups: ["snapshot.storage.k8s.io"] + resources: ["volumesnapshotclasses"] + verbs: ["get", "list", "watch"] + - apiGroups: ["snapshot.storage.k8s.io"] + resources: ["volumesnapshotcontents"] + verbs: ["create", "get", "list", "watch", "update", "delete", "patch"] + - apiGroups: ["snapshot.storage.k8s.io"] + resources: ["volumesnapshotcontents/status"] + verbs: ["update", "patch"] + - apiGroups: ["coordination.k8s.io"] + resources: ["leases"] + verbs: ["get", "watch", "list", "delete", "update", "create", "patch"] +--- + +kind: ClusterRoleBinding +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: {{ .Values.rbac.name }}-csi-snapshotter-binding + labels: + {{- include "azurefile.labels" . | nindent 4 }} +subjects: + - kind: ServiceAccount + name: {{ .Values.serviceAccount.controller }} + namespace: {{ .Release.Namespace }} +roleRef: + kind: ClusterRole + name: {{ .Values.rbac.name }}-external-snapshotter-role + apiGroup: rbac.authorization.k8s.io + +--- +kind: ClusterRole +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: {{ .Values.rbac.name }}-external-resizer-role + labels: + {{- include "azurefile.labels" . | nindent 4 }} +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", "watch", "list", "delete", "update", "create", "patch"] +--- +kind: ClusterRoleBinding +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: {{ .Values.rbac.name }}-csi-resizer-role + labels: + {{- include "azurefile.labels" . | nindent 4 }} +subjects: + - kind: ServiceAccount + name: {{ .Values.serviceAccount.controller }} + namespace: {{ .Release.Namespace }} +roleRef: + kind: ClusterRole + name: {{ .Values.rbac.name }}-external-resizer-role + apiGroup: rbac.authorization.k8s.io + +--- +kind: ClusterRole +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: csi-{{ .Values.rbac.name }}-controller-secret-role + labels: + {{- include "azurefile.labels" . | nindent 4 }} +rules: + - apiGroups: [""] + resources: ["secrets"] + verbs: ["get", "list", "create"] + +--- +kind: ClusterRoleBinding +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: csi-{{ .Values.rbac.name }}-controller-secret-binding + labels: + {{- include "azurefile.labels" . | nindent 4 }} +subjects: + - kind: ServiceAccount + name: {{ .Values.serviceAccount.controller }} + namespace: {{ .Release.Namespace }} +roleRef: + kind: ClusterRole + name: csi-{{ .Values.rbac.name }}-controller-secret-role + apiGroup: rbac.authorization.k8s.io +{{ end }} diff --git a/charts/v1.11.0/azurefile-csi-driver/templates/rbac-csi-azurefile-node.yaml b/charts/v1.11.0/azurefile-csi-driver/templates/rbac-csi-azurefile-node.yaml new file mode 100644 index 0000000000..485556144a --- /dev/null +++ b/charts/v1.11.0/azurefile-csi-driver/templates/rbac-csi-azurefile-node.yaml @@ -0,0 +1,29 @@ +{{- if .Values.rbac.create -}} +--- +kind: ClusterRole +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: csi-{{ .Values.rbac.name }}-node-secret-role + labels: + {{- include "azurefile.labels" . | nindent 4 }} +rules: + - apiGroups: [""] + resources: ["secrets"] + verbs: ["get", "list"] + +--- +kind: ClusterRoleBinding +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: csi-{{ .Values.rbac.name }}-node-secret-binding + labels: + {{- include "azurefile.labels" . | nindent 4 }} +subjects: + - kind: ServiceAccount + name: {{ .Values.serviceAccount.node }} + namespace: {{ .Release.Namespace }} +roleRef: + kind: ClusterRole + name: csi-{{ .Values.rbac.name }}-node-secret-role + apiGroup: rbac.authorization.k8s.io +{{ end }} diff --git a/charts/v1.11.0/azurefile-csi-driver/templates/rbac-csi-snapshot-controller.yaml b/charts/v1.11.0/azurefile-csi-driver/templates/rbac-csi-snapshot-controller.yaml new file mode 100644 index 0000000000..0cff1ff01f --- /dev/null +++ b/charts/v1.11.0/azurefile-csi-driver/templates/rbac-csi-snapshot-controller.yaml @@ -0,0 +1,80 @@ +{{- if and .Values.snapshot.enabled .Values.rbac.create -}} +kind: ClusterRole +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: csi-snapshot-controller-role + labels: + {{- include "azurefile.labels" . | nindent 4 }} +rules: + - apiGroups: [""] + resources: ["persistentvolumes"] + verbs: ["get", "list", "watch"] + - apiGroups: [""] + resources: ["persistentvolumeclaims"] + verbs: ["get", "list", "watch", "update"] + - apiGroups: ["storage.k8s.io"] + resources: ["storageclasses"] + verbs: ["get", "list", "watch"] + - apiGroups: [""] + resources: ["events"] + verbs: ["list", "watch", "create", "update", "patch"] + - apiGroups: ["snapshot.storage.k8s.io"] + resources: ["volumesnapshotclasses"] + verbs: ["get", "list", "watch"] + - apiGroups: ["snapshot.storage.k8s.io"] + resources: ["volumesnapshotcontents"] + verbs: ["create", "get", "list", "watch", "update", "delete", "patch"] + - apiGroups: ["snapshot.storage.k8s.io"] + resources: ["volumesnapshotcontents/status"] + verbs: ["patch"] + - apiGroups: ["snapshot.storage.k8s.io"] + resources: ["volumesnapshots"] + verbs: ["get", "list", "watch", "update", "patch"] + - apiGroups: ["snapshot.storage.k8s.io"] + resources: ["volumesnapshots/status"] + verbs: ["update", "patch"] + +--- +kind: ClusterRoleBinding +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: csi-snapshot-controller-binding + labels: + {{- include "azurefile.labels" . | nindent 4 }} +subjects: + - kind: ServiceAccount + name: {{ .Values.serviceAccount.snapshotController }} + namespace: {{ .Release.Namespace }} +roleRef: + kind: ClusterRole + name: csi-snapshot-controller-role + apiGroup: rbac.authorization.k8s.io + +--- +kind: ClusterRole +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: csi-snapshot-controller-leaderelection-role + labels: + {{- include "azurefile.labels" . | nindent 4 }} +rules: + - apiGroups: ["coordination.k8s.io"] + resources: ["leases"] + verbs: ["get", "watch", "list", "delete", "update", "create", "patch"] + +--- +kind: ClusterRoleBinding +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: csi-snapshot-controller-leaderelection-binding + labels: + {{- include "azurefile.labels" . | nindent 4 }} +subjects: + - kind: ServiceAccount + name: {{ .Values.serviceAccount.snapshotController }} + namespace: {{ .Release.Namespace }} +roleRef: + kind: ClusterRole + name: csi-snapshot-controller-leaderelection-role + apiGroup: rbac.authorization.k8s.io +{{ end }} diff --git a/charts/v1.11.0/azurefile-csi-driver/templates/serviceaccount-csi-azurefile-controller.yaml b/charts/v1.11.0/azurefile-csi-driver/templates/serviceaccount-csi-azurefile-controller.yaml new file mode 100644 index 0000000000..66e0726acb --- /dev/null +++ b/charts/v1.11.0/azurefile-csi-driver/templates/serviceaccount-csi-azurefile-controller.yaml @@ -0,0 +1,9 @@ +{{- if .Values.serviceAccount.create -}} +apiVersion: v1 +kind: ServiceAccount +metadata: + name: {{ .Values.serviceAccount.controller }} + namespace: {{ .Release.Namespace }} + labels: + {{- include "azurefile.labels" . | nindent 4 }} +{{- end -}} diff --git a/charts/v1.11.0/azurefile-csi-driver/templates/serviceaccount-csi-azurefile-node.yaml b/charts/v1.11.0/azurefile-csi-driver/templates/serviceaccount-csi-azurefile-node.yaml new file mode 100644 index 0000000000..697b8db390 --- /dev/null +++ b/charts/v1.11.0/azurefile-csi-driver/templates/serviceaccount-csi-azurefile-node.yaml @@ -0,0 +1,9 @@ +{{- if .Values.serviceAccount.create -}} +apiVersion: v1 +kind: ServiceAccount +metadata: + name: {{ .Values.serviceAccount.node }} + namespace: {{ .Release.Namespace }} + labels: + {{- include "azurefile.labels" . | nindent 4 }} +{{- end -}} diff --git a/charts/v1.11.0/azurefile-csi-driver/templates/serviceaccount-csi-snapshot-controller.yaml b/charts/v1.11.0/azurefile-csi-driver/templates/serviceaccount-csi-snapshot-controller.yaml new file mode 100644 index 0000000000..e77ef8f991 --- /dev/null +++ b/charts/v1.11.0/azurefile-csi-driver/templates/serviceaccount-csi-snapshot-controller.yaml @@ -0,0 +1,9 @@ +{{- if and .Values.snapshot.enabled .Values.serviceAccount.create -}} +apiVersion: v1 +kind: ServiceAccount +metadata: + name: {{ .Values.serviceAccount.snapshotController }} + namespace: {{ .Release.Namespace }} + labels: + {{- include "azurefile.labels" . | nindent 4 }} +{{- end -}} diff --git a/charts/v1.11.0/azurefile-csi-driver/values.yaml b/charts/v1.11.0/azurefile-csi-driver/values.yaml new file mode 100644 index 0000000000..7f4b1fad64 --- /dev/null +++ b/charts/v1.11.0/azurefile-csi-driver/values.yaml @@ -0,0 +1,225 @@ +image: + baseRepo: mcr.microsoft.com + azurefile: + repository: /k8s/csi/azurefile-csi + tag: v1.11.0 + pullPolicy: IfNotPresent + csiProvisioner: + repository: /oss/kubernetes-csi/csi-provisioner + tag: v3.1.0 + pullPolicy: IfNotPresent + csiAttacher: + repository: /oss/kubernetes-csi/csi-attacher + tag: v3.4.0 + pullPolicy: IfNotPresent + csiResizer: + repository: /oss/kubernetes-csi/csi-resizer + tag: v1.4.0 + pullPolicy: IfNotPresent + livenessProbe: + repository: /oss/kubernetes-csi/livenessprobe + tag: v2.5.0 + pullPolicy: IfNotPresent + nodeDriverRegistrar: + repository: /oss/kubernetes-csi/csi-node-driver-registrar + tag: v2.4.0 + pullPolicy: IfNotPresent + +## Reference to one or more secrets to be used when pulling images +## ref: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/ +imagePullSecrets: [] +# - name: myRegistryKeySecretName + +# -- Custom labels to add into metadata +customLabels: {} + # k8s-app: azurefile-csi-driver + +serviceAccount: + create: true # When true, service accounts will be created for you. Set to false if you want to use your own. + controller: csi-azurefile-controller-sa # Name of Service Account to be created or used + node: csi-azurefile-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 + name: azurefile + +controller: + name: csi-azurefile-controller + cloudConfigSecretName: azure-cloud-provider + cloudConfigSecretNamespace: kube-system + allowEmptyCloudConfig: true + replicas: 2 + hostNetwork: true # this setting could be disabled if controller does not depend on MSI setting + metricsPort: 29614 + livenessProbe: + healthPort: 29612 + runOnMaster: false + attachRequired: false + logLevel: 5 + resources: + csiProvisioner: + limits: + cpu: 1 + memory: 500Mi + requests: + cpu: 10m + memory: 20Mi + csiAttacher: + limits: + cpu: 1 + memory: 500Mi + requests: + cpu: 10m + memory: 20Mi + csiResizer: + limits: + cpu: 1 + memory: 500Mi + requests: + cpu: 10m + memory: 20Mi + csiSnapshotter: + limits: + cpu: 1 + memory: 100Mi + requests: + cpu: 10m + memory: 20Mi + livenessProbe: + limits: + cpu: 1 + memory: 100Mi + requests: + cpu: 10m + memory: 20Mi + azurefile: + limits: + cpu: 1 + memory: 200Mi + requests: + cpu: 10m + memory: 20Mi + kubeconfig: "" + tolerations: + - key: "node-role.kubernetes.io/master" + operator: "Exists" + effect: "NoSchedule" + - key: "node-role.kubernetes.io/controlplane" + operator: "Exists" + effect: "NoSchedule" + +node: + cloudConfigSecretName: azure-cloud-provider + cloudConfigSecretNamespace: kube-system + allowEmptyCloudConfig: true + metricsPort: 29615 + livenessProbe: + healthPort: 29613 + logLevel: 5 + +snapshot: + enabled: false + image: + csiSnapshotter: + repository: /oss/kubernetes-csi/csi-snapshotter + tag: v5.0.1 + pullPolicy: IfNotPresent + csiSnapshotController: + repository: /oss/kubernetes-csi/snapshot-controller + tag: v5.0.1 + pullPolicy: IfNotPresent + snapshotController: + name: csi-snapshot-controller + replicas: 2 + resources: + limits: + cpu: 1 + memory: 100Mi + requests: + cpu: 10m + memory: 20Mi + +feature: + enableFSGroupPolicy: true + enableGetVolumeStats: true + +driver: + name: file.csi.azure.com + customUserAgent: "" + userAgentSuffix: "OSS-helm" + +linux: + enabled: true + dsName: csi-azurefile-node # daemonset name + dnsPolicy: Default # available values: Default, ClusterFirst, ClusterFirstWithHostNet, None + kubelet: /var/lib/kubelet + kubeconfig: "" + distro: debian # available values: debian, fedora + mountPermissions: 0777 + resources: + livenessProbe: + limits: + memory: 100Mi + requests: + cpu: 10m + memory: 20Mi + nodeDriverRegistrar: + limits: + memory: 100Mi + requests: + cpu: 10m + memory: 20Mi + azurefile: + limits: + memory: 300Mi + requests: + cpu: 10m + memory: 20Mi + tolerations: + - operator: "Exists" + nodeAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + nodeSelectorTerms: + - matchExpressions: + - key: type + operator: NotIn + values: + - virtual-kubelet + +windows: + enabled: true + dsName: csi-azurefile-node-win # daemonset name + kubelet: 'C:\var\lib\kubelet' + kubeconfig: 'C:\\k\\config' + resources: + livenessProbe: + limits: + memory: 200Mi + requests: + cpu: 10m + memory: 20Mi + nodeDriverRegistrar: + limits: + memory: 200Mi + requests: + cpu: 10m + memory: 20Mi + azurefile: + limits: + memory: 400Mi + requests: + cpu: 10m + memory: 20Mi + tolerations: + - key: "node.kubernetes.io/os" + operator: "Exists" + effect: "NoSchedule" + nodeAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + nodeSelectorTerms: + - matchExpressions: + - key: type + operator: NotIn + values: + - virtual-kubelet diff --git a/deploy/csi-azurefile-controller.yaml b/deploy/csi-azurefile-controller.yaml index 727be0479f..88b7ff610d 100644 --- a/deploy/csi-azurefile-controller.yaml +++ b/deploy/csi-azurefile-controller.yaml @@ -122,7 +122,7 @@ spec: cpu: 10m memory: 20Mi - name: azurefile - image: mcr.microsoft.com/k8s/csi/azurefile-csi:latest + image: mcr.microsoft.com/k8s/csi/azurefile-csi:v1.11.0 imagePullPolicy: IfNotPresent args: - "--v=5" diff --git a/deploy/csi-azurefile-node-windows.yaml b/deploy/csi-azurefile-node-windows.yaml index feb34ef579..6bfce150d1 100644 --- a/deploy/csi-azurefile-node-windows.yaml +++ b/deploy/csi-azurefile-node-windows.yaml @@ -91,7 +91,7 @@ spec: cpu: 10m memory: 20Mi - name: azurefile - image: mcr.microsoft.com/k8s/csi/azurefile-csi:latest + image: mcr.microsoft.com/k8s/csi/azurefile-csi:v1.11.0 imagePullPolicy: IfNotPresent args: - --v=5 diff --git a/deploy/csi-azurefile-node.yaml b/deploy/csi-azurefile-node.yaml index c37a68409b..572c56755e 100644 --- a/deploy/csi-azurefile-node.yaml +++ b/deploy/csi-azurefile-node.yaml @@ -82,7 +82,7 @@ spec: cpu: 10m memory: 20Mi - name: azurefile - image: mcr.microsoft.com/k8s/csi/azurefile-csi:latest + image: mcr.microsoft.com/k8s/csi/azurefile-csi:v1.11.0 imagePullPolicy: IfNotPresent args: - "--v=5" diff --git a/deploy/v1.11.0/crd-csi-snapshot.yaml b/deploy/v1.11.0/crd-csi-snapshot.yaml new file mode 100644 index 0000000000..18d97e6b7c --- /dev/null +++ b/deploy/v1.11.0/crd-csi-snapshot.yaml @@ -0,0 +1,659 @@ +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.4.0 + api-approved.kubernetes.io: "https://github.com/kubernetes-csi/external-snapshotter/pull/419" + creationTimestamp: null + name: volumesnapshots.snapshot.storage.k8s.io +spec: + group: snapshot.storage.k8s.io + names: + kind: VolumeSnapshot + listKind: VolumeSnapshotList + plural: volumesnapshots + shortNames: + - vs + singular: volumesnapshot + scope: Namespaced + versions: + - additionalPrinterColumns: + - description: Indicates if the snapshot is ready to be used to restore a volume. + jsonPath: .status.readyToUse + name: ReadyToUse + type: boolean + - description: If a new snapshot needs to be created, this contains the name of the source PVC from which this snapshot was (or will be) created. + jsonPath: .spec.source.persistentVolumeClaimName + name: SourcePVC + type: string + - description: If a snapshot already exists, this contains the name of the existing VolumeSnapshotContent object representing the existing snapshot. + jsonPath: .spec.source.volumeSnapshotContentName + name: SourceSnapshotContent + type: string + - description: Represents the minimum size of volume required to rehydrate from this snapshot. + jsonPath: .status.restoreSize + name: RestoreSize + type: string + - description: The name of the VolumeSnapshotClass requested by the VolumeSnapshot. + jsonPath: .spec.volumeSnapshotClassName + name: SnapshotClass + type: string + - description: Name of the VolumeSnapshotContent object to which the VolumeSnapshot object intends to bind to. Please note that verification of binding actually requires checking both VolumeSnapshot and VolumeSnapshotContent to ensure both are pointing at each other. Binding MUST be verified prior to usage of this object. + jsonPath: .status.boundVolumeSnapshotContentName + name: SnapshotContent + type: string + - description: Timestamp when the point-in-time snapshot was taken by the underlying storage system. + jsonPath: .status.creationTime + name: CreationTime + type: date + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1 + schema: + openAPIV3Schema: + description: VolumeSnapshot is a user's request for either creating a point-in-time snapshot of a persistent volume, or binding to a pre-existing snapshot. + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + spec: + description: 'spec defines the desired characteristics of a snapshot requested by a user. More info: https://kubernetes.io/docs/concepts/storage/volume-snapshots#volumesnapshots Required.' + properties: + source: + description: source specifies where a snapshot will be created from. This field is immutable after creation. Required. + properties: + persistentVolumeClaimName: + description: persistentVolumeClaimName specifies the name of the PersistentVolumeClaim object representing the volume from which a snapshot should be created. This PVC is assumed to be in the same namespace as the VolumeSnapshot object. This field should be set if the snapshot does not exists, and needs to be created. This field is immutable. + type: string + volumeSnapshotContentName: + description: volumeSnapshotContentName specifies the name of a pre-existing VolumeSnapshotContent object representing an existing volume snapshot. This field should be set if the snapshot already exists and only needs a representation in Kubernetes. This field is immutable. + type: string + type: object + oneOf: + - required: ["persistentVolumeClaimName"] + - required: ["volumeSnapshotContentName"] + volumeSnapshotClassName: + description: 'VolumeSnapshotClassName is the name of the VolumeSnapshotClass requested by the VolumeSnapshot. VolumeSnapshotClassName may be left nil to indicate that the default SnapshotClass should be used. A given cluster may have multiple default Volume SnapshotClasses: one default per CSI Driver. If a VolumeSnapshot does not specify a SnapshotClass, VolumeSnapshotSource will be checked to figure out what the associated CSI Driver is, and the default VolumeSnapshotClass associated with that CSI Driver will be used. If more than one VolumeSnapshotClass exist for a given CSI Driver and more than one have been marked as default, CreateSnapshot will fail and generate an event. Empty string is not allowed for this field.' + type: string + required: + - source + type: object + status: + description: status represents the current information of a snapshot. Consumers must verify binding between VolumeSnapshot and VolumeSnapshotContent objects is successful (by validating that both VolumeSnapshot and VolumeSnapshotContent point at each other) before using this object. + properties: + boundVolumeSnapshotContentName: + description: 'boundVolumeSnapshotContentName is the name of the VolumeSnapshotContent object to which this VolumeSnapshot object intends to bind to. If not specified, it indicates that the VolumeSnapshot object has not been successfully bound to a VolumeSnapshotContent object yet. NOTE: To avoid possible security issues, consumers must verify binding between VolumeSnapshot and VolumeSnapshotContent objects is successful (by validating that both VolumeSnapshot and VolumeSnapshotContent point at each other) before using this object.' + type: string + creationTime: + description: creationTime is the timestamp when the point-in-time snapshot is taken by the underlying storage system. In dynamic snapshot creation case, this field will be filled in by the snapshot controller with the "creation_time" value returned from CSI "CreateSnapshot" gRPC call. For a pre-existing snapshot, this field will be filled with the "creation_time" value returned from the CSI "ListSnapshots" gRPC call if the driver supports it. If not specified, it may indicate that the creation time of the snapshot is unknown. + format: date-time + type: string + error: + description: error is the last observed error during snapshot creation, if any. This field could be helpful to upper level controllers(i.e., application controller) to decide whether they should continue on waiting for the snapshot to be created based on the type of error reported. The snapshot controller will keep retrying when an error occurrs during the snapshot creation. Upon success, this error field will be cleared. + properties: + message: + description: 'message is a string detailing the encountered error during snapshot creation if specified. NOTE: message may be logged, and it should not contain sensitive information.' + type: string + time: + description: time is the timestamp when the error was encountered. + format: date-time + type: string + type: object + readyToUse: + description: readyToUse indicates if the snapshot is ready to be used to restore a volume. In dynamic snapshot creation case, this field will be filled in by the snapshot controller with the "ready_to_use" value returned from CSI "CreateSnapshot" gRPC call. For a pre-existing snapshot, this field will be filled with the "ready_to_use" value returned from the CSI "ListSnapshots" gRPC call if the driver supports it, otherwise, this field will be set to "True". If not specified, it means the readiness of a snapshot is unknown. + type: boolean + restoreSize: + type: string + description: restoreSize represents the minimum size of volume required to create a volume from this snapshot. In dynamic snapshot creation case, this field will be filled in by the snapshot controller with the "size_bytes" value returned from CSI "CreateSnapshot" gRPC call. For a pre-existing snapshot, this field will be filled with the "size_bytes" value returned from the CSI "ListSnapshots" gRPC call if the driver supports it. When restoring a volume from this snapshot, the size of the volume MUST NOT be smaller than the restoreSize if it is specified, otherwise the restoration will fail. If not specified, it indicates that the size is unknown. + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + required: + - spec + type: object + served: true + storage: true + subresources: + status: {} + - additionalPrinterColumns: + - description: Indicates if the snapshot is ready to be used to restore a volume. + jsonPath: .status.readyToUse + name: ReadyToUse + type: boolean + - description: If a new snapshot needs to be created, this contains the name of the source PVC from which this snapshot was (or will be) created. + jsonPath: .spec.source.persistentVolumeClaimName + name: SourcePVC + type: string + - description: If a snapshot already exists, this contains the name of the existing VolumeSnapshotContent object representing the existing snapshot. + jsonPath: .spec.source.volumeSnapshotContentName + name: SourceSnapshotContent + type: string + - description: Represents the minimum size of volume required to rehydrate from this snapshot. + jsonPath: .status.restoreSize + name: RestoreSize + type: string + - description: The name of the VolumeSnapshotClass requested by the VolumeSnapshot. + jsonPath: .spec.volumeSnapshotClassName + name: SnapshotClass + type: string + - description: Name of the VolumeSnapshotContent object to which the VolumeSnapshot object intends to bind to. Please note that verification of binding actually requires checking both VolumeSnapshot and VolumeSnapshotContent to ensure both are pointing at each other. Binding MUST be verified prior to usage of this object. + jsonPath: .status.boundVolumeSnapshotContentName + name: SnapshotContent + type: string + - description: Timestamp when the point-in-time snapshot was taken by the underlying storage system. + jsonPath: .status.creationTime + name: CreationTime + type: date + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1beta1 + # This indicates the v1beta1 version of the custom resource is deprecated. + # API requests to this version receive a warning in the server response. + deprecated: true + # This overrides the default warning returned to clients making v1beta1 API requests. + deprecationWarning: "snapshot.storage.k8s.io/v1beta1 VolumeSnapshot is deprecated; use snapshot.storage.k8s.io/v1 VolumeSnapshot" + schema: + openAPIV3Schema: + description: VolumeSnapshot is a user's request for either creating a point-in-time snapshot of a persistent volume, or binding to a pre-existing snapshot. + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + spec: + description: 'spec defines the desired characteristics of a snapshot requested by a user. More info: https://kubernetes.io/docs/concepts/storage/volume-snapshots#volumesnapshots Required.' + properties: + source: + description: source specifies where a snapshot will be created from. This field is immutable after creation. Required. + properties: + persistentVolumeClaimName: + description: persistentVolumeClaimName specifies the name of the PersistentVolumeClaim object representing the volume from which a snapshot should be created. This PVC is assumed to be in the same namespace as the VolumeSnapshot object. This field should be set if the snapshot does not exists, and needs to be created. This field is immutable. + type: string + volumeSnapshotContentName: + description: volumeSnapshotContentName specifies the name of a pre-existing VolumeSnapshotContent object representing an existing volume snapshot. This field should be set if the snapshot already exists and only needs a representation in Kubernetes. This field is immutable. + type: string + type: object + volumeSnapshotClassName: + description: 'VolumeSnapshotClassName is the name of the VolumeSnapshotClass requested by the VolumeSnapshot. VolumeSnapshotClassName may be left nil to indicate that the default SnapshotClass should be used. A given cluster may have multiple default Volume SnapshotClasses: one default per CSI Driver. If a VolumeSnapshot does not specify a SnapshotClass, VolumeSnapshotSource will be checked to figure out what the associated CSI Driver is, and the default VolumeSnapshotClass associated with that CSI Driver will be used. If more than one VolumeSnapshotClass exist for a given CSI Driver and more than one have been marked as default, CreateSnapshot will fail and generate an event. Empty string is not allowed for this field.' + type: string + required: + - source + type: object + status: + description: status represents the current information of a snapshot. Consumers must verify binding between VolumeSnapshot and VolumeSnapshotContent objects is successful (by validating that both VolumeSnapshot and VolumeSnapshotContent point at each other) before using this object. + properties: + boundVolumeSnapshotContentName: + description: 'boundVolumeSnapshotContentName is the name of the VolumeSnapshotContent object to which this VolumeSnapshot object intends to bind to. If not specified, it indicates that the VolumeSnapshot object has not been successfully bound to a VolumeSnapshotContent object yet. NOTE: To avoid possible security issues, consumers must verify binding between VolumeSnapshot and VolumeSnapshotContent objects is successful (by validating that both VolumeSnapshot and VolumeSnapshotContent point at each other) before using this object.' + type: string + creationTime: + description: creationTime is the timestamp when the point-in-time snapshot is taken by the underlying storage system. In dynamic snapshot creation case, this field will be filled in by the snapshot controller with the "creation_time" value returned from CSI "CreateSnapshot" gRPC call. For a pre-existing snapshot, this field will be filled with the "creation_time" value returned from the CSI "ListSnapshots" gRPC call if the driver supports it. If not specified, it may indicate that the creation time of the snapshot is unknown. + format: date-time + type: string + error: + description: error is the last observed error during snapshot creation, if any. This field could be helpful to upper level controllers(i.e., application controller) to decide whether they should continue on waiting for the snapshot to be created based on the type of error reported. The snapshot controller will keep retrying when an error occurrs during the snapshot creation. Upon success, this error field will be cleared. + properties: + message: + description: 'message is a string detailing the encountered error during snapshot creation if specified. NOTE: message may be logged, and it should not contain sensitive information.' + type: string + time: + description: time is the timestamp when the error was encountered. + format: date-time + type: string + type: object + readyToUse: + description: readyToUse indicates if the snapshot is ready to be used to restore a volume. In dynamic snapshot creation case, this field will be filled in by the snapshot controller with the "ready_to_use" value returned from CSI "CreateSnapshot" gRPC call. For a pre-existing snapshot, this field will be filled with the "ready_to_use" value returned from the CSI "ListSnapshots" gRPC call if the driver supports it, otherwise, this field will be set to "True". If not specified, it means the readiness of a snapshot is unknown. + type: boolean + restoreSize: + type: string + description: restoreSize represents the minimum size of volume required to create a volume from this snapshot. In dynamic snapshot creation case, this field will be filled in by the snapshot controller with the "size_bytes" value returned from CSI "CreateSnapshot" gRPC call. For a pre-existing snapshot, this field will be filled with the "size_bytes" value returned from the CSI "ListSnapshots" gRPC call if the driver supports it. When restoring a volume from this snapshot, the size of the volume MUST NOT be smaller than the restoreSize if it is specified, otherwise the restoration will fail. If not specified, it indicates that the size is unknown. + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + required: + - spec + type: object + served: true + storage: false + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] + +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.4.0 + api-approved.kubernetes.io: "https://github.com/kubernetes-csi/external-snapshotter/pull/419" + creationTimestamp: null + name: volumesnapshotclasses.snapshot.storage.k8s.io +spec: + group: snapshot.storage.k8s.io + names: + kind: VolumeSnapshotClass + listKind: VolumeSnapshotClassList + plural: volumesnapshotclasses + shortNames: + - vsclass + - vsclasses + singular: volumesnapshotclass + scope: Cluster + versions: + - additionalPrinterColumns: + - jsonPath: .driver + name: Driver + type: string + - description: Determines whether a VolumeSnapshotContent created through the VolumeSnapshotClass should be deleted when its bound VolumeSnapshot is deleted. + jsonPath: .deletionPolicy + name: DeletionPolicy + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1 + schema: + openAPIV3Schema: + description: VolumeSnapshotClass specifies parameters that a underlying storage system uses when creating a volume snapshot. A specific VolumeSnapshotClass is used by specifying its name in a VolumeSnapshot object. VolumeSnapshotClasses are non-namespaced + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + deletionPolicy: + description: deletionPolicy determines whether a VolumeSnapshotContent created through the VolumeSnapshotClass should be deleted when its bound VolumeSnapshot is deleted. Supported values are "Retain" and "Delete". "Retain" means that the VolumeSnapshotContent and its physical snapshot on underlying storage system are kept. "Delete" means that the VolumeSnapshotContent and its physical snapshot on underlying storage system are deleted. Required. + enum: + - Delete + - Retain + type: string + driver: + description: driver is the name of the storage driver that handles this VolumeSnapshotClass. Required. + type: string + kind: + description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + parameters: + additionalProperties: + type: string + description: parameters is a key-value map with storage driver specific parameters for creating snapshots. These values are opaque to Kubernetes. + type: object + required: + - deletionPolicy + - driver + type: object + served: true + storage: true + subresources: {} + - additionalPrinterColumns: + - jsonPath: .driver + name: Driver + type: string + - description: Determines whether a VolumeSnapshotContent created through the VolumeSnapshotClass should be deleted when its bound VolumeSnapshot is deleted. + jsonPath: .deletionPolicy + name: DeletionPolicy + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1beta1 + # This indicates the v1beta1 version of the custom resource is deprecated. + # API requests to this version receive a warning in the server response. + deprecated: true + # This overrides the default warning returned to clients making v1beta1 API requests. + deprecationWarning: "snapshot.storage.k8s.io/v1beta1 VolumeSnapshotClass is deprecated; use snapshot.storage.k8s.io/v1 VolumeSnapshotClass" + schema: + openAPIV3Schema: + description: VolumeSnapshotClass specifies parameters that a underlying storage system uses when creating a volume snapshot. A specific VolumeSnapshotClass is used by specifying its name in a VolumeSnapshot object. VolumeSnapshotClasses are non-namespaced + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + deletionPolicy: + description: deletionPolicy determines whether a VolumeSnapshotContent created through the VolumeSnapshotClass should be deleted when its bound VolumeSnapshot is deleted. Supported values are "Retain" and "Delete". "Retain" means that the VolumeSnapshotContent and its physical snapshot on underlying storage system are kept. "Delete" means that the VolumeSnapshotContent and its physical snapshot on underlying storage system are deleted. Required. + enum: + - Delete + - Retain + type: string + driver: + description: driver is the name of the storage driver that handles this VolumeSnapshotClass. Required. + type: string + kind: + description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + parameters: + additionalProperties: + type: string + description: parameters is a key-value map with storage driver specific parameters for creating snapshots. These values are opaque to Kubernetes. + type: object + required: + - deletionPolicy + - driver + type: object + served: true + storage: false + subresources: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] + +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.4.0 + api-approved.kubernetes.io: "https://github.com/kubernetes-csi/external-snapshotter/pull/419" + creationTimestamp: null + name: volumesnapshotcontents.snapshot.storage.k8s.io +spec: + group: snapshot.storage.k8s.io + names: + kind: VolumeSnapshotContent + listKind: VolumeSnapshotContentList + plural: volumesnapshotcontents + shortNames: + - vsc + - vscs + singular: volumesnapshotcontent + scope: Cluster + versions: + - additionalPrinterColumns: + - description: Indicates if the snapshot is ready to be used to restore a volume. + jsonPath: .status.readyToUse + name: ReadyToUse + type: boolean + - description: Represents the complete size of the snapshot in bytes + jsonPath: .status.restoreSize + name: RestoreSize + type: integer + - description: Determines whether this VolumeSnapshotContent and its physical snapshot on the underlying storage system should be deleted when its bound VolumeSnapshot is deleted. + jsonPath: .spec.deletionPolicy + name: DeletionPolicy + type: string + - description: Name of the CSI driver used to create the physical snapshot on the underlying storage system. + jsonPath: .spec.driver + name: Driver + type: string + - description: Name of the VolumeSnapshotClass to which this snapshot belongs. + jsonPath: .spec.volumeSnapshotClassName + name: VolumeSnapshotClass + type: string + - description: Name of the VolumeSnapshot object to which this VolumeSnapshotContent object is bound. + jsonPath: .spec.volumeSnapshotRef.name + name: VolumeSnapshot + type: string + - description: Namespace of the VolumeSnapshot object to which this VolumeSnapshotContent object is bound. + jsonPath: .spec.volumeSnapshotRef.namespace + name: VolumeSnapshotNamespace + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1 + schema: + openAPIV3Schema: + description: VolumeSnapshotContent represents the actual "on-disk" snapshot object in the underlying storage system + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + spec: + description: spec defines properties of a VolumeSnapshotContent created by the underlying storage system. Required. + properties: + deletionPolicy: + description: deletionPolicy determines whether this VolumeSnapshotContent and its physical snapshot on the underlying storage system should be deleted when its bound VolumeSnapshot is deleted. Supported values are "Retain" and "Delete". "Retain" means that the VolumeSnapshotContent and its physical snapshot on underlying storage system are kept. "Delete" means that the VolumeSnapshotContent and its physical snapshot on underlying storage system are deleted. For dynamically provisioned snapshots, this field will automatically be filled in by the CSI snapshotter sidecar with the "DeletionPolicy" field defined in the corresponding VolumeSnapshotClass. For pre-existing snapshots, users MUST specify this field when creating the VolumeSnapshotContent object. Required. + enum: + - Delete + - Retain + type: string + driver: + description: driver is the name of the CSI driver used to create the physical snapshot on the underlying storage system. This MUST be the same as the name returned by the CSI GetPluginName() call for that driver. Required. + type: string + source: + description: source specifies whether the snapshot is (or should be) dynamically provisioned or already exists, and just requires a Kubernetes object representation. This field is immutable after creation. Required. + properties: + snapshotHandle: + description: snapshotHandle specifies the CSI "snapshot_id" of a pre-existing snapshot on the underlying storage system for which a Kubernetes object representation was (or should be) created. This field is immutable. + type: string + volumeHandle: + description: volumeHandle specifies the CSI "volume_id" of the volume from which a snapshot should be dynamically taken from. This field is immutable. + type: string + type: object + oneOf: + - required: ["snapshotHandle"] + - required: ["volumeHandle"] + volumeSnapshotClassName: + description: name of the VolumeSnapshotClass from which this snapshot was (or will be) created. Note that after provisioning, the VolumeSnapshotClass may be deleted or recreated with different set of values, and as such, should not be referenced post-snapshot creation. + type: string + volumeSnapshotRef: + description: volumeSnapshotRef specifies the VolumeSnapshot object to which this VolumeSnapshotContent object is bound. VolumeSnapshot.Spec.VolumeSnapshotContentName field must reference to this VolumeSnapshotContent's name for the bidirectional binding to be valid. For a pre-existing VolumeSnapshotContent object, name and namespace of the VolumeSnapshot object MUST be provided for binding to happen. This field is immutable after creation. Required. + properties: + apiVersion: + description: API version of the referent. + type: string + fieldPath: + description: 'If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: "spec.containers{name}" (where "name" refers to the name of the container that triggered the event) or if no container name is specified "spec.containers[2]" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object. TODO: this design is not final and this field is subject to change in the future.' + type: string + kind: + description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + namespace: + description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/' + type: string + resourceVersion: + description: 'Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency' + type: string + uid: + description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids' + type: string + type: object + required: + - deletionPolicy + - driver + - source + - volumeSnapshotRef + type: object + status: + description: status represents the current information of a snapshot. + properties: + creationTime: + description: creationTime is the timestamp when the point-in-time snapshot is taken by the underlying storage system. In dynamic snapshot creation case, this field will be filled in by the CSI snapshotter sidecar with the "creation_time" value returned from CSI "CreateSnapshot" gRPC call. For a pre-existing snapshot, this field will be filled with the "creation_time" value returned from the CSI "ListSnapshots" gRPC call if the driver supports it. If not specified, it indicates the creation time is unknown. The format of this field is a Unix nanoseconds time encoded as an int64. On Unix, the command `date +%s%N` returns the current time in nanoseconds since 1970-01-01 00:00:00 UTC. + format: int64 + type: integer + error: + description: error is the last observed error during snapshot creation, if any. Upon success after retry, this error field will be cleared. + properties: + message: + description: 'message is a string detailing the encountered error during snapshot creation if specified. NOTE: message may be logged, and it should not contain sensitive information.' + type: string + time: + description: time is the timestamp when the error was encountered. + format: date-time + type: string + type: object + readyToUse: + description: readyToUse indicates if a snapshot is ready to be used to restore a volume. In dynamic snapshot creation case, this field will be filled in by the CSI snapshotter sidecar with the "ready_to_use" value returned from CSI "CreateSnapshot" gRPC call. For a pre-existing snapshot, this field will be filled with the "ready_to_use" value returned from the CSI "ListSnapshots" gRPC call if the driver supports it, otherwise, this field will be set to "True". If not specified, it means the readiness of a snapshot is unknown. + type: boolean + restoreSize: + description: restoreSize represents the complete size of the snapshot in bytes. In dynamic snapshot creation case, this field will be filled in by the CSI snapshotter sidecar with the "size_bytes" value returned from CSI "CreateSnapshot" gRPC call. For a pre-existing snapshot, this field will be filled with the "size_bytes" value returned from the CSI "ListSnapshots" gRPC call if the driver supports it. When restoring a volume from this snapshot, the size of the volume MUST NOT be smaller than the restoreSize if it is specified, otherwise the restoration will fail. If not specified, it indicates that the size is unknown. + format: int64 + minimum: 0 + type: integer + snapshotHandle: + description: snapshotHandle is the CSI "snapshot_id" of a snapshot on the underlying storage system. If not specified, it indicates that dynamic snapshot creation has either failed or it is still in progress. + type: string + type: object + required: + - spec + type: object + served: true + storage: true + subresources: + status: {} + - additionalPrinterColumns: + - description: Indicates if the snapshot is ready to be used to restore a volume. + jsonPath: .status.readyToUse + name: ReadyToUse + type: boolean + - description: Represents the complete size of the snapshot in bytes + jsonPath: .status.restoreSize + name: RestoreSize + type: integer + - description: Determines whether this VolumeSnapshotContent and its physical snapshot on the underlying storage system should be deleted when its bound VolumeSnapshot is deleted. + jsonPath: .spec.deletionPolicy + name: DeletionPolicy + type: string + - description: Name of the CSI driver used to create the physical snapshot on the underlying storage system. + jsonPath: .spec.driver + name: Driver + type: string + - description: Name of the VolumeSnapshotClass to which this snapshot belongs. + jsonPath: .spec.volumeSnapshotClassName + name: VolumeSnapshotClass + type: string + - description: Name of the VolumeSnapshot object to which this VolumeSnapshotContent object is bound. + jsonPath: .spec.volumeSnapshotRef.name + name: VolumeSnapshot + type: string + - description: Namespace of the VolumeSnapshot object to which this VolumeSnapshotContent object is bound. + jsonPath: .spec.volumeSnapshotRef.namespace + name: VolumeSnapshotNamespace + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1beta1 + # This indicates the v1beta1 version of the custom resource is deprecated. + # API requests to this version receive a warning in the server response. + deprecated: true + # This overrides the default warning returned to clients making v1beta1 API requests. + deprecationWarning: "snapshot.storage.k8s.io/v1beta1 VolumeSnapshotContent is deprecated; use snapshot.storage.k8s.io/v1 VolumeSnapshotContent" + schema: + openAPIV3Schema: + description: VolumeSnapshotContent represents the actual "on-disk" snapshot object in the underlying storage system + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + spec: + description: spec defines properties of a VolumeSnapshotContent created by the underlying storage system. Required. + properties: + deletionPolicy: + description: deletionPolicy determines whether this VolumeSnapshotContent and its physical snapshot on the underlying storage system should be deleted when its bound VolumeSnapshot is deleted. Supported values are "Retain" and "Delete". "Retain" means that the VolumeSnapshotContent and its physical snapshot on underlying storage system are kept. "Delete" means that the VolumeSnapshotContent and its physical snapshot on underlying storage system are deleted. For dynamically provisioned snapshots, this field will automatically be filled in by the CSI snapshotter sidecar with the "DeletionPolicy" field defined in the corresponding VolumeSnapshotClass. For pre-existing snapshots, users MUST specify this field when creating the VolumeSnapshotContent object. Required. + enum: + - Delete + - Retain + type: string + driver: + description: driver is the name of the CSI driver used to create the physical snapshot on the underlying storage system. This MUST be the same as the name returned by the CSI GetPluginName() call for that driver. Required. + type: string + source: + description: source specifies whether the snapshot is (or should be) dynamically provisioned or already exists, and just requires a Kubernetes object representation. This field is immutable after creation. Required. + properties: + snapshotHandle: + description: snapshotHandle specifies the CSI "snapshot_id" of a pre-existing snapshot on the underlying storage system for which a Kubernetes object representation was (or should be) created. This field is immutable. + type: string + volumeHandle: + description: volumeHandle specifies the CSI "volume_id" of the volume from which a snapshot should be dynamically taken from. This field is immutable. + type: string + type: object + volumeSnapshotClassName: + description: name of the VolumeSnapshotClass from which this snapshot was (or will be) created. Note that after provisioning, the VolumeSnapshotClass may be deleted or recreated with different set of values, and as such, should not be referenced post-snapshot creation. + type: string + volumeSnapshotRef: + description: volumeSnapshotRef specifies the VolumeSnapshot object to which this VolumeSnapshotContent object is bound. VolumeSnapshot.Spec.VolumeSnapshotContentName field must reference to this VolumeSnapshotContent's name for the bidirectional binding to be valid. For a pre-existing VolumeSnapshotContent object, name and namespace of the VolumeSnapshot object MUST be provided for binding to happen. This field is immutable after creation. Required. + properties: + apiVersion: + description: API version of the referent. + type: string + fieldPath: + description: 'If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: "spec.containers{name}" (where "name" refers to the name of the container that triggered the event) or if no container name is specified "spec.containers[2]" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object. TODO: this design is not final and this field is subject to change in the future.' + type: string + kind: + description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + namespace: + description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/' + type: string + resourceVersion: + description: 'Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency' + type: string + uid: + description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids' + type: string + type: object + required: + - deletionPolicy + - driver + - source + - volumeSnapshotRef + type: object + status: + description: status represents the current information of a snapshot. + properties: + creationTime: + description: creationTime is the timestamp when the point-in-time snapshot is taken by the underlying storage system. In dynamic snapshot creation case, this field will be filled in by the CSI snapshotter sidecar with the "creation_time" value returned from CSI "CreateSnapshot" gRPC call. For a pre-existing snapshot, this field will be filled with the "creation_time" value returned from the CSI "ListSnapshots" gRPC call if the driver supports it. If not specified, it indicates the creation time is unknown. The format of this field is a Unix nanoseconds time encoded as an int64. On Unix, the command `date +%s%N` returns the current time in nanoseconds since 1970-01-01 00:00:00 UTC. + format: int64 + type: integer + error: + description: error is the last observed error during snapshot creation, if any. Upon success after retry, this error field will be cleared. + properties: + message: + description: 'message is a string detailing the encountered error during snapshot creation if specified. NOTE: message may be logged, and it should not contain sensitive information.' + type: string + time: + description: time is the timestamp when the error was encountered. + format: date-time + type: string + type: object + readyToUse: + description: readyToUse indicates if a snapshot is ready to be used to restore a volume. In dynamic snapshot creation case, this field will be filled in by the CSI snapshotter sidecar with the "ready_to_use" value returned from CSI "CreateSnapshot" gRPC call. For a pre-existing snapshot, this field will be filled with the "ready_to_use" value returned from the CSI "ListSnapshots" gRPC call if the driver supports it, otherwise, this field will be set to "True". If not specified, it means the readiness of a snapshot is unknown. + type: boolean + restoreSize: + description: restoreSize represents the complete size of the snapshot in bytes. In dynamic snapshot creation case, this field will be filled in by the CSI snapshotter sidecar with the "size_bytes" value returned from CSI "CreateSnapshot" gRPC call. For a pre-existing snapshot, this field will be filled with the "size_bytes" value returned from the CSI "ListSnapshots" gRPC call if the driver supports it. When restoring a volume from this snapshot, the size of the volume MUST NOT be smaller than the restoreSize if it is specified, otherwise the restoration will fail. If not specified, it indicates that the size is unknown. + format: int64 + minimum: 0 + type: integer + snapshotHandle: + description: snapshotHandle is the CSI "snapshot_id" of a snapshot on the underlying storage system. If not specified, it indicates that dynamic snapshot creation has either failed or it is still in progress. + type: string + type: object + required: + - spec + type: object + served: true + storage: false + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] \ No newline at end of file diff --git a/deploy/v1.11.0/csi-azurefile-controller.yaml b/deploy/v1.11.0/csi-azurefile-controller.yaml new file mode 100644 index 0000000000..88b7ff610d --- /dev/null +++ b/deploy/v1.11.0/csi-azurefile-controller.yaml @@ -0,0 +1,173 @@ +--- +kind: Deployment +apiVersion: apps/v1 +metadata: + name: csi-azurefile-controller + namespace: kube-system +spec: + replicas: 2 + selector: + matchLabels: + app: csi-azurefile-controller + template: + metadata: + labels: + app: csi-azurefile-controller + spec: + hostNetwork: true # only required for MSI enabled cluster + serviceAccountName: csi-azurefile-controller-sa + nodeSelector: + kubernetes.io/os: linux # add "kubernetes.io/role: master" to run controller on master node + priorityClassName: system-cluster-critical + tolerations: + - key: "node-role.kubernetes.io/master" + operator: "Exists" + effect: "NoSchedule" + - key: "node-role.kubernetes.io/controlplane" + operator: "Exists" + effect: "NoSchedule" + containers: + - name: csi-provisioner + image: mcr.microsoft.com/oss/kubernetes-csi/csi-provisioner:v3.1.0 + args: + - "-v=2" + - "--csi-address=$(ADDRESS)" + - "--leader-election" + - "--timeout=300s" + - "--extra-create-metadata=true" + env: + - name: ADDRESS + value: /csi/csi.sock + volumeMounts: + - mountPath: /csi + name: socket-dir + resources: + limits: + memory: 500Mi + requests: + cpu: 10m + memory: 20Mi + - name: csi-attacher + image: mcr.microsoft.com/oss/kubernetes-csi/csi-attacher:v3.4.0 + args: + - "-v=2" + - "-csi-address=$(ADDRESS)" + - "-timeout=120s" + - "-leader-election" + env: + - name: ADDRESS + value: /csi/csi.sock + volumeMounts: + - mountPath: /csi + name: socket-dir + resources: + limits: + memory: 500Mi + requests: + cpu: 10m + memory: 20Mi + - name: csi-snapshotter + image: mcr.microsoft.com/oss/kubernetes-csi/csi-snapshotter:v5.0.1 + args: + - "-v=2" + - "-csi-address=$(ADDRESS)" + - "-leader-election" + env: + - name: ADDRESS + value: /csi/csi.sock + volumeMounts: + - name: socket-dir + mountPath: /csi + resources: + limits: + memory: 100Mi + requests: + cpu: 10m + memory: 20Mi + - name: csi-resizer + image: mcr.microsoft.com/oss/kubernetes-csi/csi-resizer:v1.4.0 + args: + - "-csi-address=$(ADDRESS)" + - "-v=2" + - "-leader-election" + - '-handle-volume-inuse-error=false' + - '-feature-gates=RecoverVolumeExpansionFailure=true' + - '-timeout=120s' + env: + - name: ADDRESS + value: /csi/csi.sock + volumeMounts: + - name: socket-dir + mountPath: /csi + resources: + limits: + memory: 500Mi + requests: + cpu: 10m + memory: 20Mi + - name: liveness-probe + image: mcr.microsoft.com/oss/kubernetes-csi/livenessprobe:v2.5.0 + args: + - --csi-address=/csi/csi.sock + - --probe-timeout=3s + - --health-port=29612 + - --v=2 + volumeMounts: + - name: socket-dir + mountPath: /csi + resources: + limits: + memory: 100Mi + requests: + cpu: 10m + memory: 20Mi + - name: azurefile + image: mcr.microsoft.com/k8s/csi/azurefile-csi:v1.11.0 + imagePullPolicy: IfNotPresent + args: + - "--v=5" + - "--endpoint=$(CSI_ENDPOINT)" + - "--metrics-address=0.0.0.0:29614" + - "--user-agent-suffix=OSS-kubectl" + ports: + - containerPort: 29612 + name: healthz + protocol: TCP + - containerPort: 29614 + 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 + volumes: + - name: socket-dir + emptyDir: {} + - name: azure-cred + hostPath: + path: /etc/kubernetes/ + type: DirectoryOrCreate diff --git a/deploy/v1.11.0/csi-azurefile-driver.yaml b/deploy/v1.11.0/csi-azurefile-driver.yaml new file mode 100644 index 0000000000..df4f6bbfed --- /dev/null +++ b/deploy/v1.11.0/csi-azurefile-driver.yaml @@ -0,0 +1,15 @@ +--- +apiVersion: storage.k8s.io/v1 +kind: CSIDriver +metadata: + name: file.csi.azure.com + annotations: + csiDriver: v1.11.0 + snapshot: v3.0.3 +spec: + attachRequired: false + podInfoOnMount: true + volumeLifecycleModes: + - Persistent + - Ephemeral + fsGroupPolicy: File diff --git a/deploy/v1.11.0/csi-azurefile-node-windows.yaml b/deploy/v1.11.0/csi-azurefile-node-windows.yaml new file mode 100644 index 0000000000..6bfce150d1 --- /dev/null +++ b/deploy/v1.11.0/csi-azurefile-node-windows.yaml @@ -0,0 +1,181 @@ +--- +kind: DaemonSet +apiVersion: apps/v1 +metadata: + name: csi-azurefile-node-win + namespace: kube-system +spec: + updateStrategy: + rollingUpdate: + maxUnavailable: 1 + type: RollingUpdate + selector: + matchLabels: + app: csi-azurefile-node-win + template: + metadata: + labels: + app: csi-azurefile-node-win + spec: + serviceAccountName: csi-azurefile-node-sa + tolerations: + - key: "node.kubernetes.io/os" + operator: "Exists" + effect: "NoSchedule" + nodeSelector: + kubernetes.io/os: windows + affinity: + nodeAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + nodeSelectorTerms: + - matchExpressions: + - key: type + operator: NotIn + values: + - virtual-kubelet + priorityClassName: system-node-critical + containers: + - name: liveness-probe + volumeMounts: + - mountPath: C:\csi + name: plugin-dir + image: mcr.microsoft.com/oss/kubernetes-csi/livenessprobe:v2.5.0 + args: + - --csi-address=$(CSI_ENDPOINT) + - --probe-timeout=3s + - --health-port=29613 + - --v=2 + env: + - name: CSI_ENDPOINT + value: unix://C:\\csi\\csi.sock + resources: + limits: + memory: 200Mi + requests: + cpu: 10m + memory: 20Mi + - name: node-driver-registrar + image: mcr.microsoft.com/oss/kubernetes-csi/csi-node-driver-registrar:v2.4.0 + args: + - --v=2 + - --csi-address=$(CSI_ENDPOINT) + - --kubelet-registration-path=$(DRIVER_REG_SOCK_PATH) + livenessProbe: + exec: + command: + - /csi-node-driver-registrar.exe + - --kubelet-registration-path=$(DRIVER_REG_SOCK_PATH) + - --mode=kubelet-registration-probe + initialDelaySeconds: 60 + timeoutSeconds: 30 + env: + - name: CSI_ENDPOINT + value: unix://C:\\csi\\csi.sock + - name: DRIVER_REG_SOCK_PATH + value: C:\\var\\lib\\kubelet\\plugins\\file.csi.azure.com\\csi.sock + - name: KUBE_NODE_NAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName + volumeMounts: + - name: kubelet-dir + mountPath: "C:\\var\\lib\\kubelet" + - name: plugin-dir + mountPath: C:\csi + - name: registration-dir + mountPath: C:\registration + resources: + limits: + memory: 200Mi + requests: + cpu: 10m + memory: 20Mi + - name: azurefile + image: mcr.microsoft.com/k8s/csi/azurefile-csi:v1.11.0 + imagePullPolicy: IfNotPresent + args: + - --v=5 + - --endpoint=$(CSI_ENDPOINT) + - --nodeid=$(KUBE_NODE_NAME) + - --kubeconfig=C:\\k\\config + - --metrics-address=0.0.0.0:29615 + ports: + - containerPort: 29613 + 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-windows + optional: true + - name: CSI_ENDPOINT + value: unix://C:\\csi\\csi.sock + - name: KUBE_NODE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: spec.nodeName + volumeMounts: + - name: kubelet-dir + mountPath: "C:\\var\\lib\\kubelet" + - name: plugin-dir + mountPath: C:\csi + - name: azure-config + mountPath: C:\k + - name: csi-proxy-fs-pipe-v1 + mountPath: \\.\pipe\csi-proxy-filesystem-v1 + - name: csi-proxy-smb-pipe-v1 + mountPath: \\.\pipe\csi-proxy-smb-v1 + # these paths are still included for compatibility, they're used + # only if the node has still the beta version of the CSI proxy + - name: csi-proxy-fs-pipe-v1beta1 + mountPath: \\.\pipe\csi-proxy-filesystem-v1beta1 + - name: csi-proxy-smb-pipe-v1beta1 + mountPath: \\.\pipe\csi-proxy-smb-v1beta1 + resources: + limits: + memory: 400Mi + requests: + cpu: 10m + memory: 20Mi + volumes: + - name: csi-proxy-fs-pipe-v1 + hostPath: + path: \\.\pipe\csi-proxy-filesystem-v1 + - name: csi-proxy-smb-pipe-v1 + hostPath: + path: \\.\pipe\csi-proxy-smb-v1 + # these paths are still included for compatibility, they're used + # only if the node has still the beta version of the CSI proxy + - name: csi-proxy-fs-pipe-v1beta1 + hostPath: + path: \\.\pipe\csi-proxy-filesystem-v1beta1 + - name: csi-proxy-smb-pipe-v1beta1 + hostPath: + path: \\.\pipe\csi-proxy-smb-v1beta1 + - name: registration-dir + hostPath: + path: C:\var\lib\kubelet\plugins_registry\ + type: Directory + - name: kubelet-dir + hostPath: + path: C:\var\lib\kubelet\ + type: Directory + - name: plugin-dir + hostPath: + path: C:\var\lib\kubelet\plugins\file.csi.azure.com\ + type: DirectoryOrCreate + - name: azure-config + hostPath: + path: C:\k + type: DirectoryOrCreate diff --git a/deploy/v1.11.0/csi-azurefile-node.yaml b/deploy/v1.11.0/csi-azurefile-node.yaml new file mode 100644 index 0000000000..572c56755e --- /dev/null +++ b/deploy/v1.11.0/csi-azurefile-node.yaml @@ -0,0 +1,157 @@ +--- +kind: DaemonSet +apiVersion: apps/v1 +metadata: + name: csi-azurefile-node + namespace: kube-system +spec: + updateStrategy: + rollingUpdate: + maxUnavailable: 1 + type: RollingUpdate + selector: + matchLabels: + app: csi-azurefile-node + template: + metadata: + labels: + app: csi-azurefile-node + spec: + hostNetwork: true + dnsPolicy: Default + serviceAccountName: csi-azurefile-node-sa + nodeSelector: + kubernetes.io/os: linux + affinity: + nodeAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + nodeSelectorTerms: + - matchExpressions: + - key: type + operator: NotIn + values: + - virtual-kubelet + priorityClassName: system-node-critical + tolerations: + - operator: "Exists" + containers: + - name: liveness-probe + volumeMounts: + - mountPath: /csi + name: socket-dir + image: mcr.microsoft.com/oss/kubernetes-csi/livenessprobe:v2.5.0 + args: + - --csi-address=/csi/csi.sock + - --probe-timeout=3s + - --health-port=29613 + - --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.4.0 + 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/file.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: azurefile + image: mcr.microsoft.com/k8s/csi/azurefile-csi:v1.11.0 + imagePullPolicy: IfNotPresent + args: + - "--v=5" + - "--endpoint=$(CSI_ENDPOINT)" + - "--nodeid=$(KUBE_NODE_NAME)" + - "--metrics-address=0.0.0.0:29615" + ports: + - containerPort: 29613 + 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: 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: /dev + name: device-dir + resources: + limits: + memory: 300Mi + requests: + cpu: 10m + memory: 20Mi + volumes: + - hostPath: + path: /var/lib/kubelet/plugins/file.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: /dev + type: Directory + name: device-dir +--- diff --git a/deploy/v1.11.0/csi-snapshot-controller.yaml b/deploy/v1.11.0/csi-snapshot-controller.yaml new file mode 100644 index 0000000000..a64eba7752 --- /dev/null +++ b/deploy/v1.11.0/csi-snapshot-controller.yaml @@ -0,0 +1,41 @@ +--- +kind: Deployment +apiVersion: apps/v1 +metadata: + name: csi-snapshot-controller + namespace: kube-system +spec: + replicas: 2 + selector: + matchLabels: + app: csi-snapshot-controller + template: + metadata: + labels: + app: csi-snapshot-controller + spec: + serviceAccountName: csi-snapshot-controller-sa + nodeSelector: + kubernetes.io/os: linux + priorityClassName: system-cluster-critical + tolerations: + - key: "node-role.kubernetes.io/master" + operator: "Equal" + value: "true" + effect: "NoSchedule" + - key: "node-role.kubernetes.io/controlplane" + operator: "Equal" + value: "true" + effect: "NoSchedule" + containers: + - name: csi-snapshot-controller + image: mcr.microsoft.com/oss/kubernetes-csi/snapshot-controller:v5.0.1 + args: + - "--v=2" + - "--leader-election=true" + resources: + limits: + memory: 100Mi + requests: + cpu: 10m + memory: 20Mi diff --git a/deploy/v1.11.0/rbac-csi-azurefile-controller.yaml b/deploy/v1.11.0/rbac-csi-azurefile-controller.yaml new file mode 100644 index 0000000000..69d43ac51f --- /dev/null +++ b/deploy/v1.11.0/rbac-csi-azurefile-controller.yaml @@ -0,0 +1,194 @@ +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: csi-azurefile-controller-sa + namespace: kube-system + +--- + +kind: ClusterRole +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: azurefile-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: ["snapshot.storage.k8s.io"] + resources: ["volumesnapshots"] + verbs: ["get", "list"] + - apiGroups: ["snapshot.storage.k8s.io"] + resources: ["volumesnapshotcontents"] + verbs: ["get", "list"] + - apiGroups: ["coordination.k8s.io"] + resources: ["leases"] + verbs: ["get", "watch", "list", "delete", "update", "create", "patch"] +--- + +kind: ClusterRoleBinding +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: azurefile-csi-provisioner-binding +subjects: + - kind: ServiceAccount + name: csi-azurefile-controller-sa + namespace: kube-system +roleRef: + kind: ClusterRole + name: azurefile-external-provisioner-role + apiGroup: rbac.authorization.k8s.io + +--- + +kind: ClusterRole +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: azurefile-external-attacher-role +rules: + - apiGroups: [""] + resources: ["persistentvolumes"] + verbs: ["get", "list", "watch", "update"] + - apiGroups: [""] + resources: ["nodes"] + verbs: ["get", "list", "watch"] + - apiGroups: ["csi.storage.k8s.io"] + resources: ["csinodeinfos"] + verbs: ["get", "list", "watch"] + - apiGroups: ["storage.k8s.io"] + resources: ["volumeattachments"] + verbs: ["get", "list", "watch", "update", "patch"] + - apiGroups: ["storage.k8s.io"] + resources: ["volumeattachments/status"] + verbs: ["get", "list", "watch", "update", "patch"] + - apiGroups: ["coordination.k8s.io"] + resources: ["leases"] + verbs: ["get", "watch", "list", "delete", "update", "create", "patch"] +--- + +kind: ClusterRoleBinding +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: azurefile-csi-attacher-binding +subjects: + - kind: ServiceAccount + name: csi-azurefile-controller-sa + namespace: kube-system +roleRef: + kind: ClusterRole + name: azurefile-external-attacher-role + apiGroup: rbac.authorization.k8s.io + +--- + +kind: ClusterRole +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: azurefile-external-snapshotter-role +rules: + - apiGroups: [""] + resources: ["events"] + verbs: ["list", "watch", "create", "update", "patch"] + - apiGroups: [""] + resources: ["secrets"] + verbs: ["get", "list"] + - apiGroups: ["snapshot.storage.k8s.io"] + resources: ["volumesnapshotclasses"] + verbs: ["get", "list", "watch"] + - apiGroups: ["snapshot.storage.k8s.io"] + resources: ["volumesnapshotcontents"] + verbs: ["create", "get", "list", "watch", "update", "delete", "patch"] + - apiGroups: ["snapshot.storage.k8s.io"] + resources: ["volumesnapshotcontents/status"] + verbs: ["update", "patch"] + - apiGroups: ["coordination.k8s.io"] + resources: ["leases"] + verbs: ["get", "watch", "list", "delete", "update", "create", "patch"] + +--- + +kind: ClusterRoleBinding +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: azurefile-csi-snapshotter-binding +subjects: + - kind: ServiceAccount + name: csi-azurefile-controller-sa + namespace: kube-system +roleRef: + kind: ClusterRole + name: azurefile-external-snapshotter-role + apiGroup: rbac.authorization.k8s.io + +--- + +kind: ClusterRole +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: azurefile-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"] + +--- +kind: ClusterRoleBinding +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: azurefile-csi-resizer-role +subjects: + - kind: ServiceAccount + name: csi-azurefile-controller-sa + namespace: kube-system +roleRef: + kind: ClusterRole + name: azurefile-external-resizer-role + apiGroup: rbac.authorization.k8s.io + +--- +kind: ClusterRole +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: csi-azurefile-controller-secret-role +rules: + - apiGroups: [""] + resources: ["secrets"] + verbs: ["get", "list", "create"] + +--- +kind: ClusterRoleBinding +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: csi-azurefile-controller-secret-binding +subjects: + - kind: ServiceAccount + name: csi-azurefile-controller-sa + namespace: kube-system +roleRef: + kind: ClusterRole + name: csi-azurefile-controller-secret-role + apiGroup: rbac.authorization.k8s.io diff --git a/deploy/v1.11.0/rbac-csi-azurefile-node.yaml b/deploy/v1.11.0/rbac-csi-azurefile-node.yaml new file mode 100644 index 0000000000..903f6c8e25 --- /dev/null +++ b/deploy/v1.11.0/rbac-csi-azurefile-node.yaml @@ -0,0 +1,30 @@ +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: csi-azurefile-node-sa + namespace: kube-system + +--- +kind: ClusterRole +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: csi-azurefile-node-secret-role +rules: + - apiGroups: [""] + resources: ["secrets"] + verbs: ["get", "list"] + +--- +kind: ClusterRoleBinding +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: csi-azurefile-node-secret-binding +subjects: + - kind: ServiceAccount + name: csi-azurefile-node-sa + namespace: kube-system +roleRef: + kind: ClusterRole + name: csi-azurefile-node-secret-role + apiGroup: rbac.authorization.k8s.io diff --git a/deploy/v1.11.0/rbac-csi-snapshot-controller.yaml b/deploy/v1.11.0/rbac-csi-snapshot-controller.yaml new file mode 100644 index 0000000000..03af765424 --- /dev/null +++ b/deploy/v1.11.0/rbac-csi-snapshot-controller.yaml @@ -0,0 +1,78 @@ +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: csi-snapshot-controller-sa + namespace: kube-system + +--- +kind: ClusterRole +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: csi-snapshot-controller-role +rules: + - apiGroups: [""] + resources: ["persistentvolumes"] + verbs: ["get", "list", "watch"] + - apiGroups: [""] + resources: ["persistentvolumeclaims"] + verbs: ["get", "list", "watch", "update"] + - apiGroups: ["storage.k8s.io"] + resources: ["storageclasses"] + verbs: ["get", "list", "watch"] + - apiGroups: [""] + resources: ["events"] + verbs: ["list", "watch", "create", "update", "patch"] + - apiGroups: ["snapshot.storage.k8s.io"] + resources: ["volumesnapshotclasses"] + verbs: ["get", "list", "watch"] + - apiGroups: ["snapshot.storage.k8s.io"] + resources: ["volumesnapshotcontents"] + verbs: ["create", "get", "list", "watch", "update", "delete", "patch"] + - apiGroups: ["snapshot.storage.k8s.io"] + resources: ["volumesnapshotcontents/status"] + verbs: ["patch"] + - apiGroups: ["snapshot.storage.k8s.io"] + resources: ["volumesnapshots"] + verbs: ["get", "list", "watch", "update", "patch"] + - apiGroups: ["snapshot.storage.k8s.io"] + resources: ["volumesnapshots/status"] + verbs: ["update", "patch"] + +--- +kind: ClusterRoleBinding +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: csi-snapshot-controller-binding +subjects: + - kind: ServiceAccount + name: csi-snapshot-controller-sa + namespace: kube-system +roleRef: + kind: ClusterRole + name: csi-snapshot-controller-role + apiGroup: rbac.authorization.k8s.io + +--- +kind: ClusterRole +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: csi-snapshot-controller-leaderelection-role +rules: + - apiGroups: ["coordination.k8s.io"] + resources: ["leases"] + verbs: ["get", "watch", "list", "delete", "update", "create", "patch"] + +--- +kind: ClusterRoleBinding +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: csi-snapshot-controller-leaderelection-binding +subjects: + - kind: ServiceAccount + name: csi-snapshot-controller-sa + namespace: kube-system +roleRef: + kind: ClusterRole + name: csi-snapshot-controller-leaderelection-role + apiGroup: rbac.authorization.k8s.io diff --git a/docs/install-azurefile-csi-driver.md b/docs/install-azurefile-csi-driver.md index 9a09598fa8..018768e123 100644 --- a/docs/install-azurefile-csi-driver.md +++ b/docs/install-azurefile-csi-driver.md @@ -1,6 +1,6 @@ ## Install azurefile CSI driver on a Kubernetes cluster - [install CSI driver master version](./install-csi-driver-master.md) + - [install v1.11.0 CSI driver](./install-csi-driver-v1.11.0.md) - [install v1.10.0 CSI driver](./install-csi-driver-v1.10.0.md) - [install v1.9.0 CSI driver](./install-csi-driver-v1.9.0.md) - - [install v1.8.0 CSI driver](./install-csi-driver-v1.8.0.md) diff --git a/docs/install-csi-driver-v1.11.0.md b/docs/install-csi-driver-v1.11.0.md new file mode 100644 index 0000000000..98ab2b5abb --- /dev/null +++ b/docs/install-csi-driver-v1.11.0.md @@ -0,0 +1,26 @@ +## Install azurefile CSI driver v1.11.0 version on a Kubernetes cluster + +### Install by kubectl +```console +curl -skSL https://raw.githubusercontent.com/kubernetes-sigs/azurefile-csi-driver/v1.11.0/deploy/install-driver.sh | bash -s v1.11.0 -- +``` + + - check pods status: +```console +kubectl -n kube-system get pod -o wide --watch -l app=csi-azurefile-controller +kubectl -n kube-system get pod -o wide --watch -l app=csi-azurefile-node +``` + +example output: + +``` +NAME READY STATUS RESTARTS AGE IP NODE +csi-azurefile-controller-56bfddd689-dh5tk 6/6 Running 0 35s 10.240.0.19 k8s-agentpool-22533604-0 +csi-azurefile-node-cvgbs 3/3 Running 0 7m4s 10.240.0.35 k8s-agentpool-22533604-1 +csi-azurefile-node-dr4s4 3/3 Running 0 7m4s 10.240.0.4 k8s-agentpool-22533604-0 +``` + +### clean up Azure File CSI driver +```console +curl -skSL https://raw.githubusercontent.com/kubernetes-sigs/azurefile-csi-driver/v1.11.0/deploy/uninstall-driver.sh | bash -s -- +```