Installation Guide
- Set up an OpenShift cluster following the official documentation.
- Proceed to the Prerequisite.
- 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
-
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.
-
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.
-
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
-
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.
-
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.
-
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
-
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
-
On the OpenShift console, navigate to OperatorHub and use the keyword filter to search for Dell Container Storage Modules.
-
Click Dell Container Storage Modules tile
-
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
-
Create project:
Use this command to create new project. You can use any project name instead of
unity
.oc new-project unity
-
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
-
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.
-
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.
-
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
-
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