The module lifecycle stage: General Availability
The module has requirements for installation
v0.2.28
Release date: 2026-10-01
The HPE CSI Driver and both CSPs move to v3.3.0, every node now gets the iSCSI stack it lacks from the module’s own package without asking the distribution’s repositories, and the module grants its permissions in the capability/scope RBAC model of DKP 1.78.
Highlights
Changes in this release:
- The HPE CSI Driver and both Container Storage Providers,
alletra-9000-primera-and-3par-cspandalletra-6000-and-nimble-csp, are updated from v3.1.0 to v3.3.0, with upstream fixes for attach, detach and multipath handling and for memory use of the CSP. - The
NodeGroupConfigurationno longer asks the node’s package manager foropen-iscsi,multipath-toolsandsg3-utils. Every node gets the module’siscsi-toolspackage, which keeps what the host has and supplies only what it lacks, so a node with no route to its repositories no longer waits out the package manager on every bashible run. - On DKP 1.78 and later the module’s access roles are
d8:system-capability:csi-hpe:viewandd8:system-capability:csi-hpe:editof the capability/scope model; below 1.78 the module keepsd8:manage:permission:module:csi-hpe:viewandd8:manage:permission:module:csi-hpe:edit.
New features
This release adds:
- On DKP 1.78 and later the module renders the ClusterRoles
d8:system-capability:csi-hpe:view(readHPEStorageClassandHPEStorageConnection) andd8:system-capability:csi-hpe:edit(create, update and delete them) withrbac.deckhouse.io/kind: capabilityandrbac.deckhouse.io/scope: system, so DKP aggregates them into the storage viewer and manager roles of its new RBAC model. The module picks the model from the DKP version of the cluster; on clusters below 1.78 the roles stayd8:manage:permission:module:csi-hpe:viewandd8:manage:permission:module:csi-hpe:edit, unchanged.
Improvements
This release improves:
- The iSCSI stack on a node comes only from the module’s own
iscsi-toolspackage. The package decides for each pair separately —iscsiadmwithiscsid,multipathwithmultipathd: a pair the host has of its own stays the host’s and only the distribution’s unit is enabled, a pair the host lacks is installed under/var/lib/deckhouse/sds/csi-hpewith a unit of the module’s. A host withopen-iscsibut withoutmultipath-toolstherefore gets the module’smultipathd, where the package used to step aside as soon as the host had aniscsiadm. Thefind_multipaths nosetting and the 3PAR device block reach every node, whichevermultipathdruns there.sg3-utilsis no longer installed: the driver does not call any of its tools. - When the tools of a node change after the package was installed — the host lost
iscsiadmormultipathd, or the distribution’s package was installed next to the module’s — theNodeGroupConfigurationruns the package’s install again, so the node neither stays without a tool nor runs two daemons side by side until the next module release.
Fixes
This release fixes:
- An upgrade of the
iscsi-toolspackage no longer loses track of the files an earlier version put outside its directory — theiscsiadmwrapper in/usr/local/sbinand the multipath path checkers in/usr/lib/multipath. They used to be taken for the host’s own after an upgrade and were never removed when the package was uninstalled; now they are refreshed and removed with the package.
Security updates
Security updates in this release:
- The
csi-driverbinary is built withgoogle.golang.org/grpcv1.83.2 (was v1.82.1), which closes CVE-2026-84303, CVE-2026-84304 and CVE-2026-84445, and withgolang.org/x/cryptov0.56.0 (was v0.53.0), which closes CVE-2026-56854, CVE-2026-56855 and CVE-2026-78662.
Upgrade notes
Before upgrading, note the following:
- A node that already has
open-iscsiandmultipath-toolsfrom its distribution keeps them and their units; nothing is removed from it,sg3-utilsincluded. A node added after the upgrade no longer gets these packages from the distribution’s repositories: whatever it lacks comes from the module’s package, sod8-csi-hpe-iscsid.serviceord8-csi-hpe-multipathd.serviceruns there instead of the distribution’siscsidormultipathd. - On DKP 1.78 and later the ClusterRoles
d8:manage:permission:module:csi-hpe:viewandd8:manage:permission:module:csi-hpe:editare replaced byd8:system-capability:csi-hpe:viewandd8:system-capability:csi-hpe:edit. Access granted through the storage roles of DKP keeps working; a RoleBinding or ClusterRoleBinding that names one of the old roles directly has to be switched to the new name.
Docs
Documentation changes:
- A FAQ entry describes where
open-iscsiandmultipath-toolson a node come from: how the package decides for each pair, which files it puts outside its directory and when it takes them back, and how to tell from a node which daemons are the host’s and which are the module’s. - The
specfield ofHPEStorageClasshas an English description in the CRD reference; only the Russian one had it before.
Dependencies
Dependency updates:
HPE CSI Driver for Kubernetes:3.1.0→3.3.0(changelog)- Among the upstream fixes: a detach or attach of a PVC no longer detaches or re-enumerates an unrelated multipath device on the node; a multipath map with no path groups left after a SAN switch failure is flushed with
multipath -finstead of a forceddmsetup remove; lower memory use of the node plugin when listing multipath devices.
- Among the upstream fixes: a detach or attach of a PVC no longer detaches or re-enumerates an unrelated multipath device on the node; a multipath map with no path groups left after a SAN switch failure is flushed with
alletra-9000-primera-and-3par-csp:3.1.0→3.3.0(changelog)- Serves
HPEStorageConnectionwithstorageType: Primera3Par. Among the upstream fixes: a publish that fails because the host object on the array was deleted concurrently no longer recordsLunId=-1and blocks every later attach of the volume; ControllerUnpublishVolume no longer leaves a stale export that blocks deleting the volume; the CSP Pod is no longer OOM-killed over and over because of excessive logging; a PVC can be cloned to a larger size than its source.
- Serves
alletra-6000-and-nimble-csp:3.1.0→3.3.0(changelog)- Serves
HPEStorageConnectionwithstorageType: NimbleAlletra.
- Serves
v0.2.27
Release date: 2026-09-09
A node whose repositories cannot install the iSCSI stack now gets it from the module’s own package image, an HPEStorageClass can reserve a share of the filesystem for the superuser, and the deadlock that left single nodes with no working node plugin is fixed.
Highlights
Changes in this release:
- The module installs
open-iscsiandmultipath-toolsfrom its own package image when a node’s repositories cannot provide them. Such a node used to be left as it was, and every attach on it then failed, minutes into mounting a volume, withchroot: failed to run command 'iscsiadm'. - An
HPEStorageClasscan ask for a share of the filesystem to be kept for the superuser — the classic ext4 reserve — with thestorage.deckhouse.io/ext4-reserved-percentannotation. Unless it is asked for, ext4 volumes are now formatted with no reserve at all, where before they lost ext4’s default 5%. - A restart of
node-driver-registrarno longer wedges the node plugin. That deadlock left one or two nodes of a cluster withoutcsi.hpe.comin theirCSINode, unable to attach a volume, while their siblings were fine.
New features
This release adds:
- A node whose package repositories cannot install
open-iscsiandmultipath-toolsnow gets them from the module’s owniscsi-toolspackage image: the payload lands under/var/lib/deckhouse/sds/csi-hpe, every binary runs against its own library path, and two units come up for the daemons,d8-csi-hpe-iscsid.serviceandd8-csi-hpe-multipathd.service. The distribution’s packages stay the preferred path and the two never mix — a node that has aniscsiadmof its own keeps everything of its own, because a client of one version does not speak to aniscsidof another. An/etc/iscsi/initiatorname.iscsithe node already has is left alone, so the node keeps the IQN the array knows it by. Everything else the module configures applies to such a node exactly as to any other, thefind_multipaths nothe driver depends on to see a device-mapper map at all included. storage.deckhouse.io/ext4-reserved-percenton anHPEStorageClasssets the percentage of the filesystem kept for the superuser: a whole number from 0 to 50, default 0. The value reaches the driver as thefsCreateOptionsparameter of the managed StorageClass, because a CSI driver never sees the annotations of a StorageClass. Without the annotation the module now says-m0explicitly, where a baremkfs.ext4used to keep ext4’s default 5%. The reserve applies to volumes created afterwards — an existing filesystem keeps the reserve it was created with — and only to ext4: a class withfsType: xfsis unaffected, since XFS keeps no blocks for the superuser. An invalid value leaves theHPEStorageClasswithReady=Falseand the reason in its status, instead of breaking volume creation later.- The module setting
logLevelsets how much the controller logs:ERROR,WARN,INFO,DEBUGorTRACE,INFOby default. - The controller exports metrics and a ServiceMonitor puts them in front of the cluster’s main Prometheus: what controller-runtime reports for every controller of the module — reconcile counts and durations, workqueue depth, client-go latency. The controller binds its metrics endpoint on
127.0.0.1, and a kube-rbac-proxy in the same pod authorises every scrape.
Fixes
This release fixes:
- A restart of
node-driver-registrarno longer takes the CSI driver with it. The csi-node liveness probe watched a port the registrar serves but was attached to the driver container, and the two deadlocked: the registrar exits by design when registration fails, its port goes with it, the probe kills the driver, the CSI socket disappears, and the restarted registrar can no longer reach it. Nodes came up with the node plugin wedged — a dozen restarts and nocsi.hpe.comin theirCSINode, so no volume could be attached there — while other nodes of the same cluster were fine. The probe now sits on the container that serves it. - A change to the multipath configuration no longer fails on a node where
multipathdis enabled but not started: such a unit refuses a reload outright, the node configuration step then retried forever, and the module’sfind_multipaths nonever reached the daemon — which is what decides whether a single-path LUN gets a device-mapper map at all. The handler restarts the unit when it cannot reload it, and covers the module’s ownd8-csi-hpe-multipathd.serviceas well.
Upgrade notes
Before upgrading, note the following:
- Every StorageClass managed by an
HPEStorageClasswhosefsTypeis ext4 gains thefsCreateOptions: -m0parameter on upgrade. Becauseparametersof an existing StorageClass are immutable in Kubernetes, the controller recreates the class once, on its own. Existing volumes, PVCs and their data are not affected, and a volume created before the upgrade keeps the reserve its filesystem was created with. Nothing has to be done by hand.
Docs
Documentation changes:
- A FAQ entry describes both ways the iSCSI stack reaches a node — the node’s own repositories and the module’s package image: which path is preferred and why, what the fallback puts on the node and where, how to tell from a node which of the two it took, and the two things the fallback deliberately leaves alone.
- A FAQ entry describes the share of a volume kept for the superuser: the annotation, the range of values, that the reserve applies only to volumes created afterwards, and that a class with
fsType: xfsis unaffected. - The Russian reference for
HPEStorageClassmatches the schema again: the fields arestorageConnectionNameandfsType, andaccessProtocolandcpgwere missing from it altogether.spec.controlPlane.addressof anHPEStorageConnectionis now documented as deprecated in favour ofbackendAddress. Both CRD manifests are generated from the Go API types, so the schema and its reference cannot drift apart again.
v0.2.26
- Bugfix: the controller is granted patch on events instead of list - a repeated event write is no longer denied by RBAC
- Optional resources are enabled based on the presence of the CRD in the API, not on the list of enabled modules - the checks are routed through helm_lib_api_version_exists
- CVE fixes
- Base images updated to v2.1.2, Go to 1.26.6 and lib-helm to 1.72.14
v0.2.25
- HPEStorageClass and HPEStorageConnection publish status.conditions and status.observedGeneration, added Ready column. The status.phase field retains the same set of values, but is now calculated from the Ready condition
- Fix: nodes now force find_multipaths no via a dedicated /etc/multipath/conf.d/99-deckhouse-csi-hpe-defaults.conf file, so a LUN exposed over a single path still gets a multipath device and volume staging no longer fails with “device not found with serial”
- Fix: the primera3par-csp and nimble-csp Pods are no longer pinned to a failed node — the tolerations that indefinitely tolerated not-ready and unreachable were removed, so the Deployment reschedules onto a healthy node
- Update base images to v1.3.25, Go 1.26.5 and lib-helm to 1.72.13
v0.2.24
- The snapshot-controller module is no longer a required dependency: VolumeSnapshotClass is created only if the snapshot.storage.k8s.io CRD is present, otherwise HPEStorageConnection is processed without the snapshot part
- Update base images, Go 1.26.5 and lib-helm to 1.72.12
- Fixed a vulnerability in gRPC (GHSA-hrxh-6v49-42gf)
- Internal changes in module assembly
v0.2.23
- Update base images, Go 1.26.5 and lib-helm to 1.72.10
- Internal changes in module assembly
v0.2.22
- Fix: Deckhouse registry access secrets are now limited to the active image source
- Update base images, Go 1.26.5 and lib-helm to 1.72.9
- Internal changes in module assembly
v0.2.21
- Updating container-base images to v1.1.2
v0.2.20
- Transition of the csi-hpe runtime image to the distroless base
v0.2.19
- When forwarding labels from HPEStorageClass to StorageClass, labels with specified ignored prefixes are now excluded
- Update base images and lib-helm to 1.72.0
v0.2.18
- Labels from HPEStorageClass are now forwarded to the managed StorageClass Kubernetes
- Update base images, Go 1.25.10 and lib-helm 1.71.12
v0.2.17
- Internal changes in the structure and assembly of the module
v0.2.16
- Update base images, Go 1.25.10 and lib-helm 1.71.11
- Internal changes to the module assembly
v0.2.15
- Corrections to the module structure
v0.2.14
- Changes in CI: DistroPackagesProxy and env proxy in werf, improvements to CVE scans (role_name, checkout)
- Added user-authz cluster roles in templates
v0.2.13
- Installing packages in NodeGroupConfiguration no longer causes the script to crash on errors
v0.2.12
- Added infrastructure and missing mount points for distroless images
- Update base images, Go and lib-helm (CVE fix)
v0.2.11
- Update base images and golang version
- Updated hooks that work when a module is removed
- Disabled Capacity request from k8s (CSI does not support issuing Capacity)
- Fixes in NGC preparing nodes
- Corrections in module manifests
v0.2.10
- Update CSI version to v3.0.0
- Switch from yum to dnf for package installation on CentOS-like distributions
- Fix CVE
- Updated documentation
- Fix VolumeSnapshotClass annotation in StorageClasses
v0.2.9
- Updated base images versions
v0.2.8
- Updated Go version to 1.24.9
- Updated lib-helm to deckhouse_lib_helm-1.64.1
v0.2.7
- Technical release, internal module improvements
v0.2.6
- Technical release, internal module improvements
v0.2.5
- Added release notes
v0.2.4
- Added additional mountings for containerd v2 support
v0.2.3
- Added information about the need for snapshot-controller for module operation
- Added readonlyRootFilesystem for enhanced module security
v0.2.2
- Added dependency on snapshot-controller
v0.2.1
- Technical release, internal module improvements
v0.2.0
- Complete module refactoring
- Documentation fixes
- CVE fixes, except GHSA-m425-mq94-257g in CSI, requiring long-term dependency analysis (planned)
- CVE-2025-22869 in proprietary binary file
v0.1.4
- Added Deckhouse version requirements (>= 1.67)