From ae318a307bed17f2696c08fe02412b8e048b0302 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 7 Oct 2025 07:42:26 +0000 Subject: [PATCH 1/5] Initial plan From 9e0628d795b7c548bfae732996e616566549ed36 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 7 Oct 2025 07:51:32 +0000 Subject: [PATCH 2/5] Add support for multiple storage classes in Helm chart Co-authored-by: andyzhangx <4178417+andyzhangx@users.noreply.github.com> --- .../templates/storageclass.yaml | 26 +++++++++++++++++ charts/latest/csi-driver-nfs/values.yaml | 29 ++++++++++++++++++- 2 files changed, 54 insertions(+), 1 deletion(-) diff --git a/charts/latest/csi-driver-nfs/templates/storageclass.yaml b/charts/latest/csi-driver-nfs/templates/storageclass.yaml index 1d0a241c0..42741f684 100644 --- a/charts/latest/csi-driver-nfs/templates/storageclass.yaml +++ b/charts/latest/csi-driver-nfs/templates/storageclass.yaml @@ -22,3 +22,29 @@ mountOptions: {{ toYaml . | nindent 2 }} {{- end }} {{- end }} +{{- if .Values.storageClasses }} +{{- range .Values.storageClasses }} +--- +apiVersion: storage.k8s.io/v1 +kind: StorageClass +metadata: + name: {{ .name }} +{{ include "nfs.labels" $ | indent 2 }} + {{- with .annotations }} + annotations: + {{- toYaml . | nindent 4 }} + {{- end }} +provisioner: {{ $.Values.driver.name }} +{{- with .parameters }} +parameters: +{{ toYaml . | indent 2 }} +{{- end }} +reclaimPolicy: {{ .reclaimPolicy | default "Delete" }} +volumeBindingMode: {{ .volumeBindingMode | default "Immediate" }} +allowVolumeExpansion: {{ .allowVolumeExpansion | default true }} +{{- with .mountOptions }} +mountOptions: +{{ toYaml . | nindent 2 }} +{{- end }} +{{- end }} +{{- end }} diff --git a/charts/latest/csi-driver-nfs/values.yaml b/charts/latest/csi-driver-nfs/values.yaml index 239fa4ca2..9a036ac34 100755 --- a/charts/latest/csi-driver-nfs/values.yaml +++ b/charts/latest/csi-driver-nfs/values.yaml @@ -173,7 +173,7 @@ volumeSnapshotClass: imagePullSecrets: [] # - name: "image-pull-secret" -## StorageClass resource example: +## StorageClass resource example (single storageclass): storageClass: create: false # name: nfs-csi @@ -191,3 +191,30 @@ storageClass: # volumeBindingMode: Immediate # mountOptions: # - nfsvers=4.1 + +## StorageClass resources for creating multiple storage classes: +## If you want multiple storage classes with different configurations, use this instead of storageClass above +# storageClasses: +# - name: nfs-delete +# annotations: +# storageclass.kubernetes.io/is-default-class: "true" +# parameters: +# server: nfs-server.default.svc.cluster.local +# share: / +# # subDir: +# # mountPermissions: "0" +# # csi.storage.k8s.io/provisioner-secret is only needed for providing mountOptions in DeleteVolume +# # csi.storage.k8s.io/provisioner-secret-name: "mount-options" +# # csi.storage.k8s.io/provisioner-secret-namespace: "default" +# reclaimPolicy: Delete +# volumeBindingMode: Immediate +# mountOptions: +# - nfsvers=4.1 +# - name: nfs-retain +# parameters: +# server: nfs-server.default.svc.cluster.local +# share: / +# reclaimPolicy: Retain +# volumeBindingMode: Immediate +# mountOptions: +# - nfsvers=4.1 From 2ec2577e0e87803670c79a63107be4c1a3b6720d Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 7 Oct 2025 07:54:58 +0000 Subject: [PATCH 3/5] Update v4.10.0 and v4.11.0 charts with multiple storage classes support Co-authored-by: andyzhangx <4178417+andyzhangx@users.noreply.github.com> --- .../templates/storageclass.yaml | 26 +++++++++++++++++ charts/v4.10.0/csi-driver-nfs/values.yaml | 29 ++++++++++++++++++- .../templates/storageclass.yaml | 26 +++++++++++++++++ charts/v4.11.0/csi-driver-nfs/values.yaml | 29 ++++++++++++++++++- 4 files changed, 108 insertions(+), 2 deletions(-) diff --git a/charts/v4.10.0/csi-driver-nfs/templates/storageclass.yaml b/charts/v4.10.0/csi-driver-nfs/templates/storageclass.yaml index 1d0a241c0..42741f684 100644 --- a/charts/v4.10.0/csi-driver-nfs/templates/storageclass.yaml +++ b/charts/v4.10.0/csi-driver-nfs/templates/storageclass.yaml @@ -22,3 +22,29 @@ mountOptions: {{ toYaml . | nindent 2 }} {{- end }} {{- end }} +{{- if .Values.storageClasses }} +{{- range .Values.storageClasses }} +--- +apiVersion: storage.k8s.io/v1 +kind: StorageClass +metadata: + name: {{ .name }} +{{ include "nfs.labels" $ | indent 2 }} + {{- with .annotations }} + annotations: + {{- toYaml . | nindent 4 }} + {{- end }} +provisioner: {{ $.Values.driver.name }} +{{- with .parameters }} +parameters: +{{ toYaml . | indent 2 }} +{{- end }} +reclaimPolicy: {{ .reclaimPolicy | default "Delete" }} +volumeBindingMode: {{ .volumeBindingMode | default "Immediate" }} +allowVolumeExpansion: {{ .allowVolumeExpansion | default true }} +{{- with .mountOptions }} +mountOptions: +{{ toYaml . | nindent 2 }} +{{- end }} +{{- end }} +{{- end }} diff --git a/charts/v4.10.0/csi-driver-nfs/values.yaml b/charts/v4.10.0/csi-driver-nfs/values.yaml index bf1377c5c..81ea295dd 100644 --- a/charts/v4.10.0/csi-driver-nfs/values.yaml +++ b/charts/v4.10.0/csi-driver-nfs/values.yaml @@ -173,7 +173,7 @@ volumeSnapshotClass: imagePullSecrets: [] # - name: "image-pull-secret" -## StorageClass resource example: +## StorageClass resource example (single storageclass): storageClass: create: false # name: nfs-csi @@ -191,3 +191,30 @@ storageClass: # volumeBindingMode: Immediate # mountOptions: # - nfsvers=4.1 + +## StorageClass resources for creating multiple storage classes: +## If you want multiple storage classes with different configurations, use this instead of storageClass above +# storageClasses: +# - name: nfs-delete +# annotations: +# storageclass.kubernetes.io/is-default-class: "true" +# parameters: +# server: nfs-server.default.svc.cluster.local +# share: / +# # subDir: +# # mountPermissions: "0" +# # csi.storage.k8s.io/provisioner-secret is only needed for providing mountOptions in DeleteVolume +# # csi.storage.k8s.io/provisioner-secret-name: "mount-options" +# # csi.storage.k8s.io/provisioner-secret-namespace: "default" +# reclaimPolicy: Delete +# volumeBindingMode: Immediate +# mountOptions: +# - nfsvers=4.1 +# - name: nfs-retain +# parameters: +# server: nfs-server.default.svc.cluster.local +# share: / +# reclaimPolicy: Retain +# volumeBindingMode: Immediate +# mountOptions: +# - nfsvers=4.1 diff --git a/charts/v4.11.0/csi-driver-nfs/templates/storageclass.yaml b/charts/v4.11.0/csi-driver-nfs/templates/storageclass.yaml index 1d0a241c0..42741f684 100644 --- a/charts/v4.11.0/csi-driver-nfs/templates/storageclass.yaml +++ b/charts/v4.11.0/csi-driver-nfs/templates/storageclass.yaml @@ -22,3 +22,29 @@ mountOptions: {{ toYaml . | nindent 2 }} {{- end }} {{- end }} +{{- if .Values.storageClasses }} +{{- range .Values.storageClasses }} +--- +apiVersion: storage.k8s.io/v1 +kind: StorageClass +metadata: + name: {{ .name }} +{{ include "nfs.labels" $ | indent 2 }} + {{- with .annotations }} + annotations: + {{- toYaml . | nindent 4 }} + {{- end }} +provisioner: {{ $.Values.driver.name }} +{{- with .parameters }} +parameters: +{{ toYaml . | indent 2 }} +{{- end }} +reclaimPolicy: {{ .reclaimPolicy | default "Delete" }} +volumeBindingMode: {{ .volumeBindingMode | default "Immediate" }} +allowVolumeExpansion: {{ .allowVolumeExpansion | default true }} +{{- with .mountOptions }} +mountOptions: +{{ toYaml . | nindent 2 }} +{{- end }} +{{- end }} +{{- end }} diff --git a/charts/v4.11.0/csi-driver-nfs/values.yaml b/charts/v4.11.0/csi-driver-nfs/values.yaml index 17b0f4f4c..cb9fa80f3 100644 --- a/charts/v4.11.0/csi-driver-nfs/values.yaml +++ b/charts/v4.11.0/csi-driver-nfs/values.yaml @@ -173,7 +173,7 @@ volumeSnapshotClass: imagePullSecrets: [] # - name: "image-pull-secret" -## StorageClass resource example: +## StorageClass resource example (single storageclass): storageClass: create: false # name: nfs-csi @@ -191,3 +191,30 @@ storageClass: # volumeBindingMode: Immediate # mountOptions: # - nfsvers=4.1 + +## StorageClass resources for creating multiple storage classes: +## If you want multiple storage classes with different configurations, use this instead of storageClass above +# storageClasses: +# - name: nfs-delete +# annotations: +# storageclass.kubernetes.io/is-default-class: "true" +# parameters: +# server: nfs-server.default.svc.cluster.local +# share: / +# # subDir: +# # mountPermissions: "0" +# # csi.storage.k8s.io/provisioner-secret is only needed for providing mountOptions in DeleteVolume +# # csi.storage.k8s.io/provisioner-secret-name: "mount-options" +# # csi.storage.k8s.io/provisioner-secret-namespace: "default" +# reclaimPolicy: Delete +# volumeBindingMode: Immediate +# mountOptions: +# - nfsvers=4.1 +# - name: nfs-retain +# parameters: +# server: nfs-server.default.svc.cluster.local +# share: / +# reclaimPolicy: Retain +# volumeBindingMode: Immediate +# mountOptions: +# - nfsvers=4.1 From 720b69af6f43d650068db12d52c1273905124301 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 7 Oct 2025 07:59:03 +0000 Subject: [PATCH 4/5] Fix allowVolumeExpansion boolean handling in storage class template Co-authored-by: andyzhangx <4178417+andyzhangx@users.noreply.github.com> --- charts/latest/csi-driver-nfs/templates/storageclass.yaml | 6 +++++- charts/v4.10.0/csi-driver-nfs/templates/storageclass.yaml | 6 +++++- charts/v4.11.0/csi-driver-nfs/templates/storageclass.yaml | 6 +++++- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/charts/latest/csi-driver-nfs/templates/storageclass.yaml b/charts/latest/csi-driver-nfs/templates/storageclass.yaml index 42741f684..3528502c8 100644 --- a/charts/latest/csi-driver-nfs/templates/storageclass.yaml +++ b/charts/latest/csi-driver-nfs/templates/storageclass.yaml @@ -41,7 +41,11 @@ parameters: {{- end }} reclaimPolicy: {{ .reclaimPolicy | default "Delete" }} volumeBindingMode: {{ .volumeBindingMode | default "Immediate" }} -allowVolumeExpansion: {{ .allowVolumeExpansion | default true }} +{{- if hasKey . "allowVolumeExpansion" }} +allowVolumeExpansion: {{ .allowVolumeExpansion }} +{{- else }} +allowVolumeExpansion: true +{{- end }} {{- with .mountOptions }} mountOptions: {{ toYaml . | nindent 2 }} diff --git a/charts/v4.10.0/csi-driver-nfs/templates/storageclass.yaml b/charts/v4.10.0/csi-driver-nfs/templates/storageclass.yaml index 42741f684..3528502c8 100644 --- a/charts/v4.10.0/csi-driver-nfs/templates/storageclass.yaml +++ b/charts/v4.10.0/csi-driver-nfs/templates/storageclass.yaml @@ -41,7 +41,11 @@ parameters: {{- end }} reclaimPolicy: {{ .reclaimPolicy | default "Delete" }} volumeBindingMode: {{ .volumeBindingMode | default "Immediate" }} -allowVolumeExpansion: {{ .allowVolumeExpansion | default true }} +{{- if hasKey . "allowVolumeExpansion" }} +allowVolumeExpansion: {{ .allowVolumeExpansion }} +{{- else }} +allowVolumeExpansion: true +{{- end }} {{- with .mountOptions }} mountOptions: {{ toYaml . | nindent 2 }} diff --git a/charts/v4.11.0/csi-driver-nfs/templates/storageclass.yaml b/charts/v4.11.0/csi-driver-nfs/templates/storageclass.yaml index 42741f684..3528502c8 100644 --- a/charts/v4.11.0/csi-driver-nfs/templates/storageclass.yaml +++ b/charts/v4.11.0/csi-driver-nfs/templates/storageclass.yaml @@ -41,7 +41,11 @@ parameters: {{- end }} reclaimPolicy: {{ .reclaimPolicy | default "Delete" }} volumeBindingMode: {{ .volumeBindingMode | default "Immediate" }} -allowVolumeExpansion: {{ .allowVolumeExpansion | default true }} +{{- if hasKey . "allowVolumeExpansion" }} +allowVolumeExpansion: {{ .allowVolumeExpansion }} +{{- else }} +allowVolumeExpansion: true +{{- end }} {{- with .mountOptions }} mountOptions: {{ toYaml . | nindent 2 }} From 38890bb2c13c737fe9fdabb5bab31207240df060 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 7 Oct 2025 08:00:58 +0000 Subject: [PATCH 5/5] Add documentation for multiple storage classes feature Co-authored-by: andyzhangx <4178417+andyzhangx@users.noreply.github.com> --- charts/README.md | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/charts/README.md b/charts/README.md index 743639166..31691fa3f 100644 --- a/charts/README.md +++ b/charts/README.md @@ -115,7 +115,39 @@ The following table lists the configurable parameters of the latest NFS CSI Driv | `externalSnapshotter.resources.limits.memory` | snapshot-controller memory limits | 300Mi | | `externalSnapshotter.resources.requests.cpu` | snapshot-controller cpu requests limits | 10m | | `externalSnapshotter.resources.requests.memory` | snapshot-controller memory requests limits | 20Mi | -| `storageClass.create` | create storageclass| `false` | | +| `storageClass.create` | create a single storageclass| `false` | | +| `storageClasses` | create multiple storageclasses (if specified, `storageClass.create` is still respected)| `[]` | | + +### Create multiple storage classes + +You can create multiple storage classes with different configurations using the `storageClasses` parameter: + +```yaml +storageClasses: + - name: nfs-delete + annotations: + storageclass.kubernetes.io/is-default-class: "true" + parameters: + server: nfs-server.default.svc.cluster.local + share: / + reclaimPolicy: Delete + volumeBindingMode: Immediate + mountOptions: + - nfsvers=4.1 + - name: nfs-retain + parameters: + server: nfs-server.default.svc.cluster.local + share: /data + reclaimPolicy: Retain + volumeBindingMode: Immediate + mountOptions: + - nfsvers=4.1 +``` + +Install with custom values: +```console +helm install csi-driver-nfs csi-driver-nfs/csi-driver-nfs --namespace kube-system -f custom-values.yaml +``` ## troubleshooting - Add `--wait -v=5 --debug` in `helm install` command to get detailed error