Repository navigation
fix(linstor): update piraeus-operator to v2.12.1 - #5166
Conversation
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
No actionable comments were generated in the recent review. Walkthrough
Merge Risk:
|
03dd779 to
994d8c2
Compare
IvanHunters
left a comment
There was a problem hiding this comment.
Verdict
LGTM with non-blocking notes.
No introduced regression on any supported path. The migration init-container fix, the RBAC reduction, the CRD relocation and the carried patches all hold under direct checks. The items below are offline-review limits plus a couple of consistency notes, not defects.
Checked and holds:
- Init-container pin (the core fix). Operator v2.12.1 names its init containers
run-migration(controller) andsetup-lvm-configuration(satellite), and the podTemplate merges byname, so pinning those topiraeusServer.imagereplaces the operator's default image rather than adding a second container. Reverting either pin turnsserver-image_test.yamlred, so the test guards the fix. - RBAC reduction.
charts/piraeus/rbac.yamlis a faithful re-vendor of upstream v2.12.1: cluster-widesecretsread drops to a namespaced Role,pods/execis added; net is a privilege reduction on a system-tier SA that is not tenant-reachable. No snapshotter Secret reference exists in the repo, so losing cluster-wide Secret read is safe for the shipped config. - CRD relocation. The deleted
charts/piraeus/templates/crds.yamlwas already inert (installCRDs: false);piraeus-operator-crdsstill serves the same kinds and its schema change is additive (no newrequired, no version/storage flip). No shrink or downgrade. - charts-direct-edit (flagged MINOR). False positive: every
charts/piraeus/*file is byte-identical to upstream v2.12.1 except the scriptedcrds.yamlremovalmake updatereproduces. - Carried patches. The three server patches and the csi
relocate-after-clonepatchgit apply --checkclean against their pinned upstreams, andBuild packages/system/linstoris green, so the bookworm-to-trixie move builds.
Notes (non-blocking):
- Image digests are not re-pinned.
packages/system/linstor/values.yamlstill pinspiraeus-serverandlinstor-csiat the v1.6.0 build (LINSTOR 1.33.3 / CSI 1.11.2); the bump lives only in the Makefile, Dockerfiles and patches. This reaches no tested path, since the PR e2e rebuilds each image and patches the digest for the run and the release tag bake runsmake imageper unit. But the prior analogous bump (6ac1340) re-pinned in the same commit, so main is left momentarily inconsistent (operator chart v2.12.1 against images 1.33.3 / 1.11.2) for anyone installing raw main by committed digest. Confirm the release bake is the intended re-pin path, or re-pin here as before. - User-defined VolumeSnapshotClass with snapshotter secrets. Safe for everything this repo ships, but a cluster operator who added their own class with
csi.storage.k8s.io/snapshotter-secret-*would getforbiddenon CreateSnapshot/DeleteSnapshot once cluster-wide Secret read is dropped; upstream's upgrade doc notes this. One line in the upgrade notes covers it if custom snapshot classes are supported. - fsGroupPolicy: File is mutable on k8s >= 1.30, so the switch updates in place. The disclosed behaviour change stands: a pod with
fsGroupand nofsGroupChangePolicy: OnRootMismatchcan be slow to start on a large RWX volume. - Live-upgrade convergence was not exercised offline. SSA field ownership on the live controller/CSI Deployments can't be proven from a render; a
cozystack-pr-testupgrade replay (current main to this branch) through Flux would confirm it. - CI at review time.
Build packages/system/linstorgreen;Unit & controller testsstill in progress (helm half green locally, 24/24); no E2E on this head (needsfull-e2e). Confirm the unit job green and run full e2e before merge. - Disclosed and understood: downgrade is one-way after the 1.35 migration drops
SEC_*, and the arm64 build is untested.
piraeus-operator fills in its own default LINSTOR server image for every container this package leaves unset, and two of those are init containers: run-migration in the controller pod and setup-lvm-configuration in the satellite pods. Only the main containers were pinned to the platform build. run-migration upgrades the LINSTOR database in place. When the operator default is newer than the platform build, it migrates the schema ahead of the controller, the controller then fails to read the migrated database and crash-loops, and the migration cannot be rolled back. This stayed hidden while the operator default was older than the version built here; an operator update that moves the default past it exposes it during the window between the operator and linstor releases reconciling. Pin both init containers to the same image as the main containers, so the database moves only together with the controller. Assisted-by: LLM Signed-off-by: Aleksei Sviridkin <[email protected]>
The nfs-server DaemonSet runs piraeus-csi-nfs-server v1.10.3, which boots systemd as PID 1 in a privileged container with the host /dev mounted. Its getty units hang up the host's getty@tty1 about a second after the pod starts; systemd restarts the host getty until it hits the start limit and gives up, so login on the local or out-of-band console stops working on nodes that run the NFS server. Seen on bare-metal Ubuntu 24.04 nodes with Cozystack 1.6.5 and 1.7.0. Upstream fixed the image by disabling the services the NFS server does not need (piraeusdatastore/linstor-csi#417, reported as piraeusdatastore/piraeus-operator#961); v1.10.6 includes the fix. v2.12.1 is the current stable release. Its image set is LINSTOR 1.35.3 and LINSTOR CSI v1.13.2, which this repository builds itself; both builds follow in the next commits. The CSI release line is what carries IO QoS limits (qos.linbit.com/* StorageClass parameters, added in v1.11.3), which operators have asked for. Behaviour that changes with this range: - The CSIDriver moves to fsGroupPolicy: File, so fsGroup is applied to ReadWriteMany filesystem volumes too. - The operator manages Secrets only in its own namespace, and the CSI controller loses its cluster-wide read on Secrets; nothing in this repository references snapshotter Secrets. - The csi-health-monitor sidecar is removed. - Volume group snapshots are enabled only when the groupsnapshot.storage.k8s.io/v1 API is served; the snapshot controller here still ships v1alpha1, so they stay off. The csi-provisioner arguments are unchanged in this range, so the restated strictTopology list stays complete. The chart is vendored the way `make update` does it, which also drops the stale CRD copy from the vendored chart; piraeus-operator-crds installs the CRDs. Declare the local chart dependency so Helm can validate the umbrella chart without changing its rendered resources. This commit is not deployable on its own. The operator now hands the CSI pods their client certificate through LS_USER_CERTIFICATE_FILE and LS_USER_KEY_FILE, which the linstor-wait-until in the current linstor-csi image does not read, so the CSI init containers retry forever until the linstor-csi update in the next commit. Assisted-by: LLM Signed-off-by: Aleksei Sviridkin <[email protected]>
piraeus-operator v2.12.1 is released against LINSTOR CSI v1.13.2, and the release line carries IO QoS limits through the qos.linbit.com/* StorageClass parameters. The operator gives the CSI pods their client certificate as mounted files through LS_USER_CERTIFICATE_FILE and LS_USER_KEY_FILE, instead of inline values in LS_USER_CERTIFICATE and LS_USER_KEY. The linstor-wait-until v0.3.1 in this image is built on a golinstor release that reads only the inline variables, so its init containers present no client certificate, the LINSTOR API closes the TLS connection, and they retry on EOF forever. Move to linstor-wait-until v1.0.1, the version upstream v1.13.2 pins. The Protocol C override for dual attach is dropped. Since v1.12 the driver no longer sets allow-two-primaries itself: it asks LINSTOR to manage dual-primary through make-available, and LINSTOR 1.35 sets protocol C on the connections that need it. Upstream closed the equivalent change as superseded for that reason (piraeusdatastore/linstor-csi#435). The relocate-after-clone patch is carried forward. Volume IDs became a struct for consistency groups; Clone and VolFromSnap handle standalone resources, so relocation keys on the resource name. The enumer output is regenerated rather than hand-patched. Upstream now pins grpc v1.84.0, which builds on Go 1.27 and includes the fix for GO-2026-6443, so the grpc override is no longer needed. The golden-image clone guard in vm-disk was re-checked: parameter parsing for allowRemoteVolumeAccess and layerList, and the default derived from the layer list, are unchanged in this range. Assisted-by: LLM Signed-off-by: Aleksei Sviridkin <[email protected]>
piraeus-operator v2.12.1 ships LINSTOR 1.35.3 as its controller and satellite version, and the in-repo piraeus-server build has to match it. LINSTOR 1.34 raised the minimum Java to 21, so the build and runtime stages move from bookworm to trixie, and the system Gradle used by debian/rules follows the upstream wrapper to 8.14.2. Six carried patches are part of upstream by v1.35.3 and are dropped; the stale-bitmap adjust retry is rebased onto the new DrbdAdm. Assisted-by: LLM Signed-off-by: Aleksei Sviridkin <[email protected]>
994d8c2 to
c1652a7
Compare
What this PR does
Updates the LINSTOR stack to the current stable piraeus-operator release: operator v2.12.1, LINSTOR server 1.35.3 and LINSTOR CSI v1.13.2, the last two built here with our patches. This started as a fix for the NFS server image hanging up the host console on bare-metal storage nodes (Ubuntu 24.04, Cozystack 1.6.5 and 1.7.0). That needed nfs-server v1.10.6 or later. Operators also asked for per-volume IO limits, which need linstor-csi v1.11.3 or later and piraeus-operator v2.10.8 or later, so the update goes to the current release rather than the minimum.
The first commit fixes a problem the update exposed. The operator runs the LINSTOR database migration in a
run-migrationinit container, and this package pinned only the main controller container to our build. With the operator update, that init container ran the operator's default LINSTOR 1.35.3 and migrated the database before the controller image changed. The 1.33.3 controller then crash-looped until the linstor release caught up. Both init containers that run the LINSTOR server image (run-migrationand the satellite'ssetup-lvm-configuration) now use the platform image, with a test pinning it. This protects later upgrades where the operator default is newer than our build. It does not help this upgrade: the pin ships in the linstor release, and Flux reconciles piraeus-operator first.Patches:
fix-k8s-create-already-exists,retry-adjust-after-stale-bitmapandnative-protocare carried forward. LINSTOR 1.34 requires Java 21, so the image moves from bookworm to trixie.Behaviour that changes for users:
SEC_*tables, so a cluster that has run this version cannot go back to 1.33.Aux/csi-protocol-overrideproperty. To remove the override, runlinstor resource-definition set-property <rd> DrbdOptions/Net/protocolandlinstor resource-definition set-property --aux <rd> csi-protocol-override.fsGroupPolicy: File, sofsGroupis also applied to ReadWriteMany filesystem volumes.groupsnapshot.storage.k8s.io/v1is served. The snapshot controller here still serves v1alpha1, so they stay off; feat(linstor, platform): upgrade snapshot-controller to v8.7.0 and enable VolumeGroupSnapshots #5239 changes that.qos.linbit.com/{rbps,wbps,riops,wiops}StorageClass parameters. Enforcing them needs NRI enabled on the nodes and the nri-volume-qos plugin, neither of which this PR adds.Tested on a three-node Talos cluster, upgrading from the current main packages to this branch:
UpToDate; cloning and new snapshots work.Not tested: an arm64 build.
Screenshots
No UI change.
Downstream repositories
Release note