Commit Graph
1290 Commits
Author SHA1 Message Date
Ruben Hensen 6cac51ebfa external-secrets: upgrade to 0.18.2
One minor at a time from 0.10.7 to 2.13.0, see docs/upgrade-k8s-1.33.md.
2026-10-22 21:47:31 +02:00
Ruben Hensen c5bb001287 external-secrets: upgrade to 0.17.0
One minor at a time from 0.10.7 to 2.13.0, see docs/upgrade-k8s-1.33.md.
2026-10-22 21:42:52 +02:00
Ruben Hensen 7acb7eaa8c Move every ExternalSecret and the ClusterSecretStore to external-secrets.io/v1
ESO 0.16.2 is the one release that serves both v1beta1 and v1. 0.17
stops serving v1beta1, so manifests still on v1beta1 would fail to sync
from the next hop on. For these resources the schemas are name-identical
(conversion strategy None); only the apiVersion changes.
2026-10-22 21:41:28 +02:00
Ruben Hensen 9e31727298 external-secrets: upgrade to 0.16.2
One minor at a time from 0.10.7 to 2.13.0, see docs/upgrade-k8s-1.33.md.
2026-10-22 21:26:42 +02:00
Ruben Hensen e62728027b external-secrets: upgrade to 0.15.1
One minor at a time from 0.10.7 to 2.13.0, see docs/upgrade-k8s-1.33.md.
2026-10-22 21:23:25 +02:00
Ruben Hensen 183686ea34 external-secrets: upgrade to 0.14.4
One minor at a time from 0.10.7 to 2.13.0, see docs/upgrade-k8s-1.33.md.
2026-10-22 21:20:19 +02:00
Ruben Hensen 950d4807f2 external-secrets: upgrade to 0.13.0
One minor at a time from 0.10.7 to 2.13.0, see docs/upgrade-k8s-1.33.md.
2026-10-22 21:16:40 +02:00
Ruben Hensen 3db1ee84a5 external-secrets: upgrade to 0.12.1
One minor at a time from 0.10.7 to 2.13.0, see docs/upgrade-k8s-1.33.md.
2026-10-22 21:02:10 +02:00
Ruben Hensen 04e862d453 external-secrets: upgrade to 0.11.0
One minor at a time from 0.10.7 to 2.13.0, see docs/upgrade-k8s-1.33.md.
2026-10-22 20:53:13 +02:00
Ruben Hensen 096eb60f8c external-secrets: sync with server-side apply
Needed from ESO 0.19, whose CRDs are too big for client-side apply. Turned on now, on 0.10.7, so Argo CD migrates the managed fields before the upgrade starts.
2026-10-22 20:51:55 +02:00
Ruben Hensen 2a2594a987 docs: tick off CloudNativePG 1.30.1 and the Vault chart 2026-10-22 16:27:13 +02:00
Ruben Hensen b86942077a vault: recreate the injector instead of rolling it
Dropping the anti-affinity wasn't enough: during the rollout the old ReplicaSet kept recreating its pod with the old anti-affinity, which still blocked the new one. Recreate stops the old pod first; nothing uses the injector, so the short gap doesn't matter.
2026-10-22 16:22:59 +02:00
Ruben Hensen 6b81033f70 vault: drop the injector's anti-affinity
The chart requires injector pods on different nodes. With one node and one replica the rolling update to vault-k8s 1.7.6 deadlocked: the new pod stayed Pending until the old one left, which waits for the new one. The server already sets affinity to "" for the same reason.
2026-10-22 16:11:13 +02:00
Ruben Hensen e518e1368f vault: upgrade the chart to 0.34.1, keep the server on 1.17.2
Chart 0.28.1 is only tested up to Kubernetes 1.30. 0.34.1 brings the
injector to vault-k8s 1.7.6. The server image is pinned to the running
1.17.2: the StatefulSet uses OnDelete, so nothing restarts now, but a
later pod restart would otherwise pull the chart's default and Shamir
unsealing needs the keys at hand for a Vault upgrade. Rendered with the
pin, the StatefulSet only changes in formatting and an extra check in the
config script that doesn't apply here.
2026-10-22 16:06:28 +02:00
Ruben Hensen 9b9bd8bad0 cnpg: upgrade operator to 1.30.1 (chart 0.29.1)
One minor at a time from 1.25.1 to 1.30.1, see docs/upgrade-k8s-1.33.md. In-place instance manager updates keep the database pods running.
2026-10-22 15:52:41 +02:00
Ruben Hensen 7eb69b17e1 cnpg: upgrade operator to 1.29.1 (chart 0.28.3)
One minor at a time from 1.25.1 to 1.30.1, see docs/upgrade-k8s-1.33.md. In-place instance manager updates keep the database pods running.
2026-10-22 15:49:27 +02:00
Ruben Hensen b0ed6fdad1 cnpg: upgrade operator to 1.28.1 (chart 0.27.1)
One minor at a time from 1.25.1 to 1.30.1, see docs/upgrade-k8s-1.33.md. In-place instance manager updates keep the database pods running.
2026-10-22 15:46:02 +02:00
Ruben Hensen 9cf0c7f9e9 cnpg: upgrade operator to 1.27.1 (chart 0.26.1)
One minor at a time from 1.25.1 to 1.30.1, see docs/upgrade-k8s-1.33.md. In-place instance manager updates keep the database pods running.
2026-10-22 15:42:35 +02:00
Ruben Hensen 8a409c6a5b cnpg: upgrade operator to 1.26.1 (chart 0.25.0)
One minor at a time from 1.25.1 to 1.30.1, see docs/upgrade-k8s-1.33.md. In-place instance manager updates keep the database pods running.
2026-10-22 15:35:58 +02:00
Ruben Hensen 8cb8b28cd9 cnpg: prepare for the operator upgrade to 1.30
Pin authentik-postgres to the image CNPG filled in at creation
(postgresql:17.4). Later operators default to PostgreSQL 18, and since
1.26 a higher major in the image triggers an offline in-place major
upgrade. immich-postgres already pins its pgvecto.rs image.

