What's new
- Node-local storage pools. A
GarageClustercan now manage selector-driven HostPath pools as DaemonSets, with one durable Garage identity per Kubernetes Node. Pools can coexist with the existing PVC group, manually managed SMB/Ceph/PVC or external members, and gateways. Activation fences, HostPath ownership markers, serialized rollouts, and drain/layout proofs are built in. See the node-local pool guide. - Node-derived failure domains.
spec.zoneFrom.nodeLabelcan derive each storage member's Garage zone from its Kubernetes Node. - Verifiable release artifacts. The operator image is keylessly signed and includes build provenance plus an SPDX SBOM attestation. The
install.yamlrelease asset also includes provenance. - Safer lifecycle operations. Layout updates now verify Garage's readback, layout rebuilds use an exact Pod credential, and drain, cycle, and externally managed cluster paths have stronger coverage.
Before upgrading
- Existing clusters are unchanged unless
spec.storage.nodeLocalPoolsis explicitly declared. This release does not automatically migrate storage. - Node-local pools require Kubernetes 1.27+, Garage v2.0+, a v1beta2
GarageCluster, enabled validating and conversion webhooks, a cluster-scoped operator installation, Node access, an Admin token, and pre-created production HostPaths with.garage-volume-idmarkers. Garage v2.3.0 is the tested default. Existing non-pool configurations retain the Kubernetes 1.25+ minimum. - If custom
envorenvFromentries set Garage configuration or credential variables, follow the reserved environment variable migration before upgrading.
Thanks to @florissmit10 for the original DaemonSet prototype and use case that the node-local pool design builds on.
Full changelog: v0.6.29...v0.7.0