Installation Guide

  1. Set up an OpenShift cluster following the official documentation.
  2. Proceed to the Prerequisite.
  3. Complete the base installation.


Before you install CSI Driver for Unity XT, verify the requirements that are mentioned in this topic are installed and configured.

Requirements

  • Install Kubernetes or OpenShift (see supported versions)
  • To use FC protocol, the host must be zoned with Unity XT array and Multipath needs to be configured
  • To use iSCSI protocol, iSCSI initiator utils packages needs to be installed and Multipath needs to be configured
  • To use NFS protocol, there is no prerequisite on Openshift
  1. Complete the zoning of each host with the Unity Storage Array. Please refer the Host Connectivity Guide for the guidelines when setting a Fibre Channel SAN infrastructure.

  2. Verify the initiators of each host are logged in to the Unity Storage Array. CSM will perform the Host Registration of each host with the Unity Array.


  1. Multipathing software configuration

    a. Configure Device Mapper MPIO for Unity FC connectivity

    Use this command to create the machine configuration to configure the DM-MPIO service on all the worker hosts for FC connectivity.

    oc apply -f 99-workers-multipath-conf.yaml
    

    Example:

    cat <<EOF> multipath.conf
    defaults {
      polling_interval 5
      checker_timeout 15
      disable_changed_wwids yes
      find_multipaths no
    }
    devices {
      device {
        vendor                   DellEMC
        product                  Unity
        detect_prio              "yes"
        path_selector            "queue-length 0"
        path_grouping_policy     "group_by_prio"
        path_checker             tur
        failback                 immediate
        fast_io_fail_tmo         5
        no_path_retry            3
        rr_min_io_rq             1
        max_sectors_kb           1024
        dev_loss_tmo             10
      }
    }  
    EOF
    


    cat <<EOF> 99-workers-multipath-conf.yaml
    apiVersion: machineconfiguration.openshift.io/v1
    kind: MachineConfig
    metadata:
      name: 99-workers-multipath-conf
      labels:
        machineconfiguration.openshift.io/role: worker
    spec:
      config:
        ignition:
          version: 3.4.0
        storage:
          files:
          - contents:
              source: data:text/plain;charset=utf-8;base64,$(cat multipath.conf | base64 -w0)
              verification: {}
            filesystem: root
            mode: 400
            path: /etc/multipath.conf   
    EOF  
    


    b. Enable Linux Device Mapper MPIO

    Use this command to create the machine configuration to enable the DM-MPIO service on all the worker host

    oc apply -f 99-workers-enable-multipathd.yaml
    

    cat << EOF > 99-workers-enable-multipathd.yaml 
    apiVersion: machineconfiguration.openshift.io/v1
    kind: MachineConfig
    metadata:
      name: 99-workers-enable-multipathd.yaml
      labels:
        machineconfiguration.openshift.io/role: worker
    spec:
      config:
        ignition:
          version: 3.4.0  
        systemd:
          units:
          - name: "multipathd.service"
            enabled: true
    EOF
    

  1. Complete the iSCSI network configuration to connect the hosts with the Unity Storage array. Please refer the host connectivity guide. for the best practices for attaching the hosts to a Unity storage array.

  2. Verify the initiators of each host are logged in to the Unity Storage Array. CSM will perform the Host Registration of each host with the Unity Array.

  3. Enable iSCSI service

    Use this command to create the machine configuration to enable the iscsid service.

    oc apply -f 99-workers-enable-iscsid.yaml
    

    Example:

    cat <<EOF> 99-workers-enable-iscsid.yaml
    apiVersion: machineconfiguration.openshift.io/v1
    kind: MachineConfig
    metadata:
      name: 99-workers-enable-iscsid
      labels:
        machineconfiguration.openshift.io/role: worker
    spec:
      config:
        ignition:
          version: 3.4.0  
        systemd:
          units:
          - name: "iscsid.service"
            enabled: true
    

  1. Multipathing software configuration

    a. Configure Device Mapper MPIO for Unity iSCSI connectivity

    Use this command to create the machine configuration to configure the DM-MPIO service on all the worker hosts for iSCSI connectivity.

    oc apply -f 99-workers-multipath-conf.yaml
    

    cat <<EOF> multipath.conf
    defaults {
      polling_interval 5
      checker_timeout 15
      disable_changed_wwids yes
      find_multipaths no
    }
    devices {
      device {
        vendor                   DellEMC
        product                  Unity
        detect_prio              "yes"
        path_selector            "queue-length 0"
        path_grouping_policy     "group_by_prio"
        path_checker             tur
        failback                 immediate
        fast_io_fail_tmo         5
        no_path_retry            3
        rr_min_io_rq             1
        max_sectors_kb           1024
        dev_loss_tmo             10
      }
    }  
    EOF
    

    cat <<EOF> 99-workers-multipath-conf.yaml
    apiVersion: machineconfiguration.openshift.io/v1
    kind: MachineConfig
    metadata:
      name: 99-workers-multipath-conf
      labels:
        machineconfiguration.openshift.io/role: worker
    spec:
      config:
        ignition:
          version: 3.4.0
        storage:
          files:
          - contents:
              source: data:text/plain;charset=utf-8;base64,$(cat multipath.conf | base64 -w0)
              verification: {}
            filesystem: root
            mode: 400
            path: /etc/multipath.conf   
    EOF  
    


    b. Enable Linux Device Mapper MPIO

    Use this command to create the machine configuration to enable the DM-MPIO service on all the worker host

    oc apply -f 99-workers-enable-multipathd.yaml
    

    cat << EOF > 99-workers-enable-multipathd.yaml 
    apiVersion: machineconfiguration.openshift.io/v1
    kind: MachineConfig
    metadata:
      name: 99-workers-enable-multipathd.yaml
      labels:
        machineconfiguration.openshift.io/role: worker
    spec:
      config:
        ignition:
          version: 3.4.0  
        systemd:
          units:
          - name: "multipathd.service"
            enabled: true
    EOF
    