Turn on ENABLE_INSTANCE_MANAGER_INPLACE_UPDATES so the five operator hops
(1.25 -> 1.30, one minor at a time as the docs recommend) swap the
instance manager inside the running pods instead of restarting both
single-instance databases each time.
2026-10-22 15:35:18 +02:00
Ruben Hensen bdbabde317 docs: tick off Velero 1.16.2
Test backup of gatus and ntfy completed on the new version.
2026-10-22 15:32:57 +02:00
Ruben Hensen bd2606591e velero: correct the upgradeCRDs comment
Argo CD applies the chart's crds/ directory on every sync, so CRD updates don't depend on the hook; the 1.16 upgrade confirmed it.
2026-10-22 15:32:19 +02:00
Ruben Hensen ce1115d4f9 velero: upgrade to 1.16.2 (chart 10.1.3)
Velero 1.15 is only tested up to Kubernetes 1.31; 1.16 is tested on 1.33.
The AWS plugin moves along to v1.12.2. Argo CD applies the chart's crds/
directory itself, so the CRD schema update doesn't need the disabled
upgrade hook. No backup was running.
2026-10-22 15:30:11 +02:00
Ruben Hensen f36b90557b docs: tick off cert-manager 1.20.4
All certificates stayed Ready through the five hops, and a test Certificate for s2.rubenhensen.nl was issued by Let's Encrypt over HTTP-01. The 1.19 chart left a duplicate tokenrequest RoleBinding behind, removed by hand.
2026-10-22 15:21:28 +02:00
Ruben Hensen 629d137c1e cert-manager: upgrade to v1.20.4
One minor at a time from v1.15.5 to v1.20.4 on the way to Kubernetes 1.33, see docs/upgrade-k8s-1.33.md. The chart renders the current values unchanged.
2026-10-22 15:16:37 +02:00
Ruben Hensen 1582f67cda cert-manager: upgrade to v1.19.6
One minor at a time from v1.15.5 to v1.20.4 on the way to Kubernetes 1.33, see docs/upgrade-k8s-1.33.md. The chart renders the current values unchanged.
2026-10-22 15:12:51 +02:00
Ruben Hensen b4d7845349 cert-manager: upgrade to v1.18.6
One minor at a time from v1.15.5 to v1.20.4 on the way to Kubernetes 1.33, see docs/upgrade-k8s-1.33.md. The chart renders the current values unchanged.
2026-10-22 15:09:13 +02:00
Ruben Hensen 9d4c9c8296 cert-manager: upgrade to v1.17.4
One minor at a time from v1.15.5 to v1.20.4 on the way to Kubernetes 1.33, see docs/upgrade-k8s-1.33.md. The chart renders the current values unchanged.
2026-10-22 15:05:28 +02:00
Ruben Hensen 822270d8b3 cert-manager: upgrade to v1.16.5
One minor at a time from v1.15.5 to v1.20.4 on the way to Kubernetes 1.33, see docs/upgrade-k8s-1.33.md. The chart renders the current values unchanged.
2026-10-22 15:03:26 +02:00
Ruben Hensen ce881ac7d7 docs: tick off Longhorn 1.11.2
Longhorn is done: all volumes on engine v1.11.2, PV nodeAffinity unchanged, offline replica rebuilding still off, 17 test backups written.
2026-10-22 15:00:08 +02:00
Ruben Hensen 0514a4248a longhorn: upgrade to 1.11.2
Last hop of the Longhorn upgrade for Kubernetes 1.33. Stays on 1.11.2:
1.11.3 ships csi-provisioner v6.3.0 and needs Kubernetes 1.34. The
1.11.2 chart still declares kubeVersion >=1.25 and ships csi-provisioner
v5.3.0, and renders our values unchanged.

