Installing PowerFlex CSI Driver via Operator

The CSI Driver for Dell EMC PowerFlex can be installed via the Dell CSI Operator.

To deploy the Operator, follow the instructions available here.

There are sample manifests provided which can be edited to do an easy installation of the driver. Note that the deployment of the driver using the operator does not use any Helm charts. The installation and configuration parameters will be slightly different from the ones specified via the Helm installer.

Kubernetes Operators make it easy to deploy and manage the entire lifecycle of complex Kubernetes applications. Operators use Custom Resource Definitions (CRD) which represents the application and use custom controllers to manage them.


SDC Deployment for Operator

  • This feature deploys the sdc kernel modules on all nodes with the help of an init container.
  • For non-supported versions of the OS also do the manual SDC deployment steps given below. Refer to https://hub.docker.com/r/dellemc/sdc for supported versions.
  • Note: When the driver is created, MDM value for initContainers in driver CR is set by the operator from mdm attributes in the driver configuration file, config.json. An example of config.json is below in this document. Do not set MDM value for initContainers in the driver CR file manually.
  • Note: To use an sdc-binary module from customer ftp site:
    • Create a secret, sdc-repo-secret.yaml to contain the credentials for the private repo. To generate the base64 encoding of a credential:
     echo -n <credential>| base64 -i

secret sample to use:

     apiVersion: v1
     kind: Secret
       name: sdc-repo-creds
       namespace: vxflexos
     type: Opaque
       # set username to the base64 encoded username, sdc default is
         username: <username in base64>
       # set password to the base64 encoded password, sdc default is
         password: <password in base64>
  • Create secret for FTP side by using the command kubectl create -f sdc-repo-secret.yaml.
  • Optionally, enable sdc monitor by uncommenting the section for sidecar in manifest yaml.
Example CR: config/samples/vxflex_v140_ops_46.yaml
    # Uncomment the following section if you want to run the monitoring sidecar
      - name: sdc-monitor
        - name: HOST_PID
          value: "1"
        - name: MDM
          value: ""
      - image: dellemc/sdc:
        imagePullPolicy: IfNotPresent
        name: sdc
          - name: MDM
            value: ""

Manual SDC Deployment

For detailed PowerFlex installation procedure, see the Dell EMC PowerFlex Deployment Guide. Install the PowerFlex SDC as follows:


  1. Download the PowerFlex SDC from Dell EMC Online support. The filename is EMC-ScaleIO-sdc-*.rpm, where * is the SDC name corresponding to the PowerFlex installation version.
  2. Export the shell variable MDM_IP in a comma-separated list using export MDM_IP=xx.xxx.xx.xx,xx.xxx.xx.xx, where xxx represents the actual IP address in your environment. This list contains the IP addresses of the MDMs.
  3. Install the SDC per the Dell EMC PowerFlex Deployment Guide:
    • For Red Hat Enterprise Linux and CentOS, run rpm -iv ./EMC-ScaleIO-sdc-*.x86_64.rpm, where * is the SDC name corresponding to the PowerFlex installation version.
  4. To add more MDM_IP for multi-array support, run /opt/emc/scaleio/sdc/bin/drv_cfg --add_mdm --ip 10.xx.xx.xx.xx,10.xx.xx.xx

Install Driver

  1. Create namespace: Run kubectl create namespace <driver-namespace> command using the desired name to create the namespace.

  2. Prepare the config.json for driver configuration. The following table lists driver configuration parameters for multiple storage arrays.

    Parameter Description Required Default
    username Username for accessing PowerFlex system true -
    password Password for accessing PowerFlex system true -
    systemID System name/ID of PowerFlex system true -
    endpoint REST API gateway HTTPS endpoint for PowerFlex system true -
    insecure Determines if the driver is going to validate certs while connecting to PowerFlex REST API interface true true
    isDefault An array having isDefault=true is for backward compatibility. This parameter should occur once in the list false false
    mdm mdm defines the MDM(s) that SDC should register with on start. This should be a list of MDM IP addresses or hostnames separated by comma true -

    Example: config.json

            "username": "admin",
            "password": "password",
            "systemID": "ID1",
            "endpoint": "",
            "insecure": true,
            "isDefault": true,
            "mdm": ","
            "username": "admin",
            "password": "password",
            "systemID": "ID2",
            "endpoint": "",
            "insecure": true,
            "mdm": ","

    After editing the file, run the following command to create a secret called vxflexos-config kubectl create secret generic vxflexos-config -n <driver-namespace> --from-file=config=config.json

    Use the following command to replace or update the secret:

    kubectl create secret generic vxflexos-config -n <driver-namespace> --from-file=config=config.json -o yaml --dry-run=client | kubectl replace -f -


    • The user needs to validate the JSON syntax and array-related key/values while replacing the vxflexos-creds secret.
    • If you update the secret, you must reinstall the driver.
    • System ID, MDM configuration, etc. now are taken directly from config.json. MDM provided in the input_sample_file.yaml will be overidden with MDM values in config.json.
  3. Create a Custom Resource (CR) for PowerFlex using the sample files provided here.

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

    Parameter Description Required Default
    replicas Controls the number of controller pods you deploy. If the number of controller pods is greater than the number of available nodes, excess pods will become stay in a pending state. Defaults are 2 which allows for Controller high availability. Yes 2
    Common parameters for node and controller
    X_CSI_VXFLEXOS_ENABLELISTVOLUMESNAPSHOT Enable list volume operation to include snapshots (since creating a volume from a snap actually results in a new snap) No false
    X_CSI_VXFLEXOS_ENABLESNAPSHOTCGDELETE Enable this to automatically delete all snapshots in a consistency group when a snap in the group is deleted No false
    X_CSI_DEBUG To enable debug mode No false
    X_CSI_ALLOW_RWO_MULTI_POD_ACCESS Setting allowRWOMultiPodAccess to “true” will allow multiple pods on the same node to access the same RWO volume. This behavior conflicts with the CSI specification version 1.3. NodePublishVolume description that requires an error to be returned in this case. However, some other CSI drivers support this behavior and some customers desire this behavior. Customers use this option at their own risk. No false
  5. Execute the kubectl create -f <input_sample_file.yaml> command to create PowerFlex custom resource. This command will deploy the CSI-PowerFlex driver.