Skip to content

Deprecate the module and hand CSI snapshots over to storage-foundation, keeping it standalone (v0.2.0)#103

Open
github-actions[bot] wants to merge 5 commits into
mainfrom
feat/deprecate
Open

Deprecate the module and hand CSI snapshots over to storage-foundation, keeping it standalone (v0.2.0)#103
github-actions[bot] wants to merge 5 commits into
mainfrom
feat/deprecate

Conversation

@github-actions

@github-actions github-actions Bot commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

Description

Single deprecated release (v0.2.0) that consolidates snapshot support into the
storage-foundation module. It merges the two previously separate changes
(destructive-hook removal + deprecation/CRD-handover) into one PR and does not
remove the CRDs from the bundle.

Changes:

  • Deprecated stage; removed auto-enable in every bundle (still explicitly enable-able).
  • No storage-foundation requirement — the module stays INDEPENDENTLY installable.
    A cluster that does not enable storage-foundation still gets a working
    snapshot-controller (its templates render while storage-foundation is absent) plus the
    deprecation alert, instead of losing snapshot support. When storage-foundation IS
    enabled, the existing guard empties this module down to just the alert and
    storage-foundation owns the (byte-for-byte identical) CRDs.
  • requirements.deckhouse: ">= 1.76" (new d8 baseline).
  • Ships the three snapshot.storage.k8s.io CRDs as byte-for-byte copies of the
    storage-foundation ones
    (extended VolumeSnapshot with spec.mode), so both modules can
    apply identical definitions without conflict. The bundled controller is upstream (vanilla)
    external-snapshotter; it keeps reconciling snapshots against the extended CRDs because the
    fork is a backward-compatible superset (spec.mode is defaulted Capture/immutable and
    dropped by the typed client; VolumeSnapshotContent.volumeSnapshotRef is relaxed to optional;
    all required/CEL constraints hold for Capture-mode snapshots).
  • Removed the destructive on-delete hook that stripped finalizers from VolumeSnapshot,
    VolumeSnapshotContent and VolumeSnapshotClass when the module was disabled (these objects
    are now shared with storage-foundation; disabling the module must not touch them). Also
    removed the unused snapshot-validation-webhook certificate hook and its values schema.
  • Added the D8SnapshotControllerModuleDeprecated alert (PrometheusRule in d8-monitoring,
    severity_level: "9", expr: vector(1)), unguarded so it fires whenever the module is enabled.

Impact on critical cluster components: no control-plane / ingress / Prometheus restarts. The
module is no longer auto-enabled, but any cluster with it explicitly enabled keeps its
snapshot-controller workload (while storage-foundation is absent). Operators of an enabled
module will see the deprecation alert (severity 9). Disabling the module no longer removes
finalizers from snapshot objects.

Why do we need it, and what problem does it solve?

storage-foundation is the owner of CSI snapshot support in the unified-snapshots architecture,
so snapshot-controller is being deprecated. It must be handed over safely: no cluster may lose
snapshot functionality, and existing snapshot objects must not break when the module is disabled.
Dropping the storage-foundation requirement (vs the earlier handoff design) is deliberate — a
cluster that has not enabled storage-foundation must still receive a functioning
snapshot-controller plus a migration nudge, not an inactive module and no snapshots.

