From 4fa51a9a0d11e84053a29fc72eaa0ad360f8ad74 Mon Sep 17 00:00:00 2001 From: boya murthy Date: Tue, 23 Apr 2024 07:08:12 -0400 Subject: [PATCH] Adding resiliency support for powermax --- config/samples/storage_v1_csm_powermax.yaml | 44 ++++ .../driverconfig/powermax/v2.10.0/node.yaml | 19 ++ .../container-powermax-controller.yaml | 36 +++ .../v1.10.0/container-powermax-node.yaml | 61 +++++ pkg/modules/resiliency.go | 8 +- pkg/modules/resiliency_test.go | 28 ++ .../testdata/cr_powermax_resiliency.yaml | 54 ++++ tests/e2e/testfiles/scenarios.yaml | 43 +++ tests/e2e/testfiles/storage_csm_powermax.yaml | 44 ++++ .../storage_csm_powermax_resiliency.yaml | 244 ++++++++++++++++++ 10 files changed, 579 insertions(+), 2 deletions(-) create mode 100644 operatorconfig/moduleconfig/resiliency/v1.10.0/container-powermax-controller.yaml create mode 100644 operatorconfig/moduleconfig/resiliency/v1.10.0/container-powermax-node.yaml create mode 100644 pkg/modules/testdata/cr_powermax_resiliency.yaml create mode 100644 tests/e2e/testfiles/storage_csm_powermax_resiliency.yaml diff --git a/config/samples/storage_v1_csm_powermax.yaml b/config/samples/storage_v1_csm_powermax.yaml index 809bf3c83..b1511cddc 100644 --- a/config/samples/storage_v1_csm_powermax.yaml +++ b/config/samples/storage_v1_csm_powermax.yaml @@ -431,3 +431,47 @@ spec: # configMap name which has all array/endpoint related info - name: "X_CSI_CONFIG_MAP_NAME" value: "powermax-reverseproxy-config" + - name: resiliency + # enabled: Enable/Disable Resiliency feature + # Allowed values: + # true: enable Resiliency feature(deploy podmon sidecar) + # false: disable Resiliency feature(do not deploy podmon sidecar) + # Default value: false + enabled: false + configVersion: v1.9.0 + components: + - name: podmon-controller + image: dellemc/podmon:v1.9.0 + imagePullPolicy: IfNotPresent + args: + - "--labelvalue=csi-powermax" + - "--arrayConnectivityPollRate=60" + - "--skipArrayConnectionValidation=false" + - "--driverPodLabelValue=dell-storage" + - "--ignoreVolumelessPods=false" + - "--arrayConnectivityConnectionLossThreshold=3" + # Below 4 args should not be modified. + - "--csisock=unix:/var/run/csi/csi.sock" + - "--mode=controller" + - "--driver-config-params=/powermax-config-params/driver-config-params.yaml" + - "--driverPath=csi-powermax.dellemc.com" + - name: podmon-node + image: dellemc/podmon:v1.9.0 + imagePullPolicy: IfNotPresent + envs: + # podmonAPIPort: Defines the port to be used within the kubernetes cluster + # Allowed values: Any valid and free port (string) + # Default value: 8083 + - name: "X_CSI_PODMON_API_PORT" + value: "8083" + args: + - "--labelvalue=csi-powermax" + - "--arrayConnectivityPollRate=60" + - "--leaderelection=false" + - "--driverPodLabelValue=dell-storage" + - "--ignoreVolumelessPods=false" + # Below 4 args should not be modified. + - "--csisock=unix:/var/lib/kubelet/plugins/powermax.emc.dell.com/csi_sock" + - "--mode=node" + - "--driver-config-params=/powermax-config-params/driver-config-params.yaml" + - "--driverPath=csi-powermax.dellemc.com" diff --git a/operatorconfig/driverconfig/powermax/v2.10.0/node.yaml b/operatorconfig/driverconfig/powermax/v2.10.0/node.yaml index c467023f7..8c02ad53e 100644 --- a/operatorconfig/driverconfig/powermax/v2.10.0/node.yaml +++ b/operatorconfig/driverconfig/powermax/v2.10.0/node.yaml @@ -180,6 +180,9 @@ spec: - name: pods-path mountPath: /pods mountPropagation: "Bidirectional" + - name: csi-path + mountPath: /plugins/kubernetes.io/csi + mountPropagation: "Bidirectional" - name: dev mountPath: /dev - name: sys @@ -228,6 +231,9 @@ spec: hostPath: path: /plugins/kubernetes.io/csi/volumeDevices type: DirectoryOrCreate + - name: csi-path + hostPath: + path: /plugins/kubernetes.io/csi - name: pods-path hostPath: path: /pods @@ -259,3 +265,16 @@ spec: configMap: name: node-topology-config optional: true + - name: kubelet-pods + hostPath: + path: /var/lib/kubelet/pods + type: Directory + - name: usr-bin + hostPath: + path: /usr/bin + type: Directory + - name: var-run + hostPath: + path: /var/run + type: Directory + diff --git a/operatorconfig/moduleconfig/resiliency/v1.10.0/container-powermax-controller.yaml b/operatorconfig/moduleconfig/resiliency/v1.10.0/container-powermax-controller.yaml new file mode 100644 index 000000000..1777476aa --- /dev/null +++ b/operatorconfig/moduleconfig/resiliency/v1.10.0/container-powermax-controller.yaml @@ -0,0 +1,36 @@ +# +# +# Copyright © 2023 Dell Inc. or its subsidiaries. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +name: podmon +image: dellemc/podmon:v1.9.0 +imagePullPolicy: IfNotPresent +env: + - name: MY_NODE_NAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName + - name: MY_POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: MY_POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace +volumeMounts: + - name: socket-dir + mountPath: /var/run/csi + - name: powermax-config-params + mountPath: /powermax-config-params diff --git a/operatorconfig/moduleconfig/resiliency/v1.10.0/container-powermax-node.yaml b/operatorconfig/moduleconfig/resiliency/v1.10.0/container-powermax-node.yaml new file mode 100644 index 000000000..5e8f80b30 --- /dev/null +++ b/operatorconfig/moduleconfig/resiliency/v1.10.0/container-powermax-node.yaml @@ -0,0 +1,61 @@ +# +# +# Copyright © 2023 Dell Inc. or its subsidiaries. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +name: podmon +securityContext: + privileged: true + capabilities: + add: ["SYS_ADMIN"] + allowPrivilegeEscalation: true +image: dellemc/podmon:v1.9.0 +imagePullPolicy: IfNotPresent +env: + - name: KUBE_NODE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: spec.nodeName + - name: X_CSI_PRIVATE_MOUNT_DIR + value: /var/lib/kubelet + - name: MY_NODE_NAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName + - name: MY_POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: MY_POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace +volumeMounts: + - name: kubelet-pods + mountPath: /pods + mountPropagation: "Bidirectional" + - name: driver-path + mountPath: /plugins/powermax.emc.dell.com + mountPropagation: "Bidirectional" + - name: csi-path + mountPath: /plugins/kubernetes.io/csi + mountPropagation: "Bidirectional" + - name: dev + mountPath: /dev + - name: usr-bin + mountPath: /usr-bin + - name: var-run + mountPath: /var/run + - name: powermax-config-params + mountPath: /powermax-config-params diff --git a/pkg/modules/resiliency.go b/pkg/modules/resiliency.go index 48300f418..5626f5691 100644 --- a/pkg/modules/resiliency.go +++ b/pkg/modules/resiliency.go @@ -59,6 +59,10 @@ var ResiliencySupportedDrivers = map[string]SupportedDriverParam{ PluginIdentifier: drivers.PowerFlexPluginIdentifier, DriverConfigParamsVolumeMount: drivers.PowerFlexConfigParamsVolumeMount, }, + string(csmv1.PowerMax): { + PluginIdentifier: drivers.PowerMaxPluginIdentifier, + DriverConfigParamsVolumeMount: drivers.PowerMaxConfigParamsVolumeMount, + }, } // ResiliencyPrecheck - Resiliency module precheck for supported versions @@ -217,8 +221,8 @@ func ResiliencyInjectDeployment(dp applyv1.DeploymentApplyConfiguration, cr csmv if driverType == string(csmv1.PowerScale) { driverType = string(csmv1.PowerScaleName) } - // we need to set these ENV for PowerStore & PowerScale only - if driverType == string(csmv1.PowerScaleName) || driverType == string(csmv1.PowerStore) { + // we need to set these ENV for PowerStore, PowerMax & PowerScale only + if driverType == string(csmv1.PowerScaleName) || driverType == string(csmv1.PowerStore) || driverType == string(csmv1.PowerMax) { for i, cnt := range dp.Spec.Template.Spec.Containers { if *cnt.Name == "driver" { podmonAPIPort := getResiliencyEnv(*resiliencyModule, cr.Spec.Driver.CSIDriverType) diff --git a/pkg/modules/resiliency_test.go b/pkg/modules/resiliency_test.go index 1ee5e62f1..03509f23e 100644 --- a/pkg/modules/resiliency_test.go +++ b/pkg/modules/resiliency_test.go @@ -100,6 +100,34 @@ func TestResiliencyInjectDeployment(t *testing.T) { } return true, *newDeployment, operatorConfig, customResource }, + "success - valid PowerMax driver name": func(*testing.T) (bool, applyv1.DeploymentApplyConfiguration, utils.OperatorConfig, csmv1.ContainerStorageModule) { + customResource, err := getCustomResource("./testdata/cr_powermax_resiliency.yaml") + if err != nil { + panic(err) + } + controllerYAML, err := drivers.GetController(ctx, customResource, operatorConfig, csmv1.PowerMax) + if err != nil { + panic(err) + } + newDeployment, err := ResiliencyInjectDeployment(controllerYAML.Deployment, customResource, operatorConfig, string(csmv1.PowerMax)) + if err != nil { + panic(err) + } + return true, *newDeployment, operatorConfig, customResource + }, + "fail - bad PowerMax config path": func(*testing.T) (bool, applyv1.DeploymentApplyConfiguration, utils.OperatorConfig, csmv1.ContainerStorageModule) { + customResource, err := getCustomResource("./testdata/cr_powermax_resiliency.yaml") + if err != nil { + panic(err) + } + controllerYAML, err := drivers.GetController(ctx, customResource, operatorConfig, csmv1.PowerMax) + if err != nil { + panic(err) + } + tmpOperatorConfig := operatorConfig + tmpOperatorConfig.ConfigDirectory = "bad/path" + return false, controllerYAML.Deployment, tmpOperatorConfig, customResource + }, } for name, tc := range tests { t.Run(name, func(t *testing.T) { diff --git a/pkg/modules/testdata/cr_powermax_resiliency.yaml b/pkg/modules/testdata/cr_powermax_resiliency.yaml new file mode 100644 index 000000000..fb7ff9151 --- /dev/null +++ b/pkg/modules/testdata/cr_powermax_resiliency.yaml @@ -0,0 +1,54 @@ +apiVersion: storage.dell.com/v1 +kind: ContainerStorageModule +metadata: + name: powermax + namespace: powermax +spec: + driver: + csiDriverType: "powermax" + configVersion: v2.10.0 + authSecret: powermax-creds + replicas: 1 + common: + image: "dellemc/csi-powermax:v2.10.0" + imagePullPolicy: IfNotPresent + + modules: + - name: resiliency + configVersion: "v1.10.0" + enabled: true + components: + - name: podmon-controller + image: dellemc/podmon:v1.9.0 + imagePullPolicy: IfNotPresent + args: + - "--labelvalue=csi-powermax" + - "--arrayConnectivityPollRate=60" + - "--skipArrayConnectionValidation=false" + - "--driverPodLabelValue=dell-storage" + - "--ignoreVolumelessPods=false" + - "--arrayConnectivityConnectionLossThreshold=3" + - "--csisock=unix:/var/run/csi/csi.sock" + - "--mode=controller" + - "--driver-config-params=/powermax-config-params/driver-config-params.yaml" + - "--driverPath=csi-powermax.dellemc.com" + - name: podmon-node + image: dellemc/podmon:v1.9.0 + imagePullPolicy: IfNotPresent + envs: + # podmonAPIPort: Defines the port to be used within the kubernetes cluster + # Allowed values: Any valid and free port (string) + # Default value: 8083 + - name: "X_CSI_PODMON_API_PORT" + value: "8083" + args: + - "--labelvalue=csi-powermax" + - "--arrayConnectivityPollRate=60" + - "--leaderelection=false" + - "--driverPodLabelValue=dell-storage" + - "--ignoreVolumelessPods=false" + - "--csisock=unix:/var/lib/kubelet/plugins/powermax.emc.dell.com/csi_sock" + - "--mode=node" + - "--driver-config-params=/powermax-config-params/driver-config-params.yaml" + - "--driverPath=csi-powermax.dellemc.com" + diff --git a/tests/e2e/testfiles/scenarios.yaml b/tests/e2e/testfiles/scenarios.yaml index 117aa6aef..8308f3ea1 100644 --- a/tests/e2e/testfiles/scenarios.yaml +++ b/tests/e2e/testfiles/scenarios.yaml @@ -1505,3 +1505,46 @@ List of E2E Tests Scenarios # cleanup - "Enable forceRemoveDriver on CR [1]" - "Delete custom resource [1]" + +- scenario: "Install Powermax Driver(Standalone), Enable Resiliency" + paths: + - "testfiles/storage_csm_powermax.yaml" + tags: + - "powermax" + - "resiliency" + steps: + - "Given an environment with k8s or openshift, and CSM operator installed" + - "Apply custom resource [1]" + - "Validate custom resource [1]" + - "Validate [powermax] driver from CR [1] is installed" + - "Validate [resiliency] module from CR [1] is not installed" + - "Enable [resiliency] module from CR [1]" + - "Validate [powermax] driver from CR [1] is installed" + - "Validate [resiliency] module from CR [1] is installed" + - "Run custom test" + # cleanup + - "Enable forceRemoveDriver on CR [1]" + - "Delete custom resource [1]" + customTest: + name: CustomTest + run: + - "echo Todo" + +- scenario: "Install Powermax Driver(With Resiliency), Disable Resiliency module" + paths: + - "testfiles/storage_csm_powermax_resiliency.yaml" + tags: + - "powermax" + - "resiliency" + steps: + - "Given an environment with k8s or openshift, and CSM operator installed" + - "Apply custom resource [1]" + - "Validate custom resource [1]" + - "Validate [powermax] driver from CR [1] is installed" + - "Validate [resiliency] module from CR [1] is installed" + - "Disable [resiliency] module from CR [1]" + - "Validate [powermax] driver from CR [1] is installed" + - "Validate [resiliency] module from CR [1] is not installed" + # cleanup + - "Enable forceRemoveDriver on CR [1]" + - "Delete custom resource [1]" diff --git a/tests/e2e/testfiles/storage_csm_powermax.yaml b/tests/e2e/testfiles/storage_csm_powermax.yaml index 63592381f..46f94ea2f 100644 --- a/tests/e2e/testfiles/storage_csm_powermax.yaml +++ b/tests/e2e/testfiles/storage_csm_powermax.yaml @@ -194,3 +194,47 @@ spec: value: "2222" - name: X_CSI_CONFIG_MAP_NAME value: "powermax-reverseproxy-config" + - name: resiliency + # enabled: Enable/Disable Resiliency feature + # Allowed values: + # true: enable Resiliency feature(deploy podmon sidecar) + # false: disable Resiliency feature(do not deploy podmon sidecar) + # Default value: false + enabled: false + configVersion: v1.10.0 + components: + - name: podmon-controller + image: dellemc/podmon:v1.9.0 + imagePullPolicy: IfNotPresent + args: + - "--labelvalue=csi-powermax" + - "--arrayConnectivityPollRate=60" + - "--skipArrayConnectionValidation=false" + - "--driverPodLabelValue=dell-storage" + - "--ignoreVolumelessPods=false" + - "--arrayConnectivityConnectionLossThreshold=3" + # Below 4 args should not be modified. + - "--csisock=unix:/var/run/csi/csi.sock" + - "--mode=controller" + - "--driver-config-params=/powermax-config-params/driver-config-params.yaml" + - "--driverPath=csi-powermax.dellemc.com" + - name: podmon-node + image: dellemc/podmon:v1.9.0 + imagePullPolicy: IfNotPresent + envs: + # podmonAPIPort: Defines the port to be used within the kubernetes cluster + # Allowed values: Any valid and free port (string) + # Default value: 8083 + - name: "X_CSI_PODMON_API_PORT" + value: "8083" + args: + - "--labelvalue=csi-powermax" + - "--arrayConnectivityPollRate=60" + - "--leaderelection=false" + - "--driverPodLabelValue=dell-storage" + - "--ignoreVolumelessPods=false" + # Below 4 args should not be modified. + - "--csisock=unix:/var/lib/kubelet/plugins/powermax.emc.dell.com/csi_sock" + - "--mode=node" + - "--driver-config-params=/powermax-config-params/driver-config-params.yaml" + - "--driverPath=csi-powermax.dellemc.com" diff --git a/tests/e2e/testfiles/storage_csm_powermax_resiliency.yaml b/tests/e2e/testfiles/storage_csm_powermax_resiliency.yaml new file mode 100644 index 000000000..2c2faed66 --- /dev/null +++ b/tests/e2e/testfiles/storage_csm_powermax_resiliency.yaml @@ -0,0 +1,244 @@ +# +# Copyright © 2023 Dell Inc. or its subsidiaries. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +apiVersion: storage.dell.com/v1 +kind: ContainerStorageModule +metadata: + name: powermax + namespace: powermax +spec: + # Add fields here + driver: + csiDriverType: "powermax" + csiDriverSpec: + # fsGroupPolicy: Defines if the underlying volume supports changing ownership and permission of the volume before being mounted. + # Allowed values: ReadWriteOnceWithFSType, File , None + # Default value: ReadWriteOnceWithFSType + fSGroupPolicy: "ReadWriteOnceWithFSType" + # storageCapacity: Helps the scheduler to schedule the pod on a node satisfying the topology constraints, only if the requested capacity is available on the storage array + # Allowed values: + # true: enable storage capacity tracking + # false: disable storage capacity tracking + storageCapacity: true + # Config version for CSI PowerMax v2.10.0 driver + configVersion: v2.10.0 + # replica: Define the number of PowerMax controller nodes + # to deploy to the Kubernetes release + # Allowed values: n, where n > 0 + # Default value: None + replicas: 2 + # Default credential secret for Powermax, if not set it to "" + authSecret: powermax-creds + dnsPolicy: ClusterFirstWithHostNet + forceUpdate: false + forceRemoveDriver: true + common: + # Image for CSI PowerMax driver v2.10.0 + image: dellemc/csi-powermax:v2.10.0 + # imagePullPolicy: Policy to determine if the image should be pulled prior to starting the container. + # Allowed values: + # Always: Always pull the image. + # IfNotPresent: Only pull the image if it does not already exist on the node. + # Never: Never pull the image. + # Default value: None + imagePullPolicy: IfNotPresent + envs: + # X_CSI_MANAGED_ARRAYS: Serial ID of the arrays that will be used for provisioning + # Default value: None + # Examples: "000000000001", "000000000002" + - name: X_CSI_MANAGED_ARRAYS + value: "000000000000,000000000001" + # X_CSI_POWERMAX_ENDPOINT: Address of the Unisphere server that is managing the PowerMax arrays + # In case of multi-array, provide an endpoint of locally attached array + # Default value: None + # Example: https://0.0.0.1:8443 + - name: X_CSI_POWERMAX_ENDPOINT + value: "https://0.0.0.0:8443/" + # X_CSI_K8S_CLUSTER_PREFIX: Define a prefix that is appended onto + # all resources created in the Array + # This should be unique per K8s/CSI deployment + # maximum length of this value is 3 characters + # Default value: None + # Examples: "XYZ", "EMC" + - name: X_CSI_K8S_CLUSTER_PREFIX + value: "XYZ" + # Specify kubelet config dir path. + # Ensure that the config.yaml file is present at this path. + # Default value: None + - name: KUBELET_CONFIG_DIR + value: /var/lib/kubelet + # X_CSI_POWERMAX_PORTGROUPS: Define the set of existing port groups that the driver will use. + # It is a comma separated list of portgroup names. + # Required only in case of iSCSI port groups + # Allowed values: iSCSI Port Group names + # Default value: None + # Examples: "pg1", "pg1, pg2" + - name: X_CSI_POWERMAX_PORTGROUPS + value: "" + # "X_CSI_TRANSPORT_PROTOCOL" can be "FC" or "FIBRE" for fibrechannel, + # "ISCSI" for iSCSI, or "" for autoselection. + # Allowed values: + # "FC" - Fiber Channel protocol + # "FIBER" - Fiber Channel protocol + # "ISCSI" - iSCSI protocol + # "" - Automatic selection of transport protocol + # Default value: "" + - name: X_CSI_TRANSPORT_PROTOCOL + value: "" + # X_CSI_POWERMAX_PROXY_SERVICE_NAME: Refers to the name of the proxy service in kubernetes + # Allowed values: "csipowermax-reverseproxy" + # default values: "csipowermax-reverseproxy" + - name: X_CSI_POWERMAX_PROXY_SERVICE_NAME + value: "csipowermax-reverseproxy" + # VMware/vSphere virtualization support + # set X_CSI_VSPHERE_ENABLED to true, if you to enable VMware virtualized environment support via RDM + # Allowed values: + # "true" - vSphere volumes are enabled + # "false" - vSphere volumes are disabled + # Default value: "false" + - name: "X_CSI_VSPHERE_ENABLED" + value: "false" + # X_CSI_VSPHERE_PORTGROUP: An existing portGroup that driver will use for vSphere + # recommended format: csi-x-VC-PG, x can be anything of user choice + # Allowed value: valid existing port group on the array + # Default value: "" + - name: "X_CSI_VSPHERE_PORTGROUP" + value: "" + # X_CSI_VSPHERE_HOSTNAME: An existing host(initiator group)/ host group(cascaded initiator group) that driver will use for vSphere + # this host should contain initiators from all the ESXs/ESXi host where the cluster is deployed + # recommended format: csi-x-VC-HN, x can be anything of user choice + # Allowed value: valid existing host/host group on the array + # Default value: "" + - name: "X_CSI_VSPHERE_HOSTNAME" + value: "" + # X_CSI_VCENTER_HOST: URL/endpoint of the vCenter where all the ESX are present + # Allowed value: valid vCenter host endpoint + # Default value: "" + - name: "X_CSI_VCENTER_HOST" + value: "" + controller: + envs: + # X_CSI_HEALTH_MONITOR_ENABLED: Enable/Disable health monitor of CSI volumes from node plugin- volume usage, volume condition + # Allowed values: + # true: enable checking of health condition of CSI volumes + # false: disable checking of health condition of CSI volumes + # Default value: false + - name: X_CSI_HEALTH_MONITOR_ENABLED + value: "false" + node: + envs: + # X_CSI_POWERMAX_ISCSI_ENABLE_CHAP: Determine if the driver is going to configure + # ISCSI node databases on the nodes with the CHAP credentials + # If enabled, the CHAP secret must be provided in the credentials secret + # and set to the key "chapsecret" + # Allowed values: + # "true" - CHAP is enabled + # "false" - CHAP is disabled + # Default value: "false" + - name: X_CSI_POWERMAX_ISCSI_ENABLE_CHAP + value: "false" + # X_CSI_HEALTH_MONITOR_ENABLED: Enable/Disable health monitor of CSI volumes from node plugin- volume usage, volume condition + # Allowed values: + # true: enable checking of health condition of CSI volumes + # false: disable checking of health condition of CSI volumes + # Default value: false + - name: X_CSI_HEALTH_MONITOR_ENABLED + value: "false" + # X_CSI_TOPOLOGY_CONTROL_ENABLED provides a way to filter topology keys on a node based on array and transport protocol + # if enabled, user can create custom topology keys by editing node-topology-config configmap. + # Allowed values: + # true: enable the filtration based on config map + # false: disable the filtration based on config map + # Default value: false + - name: X_CSI_TOPOLOGY_CONTROL_ENABLED + value: "false" + # X_CSI_MAX_VOLUMES_PER_NODE: Defines the maximum Powermax volumes that the controller can publish to the node + # Allowed values: Any value greater than or equal to 0 + # Default value: "0" + - name: X_CSI_MAX_VOLUMES_PER_NODE + value: "0" + sideCars: + # health monitor is disabled by default, refer to driver documentation before enabling it + - name: external-health-monitor + enabled: false + args: [ "--monitor-interval=60s" ] + + modules: + # CSI Powermax Reverseproxy is a mandatory module for Powermax + - name: csireverseproxy + # enabled: Always set to true + enabled: true + configVersion: v2.9.0 + forceRemoveModule: true + components: + - name: csipowermax-reverseproxy + # image: Define the container images used for the reverse proxy + # Default value: None + # Example: "csipowermax-reverseproxy:v2.9.0" + image: dellemc/csipowermax-reverseproxy:v2.9.0 + envs: + # "tlsSecret" defines the TLS secret that is created with certificate + # and its associated key + # Default value: None + # Example: "tls-secret" + - name: X_CSI_REVPROXY_TLS_SECRET + value: "csirevproxy-tls-secret" + - name: X_CSI_REVPROXY_PORT + value: "2222" + - name: X_CSI_CONFIG_MAP_NAME + value: "powermax-reverseproxy-config" + - name: resiliency + # enabled: Enable/Disable Resiliency feature + # Allowed values: + # true: enable Resiliency feature(deploy podmon sidecar) + # false: disable Resiliency feature(do not deploy podmon sidecar) + # Default value: false + enabled: true + configVersion: v1.10.0 + components: + - name: podmon-controller + image: dellemc/podmon:v1.9.0 + imagePullPolicy: IfNotPresent + args: + - "--labelvalue=csi-powermax" + - "--arrayConnectivityPollRate=60" + - "--skipArrayConnectionValidation=false" + - "--driverPodLabelValue=dell-storage" + - "--ignoreVolumelessPods=false" + - "--arrayConnectivityConnectionLossThreshold=3" + # Below 4 args should not be modified. + - "--csisock=unix:/var/run/csi/csi.sock" + - "--mode=controller" + - "--driver-config-params=/powermax-config-params/driver-config-params.yaml" + - "--driverPath=csi-powermax.dellemc.com" + - name: podmon-node + image: dellemc/podmon:v1.9.0 + imagePullPolicy: IfNotPresent + envs: + # podmonAPIPort: Defines the port to be used within the kubernetes cluster + # Allowed values: Any valid and free port (string) + # Default value: 8083 + - name: "X_CSI_PODMON_API_PORT" + value: "8083" + args: + - "--labelvalue=csi-powermax" + - "--arrayConnectivityPollRate=60" + - "--leaderelection=false" + - "--driverPodLabelValue=dell-storage" + - "--ignoreVolumelessPods=false" + # Below 4 args should not be modified. + - "--csisock=unix:/var/lib/kubelet/plugins/powermax.emc.dell.com/csi_sock" + - "--mode=node" + - "--driver-config-params=/powermax-config-params/driver-config-params.yaml" + - "--driverPath=csi-powermax.dellemc.com"