Checked beforehand: 17 healthy volumes plus 2 detached, no backing
images, system backup pre-upgrade-v1-10-2-202610221449 is Ready. PV
nodeAffinity recorded to compare after the upgrade (1.11.0 had a
regression there, fixed in 1.11.2).
2026-10-22 14:51:56 +02:00
Ruben Hensen d0b36b6542 docs: tick off Longhorn 1.10.2
All volumes on engine v1.10.2 with 19 replicas, backup target fine, 17 test backups written.
2026-10-22 14:40:22 +02:00
Ruben Hensen 7bb7813d1d longhorn: upgrade to 1.10.2
Third hop towards 1.11.2. 1.10 removes the longhorn.io/v1beta1 API, which
requires every Longhorn CRD to store only v1beta2; all 22 already do (the
check from the 1.10 important notes). Settings move to a per-data-engine
JSON format, but the chart renders our defaultSettings and
defaultBackupStore values unchanged.

Checked beforehand: 17 healthy volumes plus 2 detached, no backing
images, system backup pre-upgrade-v1-9-2-202610221421 is Ready.
2026-10-22 14:23:18 +02:00
Ruben Hensen 53f01c65dc docs: tick off Longhorn 1.9.2
All volumes on engine v1.9.2, backup target fine, 17 test backups written. Every Longhorn CRD already stores only v1beta2.
2026-10-22 14:19:28 +02:00
Ruben Hensen a73bdb8fb4 longhorn: upgrade to 1.9.2
Second hop towards 1.11.2. 1.9 stops serving longhorn.io/v1beta1 (nothing
in this repo uses it) and renames orphan-auto-deletion (false here) to
orphan-resource-auto-deletion during the upgrade. Chart values are
unchanged from 1.8.2.

Checked beforehand: 17 healthy volumes plus 2 detached, no backing
images, every Longhorn CRD already stores only v1beta2, and system backup
pre-upgrade-v1-8-2-202610221408 is Ready.
2026-10-22 14:11:09 +02:00
Ruben Hensen f390b3a70d docs: tick off Longhorn 1.8.2
All 19 volumes on engine v1.8.2, BackupTarget default points at the NAS, and a manual run of backup-daily wrote 17 backups.
2026-10-22 14:01:30 +02:00
Ruben Hensen fae03f3b8b longhorn: upgrade to 1.8.2
First hop from 1.7.3 to 1.11.2 (docs/upgrade-k8s-1.33.md). 1.8 drops the
backup-target settings in favour of a "default" BackupTarget resource, so
the NFS target and poll interval move into defaultBackupStore. Until now
they only lived in the cluster.