What is the expected result?

  • Enabling the module without storage-foundation: full snapshot-controller workload is
    rendered and CSI snapshots work against the extended CRDs; the deprecation alert fires.
  • Enabling it with storage-foundation: the guard leaves only the deprecation alert; no
    workload/RBAC/webhook resources are rendered; storage-foundation serves snapshots and owns the
    CRDs.
  • Disabling the module does NOT strip finalizers from VolumeSnapshot / VolumeSnapshotContent /
    VolumeSnapshotClass.
  • The three snapshot CRDs remain Established (byte-for-byte identical to storage-foundation's);
    existing VolumeSnapshot objects keep their UID and ready/bound state.

Checklist

  • The code is covered by unit tests.
  • e2e tests passed.
  • Documentation updated according to the changes.
  • Changes were tested in the Kubernetes cluster manually.

AleksZimin and others added 5 commits July 13, 2026 11:04
Remove the OnAfterDeleteHelm hook that stripped finalizers from
VolumeSnapshot, VolumeSnapshotContent and VolumeSnapshotClass resources
when the module was disabled. Disabling the module must no longer touch
these cluster-wide resources so that snapshot support can be safely
handed over to the storage-foundation module.

Also drop the unused snapshot-validation-webhook certificate hook and
its values schema, and tidy the hooks Go module.

Signed-off-by: Aleksandr Zimin <alexandr.zimin@flant.com>
(cherry picked from commit cbaa0a1)
Signed-off-by: Aleksandr Zimin <alexandr.zimin@flant.com>
v0.2.0 handoff of CSI snapshot support to the storage-foundation module.

- module.yaml: stage Deprecated; drop enabledInBundles (no longer auto-enabled,
  still explicitly enable-able); require the storage-foundation module present
  (requirements.modules.storage-foundation ">= 0.0.0" — sf ships from main, no
  v1.0.0 tag; dev builds do not enforce requirements anyway).
- crds/: replace the three snapshot.storage.k8s.io CRDs (+doc-ru) with
  byte-for-byte copies from storage-foundation (extended VolumeSnapshot with
  spec.mode), so both modules apply identical definitions without conflict during
  the handover. crds/ stays in the bundle for now; removal is v0.3.0.
- templates/deprecation-alert.yaml: D8SnapshotControllerModuleDeprecated
  (severity 9, vector(1)) in d8-monitoring, UNGUARDED — fires whenever the module
  is enabled (incl. when storage-foundation is on and this module renders nothing
  else) to nudge disabling it.
- docs: deprecated banner (README + .ru).

Stacked on feat/cut-remove-finalizers-hook (v0.1.21) so the destructive on-delete
hook removal is included; rebase onto main after v0.1.21 merges.

Signed-off-by: Aleksandr Zimin <alexandr.zimin@flant.com>
(cherry picked from commit a43cb0a)
Signed-off-by: Aleksandr Zimin <alexandr.zimin@flant.com>
…76, no sf requirement

Collapse the former v0.1.21 (remove destructive on-delete hook) and v0.2.0
(deprecate + CRD handover + alert) into ONE release, and drop v0.3.0 (crds/ stay).

Key change vs the earlier handoff design: NO requirements.modules.storage-foundation.
The module must stay independently installable — a cluster that does not enable
storage-foundation still gets a working snapshot-controller (templates render while
sf is absent) plus the deprecation alert, instead of losing snapshot support.
requirements.deckhouse bumped to >= 1.76 (new d8 baseline).

The bundled controller is upstream external-snapshotter (vanilla); it keeps working
against the byte-for-byte storage-foundation CRDs because the fork is a backward-
compatible superset — spec.mode is defaulted (Capture)/immutable and dropped by the
typed client, VolumeSnapshotContent.volumeSnapshotRef is relaxed to optional, and the
required/CEL constraints all hold for Capture-mode snapshots.

CHANGELOG consolidated into v0.2.0 (v0.1.21 removed).

Signed-off-by: Aleksandr Zimin <alexandr.zimin@flant.com>
…use >= 1.76

snapshot-controller stays INDEPENDENTLY installable (no requirements.modules.
storage-foundation): a cluster that does not enable storage-foundation still gets a
working snapshot-controller plus the deprecation alert instead of losing snapshot
support. requirements.deckhouse -> >= 1.76. CHANGELOG folded into v0.2.0.

Signed-off-by: Aleksandr Zimin <alexandr.zimin@flant.com>
@AleksZimin AleksZimin changed the title changelog: v0.2.0 release Deprecate the module and hand CSI snapshots over to storage-foundation, keeping it standalone (v0.2.0) Jul 13, 2026
@AleksZimin AleksZimin self-assigned this Jul 13, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant