Available with limitations in: CSE Lite (1.73), CSE Pro (1.73)
Available without limitations in: EE
The module lifecycle stage: General Availability
The module has requirements for installation
The module installs and configures the CSI driver for Huawei SAN. The module allows you to create a StorageClass in Kubernetes by creating Kubernetes custom resources HuaweiStorageClass.
The user is not allowed to create a StorageClass for the csi.huawei.com CSI driver.
Currently, supports DSS Huawei Dorado storage devices. For other Huawei SAN support please contact tech support.
Volume snapshots require a module that provides the snapshot.storage.k8s.io CRDs, for example snapshot-controller. Without it, the rest of the module keeps working and no VolumeSnapshotClass is created.
Supported access modes for the module: RWO, RWX — only in DVP.
System requirements and recommendations
Requirements
- Presence of a deployed and configured Huawei SAN.
- Unique iqn in /etc/iscsi/initiatorname.iscsi on each of Kubernetes Nodes
Quickstart guide
Note that all commands must be run on a machine that has administrator access to the Kubernetes API.
Enabling module
-
Enable the
csi-huaweimodule. This will result in the following actions across all cluster nodes:- registration of the CSI driver;
- launch of service pods for the
csi-huaweicomponents.
d8 k apply -f - <<EOF apiVersion: deckhouse.io/v1alpha1 kind: ModuleConfig metadata: name: csi-huawei spec: enabled: true version: 1 EOF -
Wait for the module to become
Ready.d8 k get module csi-huawei -w
Creating a StorageClass
To create a StorageClass, you need to use the HuaweiStorageClass and HuaweiStorageConnection resource.
-
Here is an example command to create such a resource:
d8 k apply -f -<<EOF apiVersion: storage.deckhouse.io/v1alpha1 kind: HuaweiStorageConnection metadata: name: huaweistorageconn spec: storageType: OceanStorSAN pools: - test urls: - https://192.168.128.101:8088 login: "admin" password: "<your-password>" protocol: ISCSI portals: - 10.240.0.101 - 10.250.0.101 maxClientThreads: 30 EOFd8 k apply -f -<<EOF apiVersion: storage.deckhouse.io/v1alpha1 kind: HuaweiStorageClass metadata: name: huaweisc spec: fsType: ext4 pool: test reclaimPolicy: Delete storageConnectionName: huaweistorageconn EOF -
Check objects creation (Phase must be
Created):d8 k get huaweistorageconnections.storage.deckhouse.io <huaweistorageconnection name>d8 k get huaweistorageclasses.storage.deckhouse.io <huaweistorageclass name>
Connecting over Fibre Channel
A Fibre Channel connection uses the same HuaweiStorageConnection resource as iSCSI. The only differences are protocol: FC and the absence of portals: that field holds the data-plane IP addresses of the storage system and is used by IP transports only. The urls field still points to the management interface, because the driver talks to the storage system over the REST API, and Fibre Channel carries the data path only.
-
Here is an example command to create such a resource:
d8 k apply -f -<<EOF apiVersion: storage.deckhouse.io/v1alpha1 kind: HuaweiStorageConnection metadata: name: huawei-fc spec: storageType: OceanStorSAN pools: - prod urls: - https://192.168.128.101:8088 login: "admin" password: "<your-password>" protocol: FC maxClientThreads: 30 EOFd8 k apply -f -<<EOF apiVersion: storage.deckhouse.io/v1alpha1 kind: HuaweiStorageClass metadata: name: huawei-fc-sc spec: fsType: ext4 pool: prod reclaimPolicy: Delete storageConnectionName: huawei-fc EOF
Keep the following in mind:
- The
storageType,protocolandmaxClientThreadsfields are immutable. To switch an existing connection fromISCSItoFC, recreate theHuaweiStorageConnectionresource and theHuaweiStorageClassresources referencing it. - The supported protocols are
ISCSI,FC,ROCE,FC-NVME,DPCandSCSI. For NVMe over Fibre Channel, useFC-NVMEinstead ofFC. - Zoning on the fabric and a host (or host group) holding the WWPNs of the node HBAs must be configured on the storage system beforehand. The driver looks the hosts up by their WWPNs, but it does not create zones.
- The nodes need the
multipath-tools(device-mapper-multipath) andsg3_utilspackages. They are installed by theNodeGroupConfigurationresources of the module, the same ones that are used for iSCSI. - The
topology.kubernetes.io/protocol.fclabel is set by the module controller on the nodes matching the module node selector, so no manual labeling is required.
Checking module health
You can verify the functionality of the module using the corresponding FAQ section.