Installation Guide

  1. Set up a Kubernetes cluster following the official documentation.
  2. Proceed to the Prerequisite.
  3. Complete the base installation.
  4. Proceed with module installation.

Operator Installation

To deploy the Operator, follow the instructions available here.


Install Driver

  1. Create Namespace:

      kubectl create namespace powermax
    
  2. Create PowerMax credentials:

    a. Create a file called secret.yaml or pick a sample that has Powermax array connection details:

    storageArrays:
      - storageArrayId: "000000000001"
        primaryEndpoint: https://primary-1.unisphe.re:8443
        backupEndpoint: https://backup-1.unisphe.re:8443
    managementServers:
      - endpoint: https://primary-1.unisphe.re:8443
        username: admin
        password: password
        skipCertificateValidation: true
      - endpoint: https://backup-1.unisphe.re:8443
        username: admin2
        password: password2
        skipCertificateValidation: false
        certSecret: primary-cert
    

    After editing the file, run this command to create a secret.yaml called powermax-creds. If you are using a different namespace/secret name, just substitute those into the command.

      kubectl create secret generic powermax-creds --namespace powermax --from-file=config=secret.yaml
    
  3. Create Powermax Array Configmap:

    Note: powermax-array-config is deprecated and remains for backward compatibility only. You can skip creating it and instead add values for X_CSI_MANAGED_ARRAYS, X_CSI_TRANSPORT_PROTOCOL, and X_CSI_POWERMAX_PORTGROUPS in the sample files.

    Create a configmap using the sample file here. Fill in the appropriate values for driver configuration.

       # To create this configmap use: kubectl create -f powermax-array-config.yaml
       apiVersion: v1
       kind: ConfigMap
       metadata:
         name: powermax-array-config
         namespace: powermax
       data:
         powermax-array-config.yaml: |
           # List of comma-separated port groups (ISCSI only). Example: PortGroup1, portGroup2 Required for iSCSI only
           X_CSI_POWERMAX_PORTGROUPS: ""
           # Choose which transport protocol to use (ISCSI, FC, NVMETCP, auto) defaults to auto if nothing is specified
           X_CSI_TRANSPORT_PROTOCOL: ""
           # IP address of the Unisphere for PowerMax (Required), Defaults to https://0.0.0.0:8443
           X_CSI_POWERMAX_ENDPOINT: "https://10.0.0.0:8443" 
           # List of comma-separated array ID(s) which will be managed by the driver (Required)
           X_CSI_MANAGED_ARRAYS: "000000000000,000000000000,"
    
  4. Install Driver

    i. Create a CR (Custom Resource) for PowerMax using the sample files provided

    a. Default Configuration: Use the sample file for default settings. Modify if needed.

    [OR]

    b. Detailed Configuration: Use the sample file for detailed settings or use Wizard to generate the sample file.

    • Users should configure the parameters in CR. The following table lists the primary configurable parameters of the PowerMax driver and their default values:
    Parameters

    ii. Confirm that value of X_CSI_REVPROXY_USE_SECRET is set to true.

    iii. Create PowerMax custom resource:

    kubectl create -f <input_sample_file.yaml>
    

    This command will deploy the CSI PowerMax driver in the namespace specified in the input YAML file.

    • Check driver pods status by running the appropriate command
      kubectl get all -n powermax
      
  1. Verify the installation as mentioned below

    • Check if ContainerStorageModule CR is created successfully using the command below:
      kubectl get csm/powermax -n powermax -o yaml
      
    • Check the status of the CR to verify if the driver installation is in the Succeeded state. If the status is not Succeeded, see the Troubleshooting guide for more information.
  2. Refer Volume Snapshot Class and Storage Class for the sample files.

Other features to enable

Dynamic Logging Configuration

This feature is introduced in CSI Driver for powermax version 2.0.0.

As part of driver installation, a ConfigMap with the name powermax-config-params is created using the manifest located in the sample file. This ConfigMap contains an attribute CSI_LOG_LEVEL which specifies the current log level of the CSI driver. To set the default/initial log level user can set this field during driver installation.

To update the log level dynamically user has to edit the ConfigMap powermax-config-params and update CSI_LOG_LEVEL to the desired log level.

kubectl edit configmap -n powermax powermax-config-params

Volume Health Monitoring

This feature is introduced in CSI Driver for PowerMax version 2.2.0.

Volume Health Monitoring feature is optional and by default this feature is disabled for drivers when installed via CSM operator.

To enable this feature, set X_CSI_HEALTH_MONITOR_ENABLED to true in the driver manifest under controller and node section. Also, install the external-health-monitor from sideCars section for controller plugin. To get the volume health state value under controller should be set to true as seen below. To get the volume stats value under node should be set to true.

     # Install the 'external-health-monitor' sidecar accordingly.
        # Allowed values:
        #   true: enable checking of health condition of CSI volumes
        #   false: disable checking of health condition of CSI volumes
        # Default value: false
     controller:
       envs:
         - name: X_CSI_HEALTH_MONITOR_ENABLED
           value: "true"
     node:
       envs:
        # X_CSI_HEALTH_MONITOR_ENABLED: Enable/Disable health monitor of CSI volumes from node plugin - volume usage
        # 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: "true"

Support for custom topology keys

This feature is introduced in CSI Driver for PowerMax version 2.3.0.

Support for custom topology keys is optional and by default this feature is disabled for drivers when installed via CSM operator.

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.

  1. To enable this feature, set X_CSI_TOPOLOGY_CONTROL_ENABLED to true in the driver manifest under node section.

       # 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"
    
  2. Edit the sample config map “node-topology-config” as described here with appropriate values: Example:

            kind: ConfigMap
            metadata:
              name: node-topology-config
              namespace: powermax
            data:
              topologyConfig.yaml: |
                allowedConnections:
                  - nodeName: "node1"
                    rules:
                      - "000000000001:FC"
                      - "000000000002:FC"
                  - nodeName: "*"
                    rules:
                      - "000000000002:FC"
                deniedConnections:
                  - nodeName: "node2"
                    rules:
                      - "000000000002:*"
                  - nodeName: "node3"
                    rules:
                      - "*:*"
    
    Parameters

  1. Run following command to create the configmap
kubectl create -f topologyConfig.yaml

Note: Name of the configmap should always be node-topology-config.



The driver and modules versions installable with the Container Storage Modules Operator Click Here