The csi-scsi-generic module is designed to manage volumes on storage systems connected over SCSI. It enables creating StorageClass resources in Kubernetes using the SCSIStorageClass custom resource.

For more details about the module, refer to the module documentation.

Module architecture

The following simplifications are made in the diagram:

  • The diagram shows containers in different pods interacting directly with each other. In reality, they communicate via the corresponding Kubernetes Services (internal load balancers). Service names are omitted if they are obvious from the diagram context. Otherwise, the Service name is shown above the arrow.
  • Pods may run multiple replicas. However, each pod is shown as a single replica in the diagram.

The Level 2 C4 architecture of the csi-scsi-generic module and its interactions with other components of Deckhouse Kubernetes Platform (DKP) are shown in the following diagram:

csi-scsi-generic module architecture

Module components

The module consists of the following components:

  1. Controller: A controller that reconciles the following custom resources:

    • SCSITarget: Describes a storage connection endpoint (iSCSI/FC).
    • SCSIDevice: Describes a discovered SCSI device.
    • PendingResizeRequest: Represents a request for deferred PVC expansion when the requested size is larger than the current device size.
    • SCSIStorageClass: Defines configuration for Kubernetes StorageClass.
    • BlockDeviceFilter: Specifies filters for selecting physical SCSI devices that can be used to create volumes in the system. Provides flexible management of the available device pool by setting rules based on device attributes and including/excluding specific devices.

    SCSIStorageClass defines the device selector (scsiDeviceSelector), reclaim policy, and volume cleanup parameters.

    It consists of the following containers:

    • controller: Main container.
    • iscsi-command-service: Sidecar container implementing SCSI device discovery.
  2. CSI driver (csi-scsi-generic): CSI driver implementation for the scsi-generic.csi.storage.deckhouse.io provisioner. To study the architecture of the csi-scsi-generic CSI driver, refer to the CSI driver documentation page.

Module interactions

The module interacts with the following components:

  1. Kube-apiserver:

    • Watches PersistentVolume, PersistentVolumeClaim, VolumeAttachment, and StorageClass resources.
    • Reconciles BlockDeviceFilter, SCSITarget, SCSIDevice, PendingResizeRequest, and SCSIStorageClass custom resources.
    • Creates StorageClass resources.
  2. SCSI-connected storage systems: Coordinates the usage of available SCSI devices, including their binding and cleanup, as well as node attachment.

Additional resources