Available in:  EE

Experimental version. The functionality may undergo significant changes. Compatibility with future versions is not guaranteed.

The module provides a CSI for managing volumes using storage systems connected via SCSI.

Currently supported features:

  • LUN discovery via iSCSI
  • Creation of PV from pre-provisioned LUNs
  • Deletion of PV and wiping data on the LUN
  • Connecting LUN to nodes via iSCSI
  • Creating multipath devices and mounting them to pods
  • Detaching LUN from nodes

Not supported:

  • LUN creation on the storage system
  • Resizing LUN
  • Creating snapshots

System Requirements and Recommendations

Requirements

  • A deployed and configured storage system with SCSI connections.
  • Unique iqn values in /etc/iscsi/initiatorname.iscsi on each Kubernetes Node.

Quick Start

All commands should be executed on a machine with access to the Kubernetes API and administrator rights.

Enabling the Module

  • Enable the csi-scsi-generic module. This will ensure that the following happens on all cluster nodes:
    • The CSI driver is registered.
    • Auxiliary pods for the csi-scsi-generic components are launched.
kubectl apply -f - <<EOF
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
  name: csi-scsi-generic
spec:
  enabled: true
  version: 1
EOF
  • Wait for the module to transition to the Ready state.
kubectl get module csi-scsi-generic -w

Creating an SCSITarget

To create an SCSITarget, use the SCSITarget. An example of commands to create such a resource:

kubectl apply -f -<<EOF
apiVersion: storage.deckhouse.io/v1alpha1
kind: SCSITarget
metadata:
  name: hpe-3par-1
spec:
  deviceTemplate:
    metadata:
      labels:
        my-key: some-label-value
  iSCSI:
    auth:
      login: ""
      password: ""
    iqn: iqn.2000-05.com.3pardata:xxxx1
    portals:
    - 192.168.1.1

---
apiVersion: storage.deckhouse.io/v1alpha1
kind: SCSITarget
metadata:
  name: hpe-3par-2
spec:
  deviceTemplate:
    metadata:
      labels:
        my-key: some-label-value
  iSCSI:
    auth:
      login: ""
      password: ""
    iqn: iqn.2000-05.com.3pardata:xxxx2
    portals:
    - 192.168.1.2
EOF

Note that the example above uses two SCSITargets. You can create multiple SCSITargets for either the same or different storage systems. This allows for the use of multipath to improve failover and performance.

  • To verify that the object has been created (Phase should be Created), run:
kubectl get scsitargets.storage.deckhouse.io <имя scsitarget>

Creating a StorageClass

To create a StorageClass, use the SCSIStorageClass. An example of commands to create such a resource:

kubectl apply -f -<<EOF
apiVersion: storage.deckhouse.io/v1alpha1
kind: SCSIStorageClass
metadata:
  name: scsi-all
spec:
  scsiDeviceSelector:
    matchLabels:
      my-key: some-label-value
  reclaimPolicy: Delete
EOF

Pay attention to the scsiDeviceSelector. This field is used to select the SCSITarget for PV creation based on labels. In the example above, all SCSITargets with the label my-key: some-label-value are selected. This label will be applied to all devices detected within the specified SCSITarget.

  • To verify that the object has been created (Phase should be Created), run:
kubectl get scsistorageclasses.storage.deckhouse.io <имя scsistorageclass>