Operator Installation


  1. On the OpenShift console, navigate to OperatorHub and use the keyword filter to search for Dell Container Storage Modules.

  2. Click Dell Container Storage Modules tile

  3. Keep all default settings and click Install.


    Verify that the operator is deployed

    oc get operators
    
    NAME                                                          AGE
    dell-csm-operator-certified.openshift-operators               2d21h
    
    oc get pod -n openshift-operators
    
    NAME                                                       READY   STATUS       RESTARTS      AGE
    dell-csm-operator-controller-manager-86dcdc8c48-6dkxm      2/2     Running      21 (19h ago)  2d21h
    

CSI Driver Installation


  1. Create project:

    Use this command to create new project. You can use any project name instead of unity.

    oc new-project unity
    
  2. Create config secret:

    Create a file called config.yaml or use sample:

    Example:

    cat << EOF > config.yaml
     storageArrayList:
       - arrayId: "APM00******1"                 # unique array id of the Unisphere array
         username: "user"                        # username for connecting to API
         password: "password"                    # password for connecting to API
         endpoint: "https://10.1.1.1/"           # full URL path to the Unity XT API
         skipCertificateValidation: true         # indicates if client side validation of (management)server's certificate can be skipped
         isDefault: true                         # treat current array as a default (would be used by storage classes without arrayID parameter)
    EOF
    

    Add blocks for each unity array in config.yaml, and include both source and target arrays if replication is enabled.


    Edit the file, then run the command to create the unity-config.

    oc create secret generic unity-config --from-file=config=config.yaml -n unity --dry-run=client -oyaml > secret-unity-config.yaml
    

    Use this command to create the config:

    oc apply -f secret-unity-config.yaml
    

    Use this command to replace or update the config:

    oc replace -f secret-unity-config.yaml --force
    

    Verify config secret is created.

    oc get secret -n unity
    
    NAME                 TYPE        DATA   AGE
    unity-config         Opaque      1      3h7m
    

  1. Create Custom Resource ContainerStorageModule for unity.

    Use this command to create the ContainerStorageModule Custom Resource:

    oc create -f csm-unity.yaml
    

    Example:

    cat << EOF > csm-unity.yaml
    apiVersion: storage.dell.com/v1
    kind: ContainerStorageModule
    metadata:
      name: unity
      namespace: unity
    spec:
      driver:
        csiDriverType: "unity"
        configVersion: v2.14.0
        forceRemoveDriver: true
    EOF 
    

    Detailed Configuration: Use the sample file for detailed settings.

    To set the parameters in CR. The table shows the main settings of the unity driver and their defaults.

    Parameters
    Check if ContainerStorageModule CR is created successfully:
    oc get csm unity -n unity
    
    NAME        CREATIONTIME   CSIDRIVERTYPE   CONFIGVERSION       STATE
    unity       3h             unity           v2.14.0             Succeeded      
    

    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.


  1. Create Storage class:

    Use this command to create the Storage Class:

    oc apply -f sc-unity.yaml
    

    Example:

    cat << EOF > sc-unity.yaml
    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name:  unity-<ARRAY_ID>-iscsi
    provisioner: csi-unity.dellemc.com
    reclaimPolicy: Delete
    allowVolumeExpansion: true
    volumeBindingMode: Immediate
    parameters: 
      protocol: iSCSI 
      arrayId: <ARRAY_ID>
      storagepool: <STORAGE_POOL> 
      thinProvisioned: "true"
      tieringPolicy: <TIERING_POLICY>
      hostIOLimitName: <HOST_IO_LIMIT_NAME>
      csi.storage.k8s.io/fstype: ext4
    EOF
    

    Replace placeholders with actual values for your unity array and various storage class sample refer here

    Verify Storage Class is created:

    oc get storageclass unity
    
    NAME                    PROVISIONER                    RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
    unity (default)         csi-unity.dellemc.com          Delete          Immediate           true                   3h8m
    

  2. Create Volume Snapshot Class:

    Use this command to create the Volume Snapshot:

    oc apply -f vsclass-unity.yaml
    

    Example:

    cat << EOF > vsclass-unity.yaml
    apiVersion: snapshot.storage.k8s.io/v1
    kind: VolumeSnapshotClass
    metadata:
      name: vsclass-unity 
    driver: csi-unity.dellemc.com
    deletionPolicy: Delete
    EOF 
    

    Verify Volume Snapshot Class is created:

    oc get volumesnapshotclass
    
    NAME                      DRIVER                              DELETIONPOLICY   AGE
    vsclass-unity             csi-unity.dellemc.com               Delete           3h9m
    

Configurations


Persistent Volume Claim
Volume Snapshot