Checked beforehand: no Faulted volumes, no backing images, all volumes on
engine v1.7.3, system backup pre-upgrade-v1-7-3-20261022 and Velero
backup pre-longhorn-1-8-202610221326 both complete.
2026-10-22 13:52:13 +02:00
Ruben Hensen f2c1b9ac06 docs: fix the Longhorn important-notes links
Docs for older Longhorn versions live under /docs/archives/.
2026-10-22 13:27:28 +02:00
Ruben Hensen 119f7729f6 docs: tick off upgrade step 1
All Longhorn volumes run engine v1.7.3, the 1.7.1 and 1.7.2 engine images are gone, and system backup pre-upgrade-v1-7-3-20261022 is Ready.
2026-10-22 12:58:59 +02:00
Ruben Hensen 6da1b3e88e longhorn: upgrade volume engines automatically, one at a time
concurrentAutomaticEngineUpgradePerNodeLimit was 0, so volumes stayed on
the engine image of whatever Longhorn version created them: three on
1.7.1, nine on 1.7.2, seven on 1.7.3. Every hop of the upgrade to 1.11.2
needs all volumes on the current engine first.
2026-10-22 12:56:21 +02:00
Ruben Hensen 8aaf2ec8ec Plan the move to Kubernetes 1.33
Envoy Gateway v1.9 needs Kubernetes 1.33, and microk8s 1.32 is out of
upstream support. docs/upgrade-k8s-1.33.md lists what has to move first
and in which order. Renovate is held below Longhorn 1.11.3, since that
and newer releases need Kubernetes 1.34.
2026-10-22 12:56:07 +02:00
Ruben Hensen f2716e1169 home-assistant: mark the EndpointSlice endpoint ready
The API server fills in conditions on every endpoint, which left Argo CD showing the slice as OutOfSync. Spell it out so desired and live state match.
2026-10-22 11:07:42 +02:00
Ruben Hensen a10dbecc94 home-assistant: replace the ExternalName service with an EndpointSlice
After the microk8s ingress addon went from ingress-nginx 1.8.0 to 1.13.8,
ha.rubenhensen.nl returned 503: the controller now resolves externalName
as a DNS name and "192.168.1.202" fails the lookup. A selector-less
Service with an EndpointSlice pointing at the IP is the supported way to
route to an address outside the cluster.
2026-10-22 11:03:19 +02:00
Ruben Hensen 2ce9c33dbd Remove ghost-blog and whishper
Neither is used any more: the blog moves to a self-written site, and
whishper needs more compute than this setup has. Ghost also ran Node 18,
which won't get the eMudhra root store fix.

Drops both apps, the blog DNS record, Gatus check and node001 tunnel
entry, their ca-bundle namespaces, and the leftover ExternalSecret for the
old hensen.io blog namespace. Final Velero backups keep the data:
ghost-blog-final-202610220955 until 22 October 2027 and
whisper-final-202610220955 until 20 January 2027.
2026-10-22 10:11:06 +02:00
Ruben Hensen 8a66913a54 Drop the nas.rubenhensen.nl and alv.rubenhensen.nl ingresses
Neither host has a DNS record, so both were unreachable and cert-manager
has been failing to renew their certificates since 6 April. DSM stays
reachable on the LAN at 192.168.1.99. The nas app only held that ingress
and its ExternalName service, so it goes entirely.
2026-10-22 09:36:26 +02:00
Ruben Hensen 1f736cd4c7 Remove phocas-lustrum
The folder went in April (bb308a3) but the app and its DNS record stayed,
so the demo site kept serving at phocaslustrum.rubenhensen.nl.
2026-10-22 09:36:26 +02:00
Ruben Hensen e5d82b69fd Remove the old in-cluster Stalwart
Its folder went in March (44c31cd) but the Argo CD app stayed and kept the
old hensen.io mail server running, with a NodePort for SMTP/IMAP and a
10Gi volume. Mail runs on node001 now and this one logged nothing in three
days. A final Velero backup (stalwart-final-202610220935) keeps its data
until 20 January 2027. The app has no finalizer, so the namespace gets
deleted by hand.
2026-10-22 09:36:26 +02:00
Ruben Hensen fe678d4b4b ca-bundle: also serve argocd, authentik and actual-budget
Those three namespaces had their own ~190KB copy of patched-ca-bundle.
Let the ca-bundle chart render them too, so the bundle lives in one file.
2026-10-22 09:26:43 +02:00
Ruben Hensen ff73f99d43 velero: name the release resources "velero" so repo maintenance runs
Velero 1.15 builds kopia repository maintenance jobs from a Deployment
called "velero" in its namespace. Ours was velero-helm, so every
BackupRepository reported 'error to build maintenance job: Deployment.apps
"velero" not found' and the repos on the NAS were never cleaned up, some
not since March 2025. fullnameOverride renames the Deployment, Service,
ServiceAccount and RBAC; the old velero-helm objects get deleted by hand
since this app doesn't prune.
2026-10-22 09:23:51 +02:00
Ruben Hensen ea86611deb cert-manager: mount a CA bundle without the compromised eMudhra roots
Mount patched-ca-bundle (see ca-bundle/) over /etc/ssl/certs so it stops trusting the compromised eMudhra intermediates (https://emudhra.we-have-a-problem.com). Only the controller, which talks ACME to Let's Encrypt.
2026-10-22 09:13:02 +02:00