Skip to content

chore(deps): update kubernetes-version - #591

Open
renovate[bot] wants to merge 1 commit into
mainfrom
renovate/kubernetes-version
Open

renovate[bot] wants to merge 1 commit into
mainfrom
renovate/kubernetes-version

Conversation

@renovate

@renovate renovate Bot commented Oct 12, 2026 •

Copy link
Copy Markdown
Contributor

This PR contains the following updates:

Package Update Change
kindest/node minor v1.36.4 → v1.37.0
kindest/node minor 1.36.4 → 1.37.0
kubernetes/kubernetes patch 1.37.0 → 1.37.1
registry.k8s.io/coredns/coredns patch v1.14.2 → v1.14.7
registry.k8s.io/etcd minor 3.6.8-0 → 3.7.2-0
registry.k8s.io/kube-apiserver minor v1.36.4 → v1.37.1
registry.k8s.io/kube-controller-manager minor v1.36.4 → v1.37.1
registry.k8s.io/kube-proxy minor v1.36.4 → v1.37.1
registry.k8s.io/kube-scheduler minor v1.36.4 → v1.37.1

Warning

Some dependencies could not be looked up. Check the Dependency Dashboard for more information.


Release Notes

kubernetes/kubernetes

v1.37.1

Compare Source

See kubernetes-announce@. Additional binary downloads are linked in the CHANGELOG.

See the CHANGELOG for more details.


Configuration

📅 Schedule: (in timezone Europe/Helsinki)

  • Branch creation
    • "after 6am on monday"
  • Automerge
    • At any time (no schedule defined)

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

👻 Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

@github-actions

github-actions Bot commented Oct 12, 2026 •

Copy link
Copy Markdown

Note

7 resources changed across 3 apps

Blast radius

  • Kustomization flux-system/docker-workload-cluster: 2 dependents (flux-system/local-workload-cni +1 more)
image from to upstream
kindest/node v1.36.4@sha256:099e04… v1.37.0@sha256:a1ed56… ❔

konflate 0.6.4 · rendered 9ee7514 · full diff →

@shrinedogg

Copy link
Copy Markdown
Contributor

Held: this bump cannot pass CI until cert-manager supports Kubernetes 1.37.

Triage of the three failing checks at head dbbb59d:

  • Air-gap image digest pins: airgap/images.txt lists v1.37.1 control-plane component images while the pinned node image kindest/node:v1.37.0 (whose kubeadm deploys the v1.37.0 component set: coredns v1.14.6, etcd 3.7.0-0) is what the airgap package actually ships. Note kindest/node:v1.37.1 does not exist upstream (verified against Docker Hub), so aligning images to the node pin is the only correct direction.
  • Zarf mise asset pin: tests/test-cert-manager-kubernetes-support.py fails with cert-manager 1.21 (bootstrap.toml) supports Kubernetes 1.33 → 1.36, but the pinned Kubernetes version is v1.37.0.
  • The same three checks failed on the 2026-10-05 run of this branch: consistent, not a flake.

The cert-manager gate is the blocker that cannot be fixed on this branch: the newest cert-manager release (v1.21.2, 2026-09-11) supports k8s 1.33-1.36 and no release supports 1.37 yet. This is the exact premature-bump scenario the gate was built to catch (issue #322: Renovate bumped Kubernetes to 1.37 while cert-manager v1.21.x only supported up to 1.36, silently breaking the daily air-gapped workflow).

Recommendation: hold kubernetes-version at 1.36 until cert-manager ships 1.37 support, then let Renovate recreate this group PR. If the weekly recreation is noisy, a Renovate allowedVersions constraint on the kindest/node package (e.g. !/^v1\.3[7-9]/ until cert-manager catches up) would hold the branch closed at the source.

@renovate
renovate Bot force-pushed the renovate/kubernetes-version branch 2 times, most recently from a7b20b2 to 72da2e2 Compare October 12, 2026 07:01

@shrinedogg shrinedogg left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Batch review (2026-10-12): this bump is internally inconsistent and cannot go green as-is. Not merging.

  1. airgap/images.txt:34-38 and :58-62 - kube-apiserver/controller-manager/proxy/scheduler are pinned to v1.37.1 while the target Kubernetes version is v1.37.0 (kindest/node, per the local-host topology pins). The v1.37.0 release deploys all four at :v1.37.0. This is the "Air-gap image digest pins" failure.
  2. airgap/images.txt:33/:57 (coredns v1.14.7) and :37/:61 (etcd 3.7.2-0) are 1.37.1-generation values; v1.37.0 deploys coredns 1.14.6 and etcd 3.7.0-0. Both are tracked components and will fail the same gate after item 1 is fixed.
  3. mgmt/local-host/clusters/docker/cluster-class.yaml:84,99 and management/cluster-class.yaml:89,104 - customImage carries the new tag kindest/node:v1.37.0 with the STALE v1.36.4 digest sha256:099e0493... Pulling by digest would silently deploy v1.36.4 nodes into clusters declaring v1.37.0, and no gate covers it (the digest test is scoped to airgap/). The v1.37.0 digest is sha256:a1ed56cfb0e7b93589bdf9738cd566405a265939e3620fc4f5de89adff580ae5.
  4. mgmt/local-talos/clusters/management/cluster.yaml:63 (TalosControlPlane v1.37.1) and mise.toml:5 (kubectl 1.37.1) split the single kubernetes-version group. kindest/node:v1.37.1 does not exist yet (registry 404), so a uniform 1.37.1 is not possible; a uniform bump means both at 1.37.0.
  5. "Zarf mise asset pin" failure: cert-manager 1.21.2 (bootstrap.toml:38) supports k8s 1.33-1.36 and no supported release covers 1.37. This cannot pass on its own: #458 (drops this gate) must land first, or #591 must rebase onto it; #458's validated pairings already include (1.21.2, 1.37.0, air-gapped nightly 2026-09-21).
  6. Stale v1.36.4 residue: airgap/images.txt:50, airgap/scripts/stage-and-create-cluster.sh:6, airgap/scripts/build-config-artifact.sh:175, docs/operations.md:697, docs/airgap.md:138-139 and :316.

Fix path: one uniform v1.37.0 across kindest/node + kube components + digests, most reliably via the repo's own python3 airgap/tests/test-airgap-kubeadm-images.py --fix (the documented reconciliation step); fix the four cluster-class.yaml digests; revert the Talos/kubectl split to 1.37.0; land #458 first. Alternatively close and re-bump as a uniform 1.37.1 once kindest publishes it.

@shrinedogg shrinedogg left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hold-verification review at head 72da2e2 (unchanged since the review was captured; CI at this head: "Air-gap image digest pins" fail, "Zarf mise asset pin" fail). Fresh evidence collected at this head; the hold remains in force. Not merging.

Verified locally (all commands run at this head, checked out from pull/591):

  • python3 airgap/tests/test-airgap-kubeadm-images.py -> exit 1, 12 pin mismatches (identical to the red CI check; per-line list in finding 1).
  • python3 tests/test-cert-manager-kubernetes-support.py -> exit 1: "cert-manager 1.21 (bootstrap.toml) supports Kubernetes 1.33 -> 1.36, but the pinned Kubernetes version is v1.37.0"; cross-checked against cert-manager's own support table (raw.githubusercontent.com/cert-manager/website/master content/docs/releases/README.md): currently supported releases 1.20 (k8s 1.32 -> 1.35) and 1.19 (1.31 -> 1.35); 1.21 is listed as upcoming with 1.33 -> 1.36. No release line supports 1.37 today.
  • Docker Hub registry API for kindest/node: tag v1.36.4 resolves to sha256:099e049362a1526b2db71494e1947aae99bd16290d7c895f2b7ea312e3cbfaed, tag v1.37.0 resolves to sha256:a1ed56cfb0e7b93589bdf97c8cd566405a265939e3620fc4f5de89adff580ae5.
  • Pulled the pinned kindest/node:v1.37.0@a1ed56cf image and inspected /kind/manifests: it bakes kindnetd v20260820-69b56db7, local-path-provisioner v20260820-69b56db7, local-path-helper v20260131-7181c60a. All three are already listed in airgap/images.txt lines 53-56, so the CNI preload coupling documented in docs/airgap.md holds at v1.37.0.
  • grep of airgap/zarf.yaml at this head: no image pins for any of the bumped components (only kubectl command invocations), so the package listing is not silently diverging from images.txt.
  • mise.toml kubectl 1.37.0 -> 1.37.1: no gate depends on it; CI "Build, lint, and test", kustomize builds, and Renovate digest-pinning checks are green.

Blocking findings:

  1. airgap/images.txt control-plane component pins disagree with what kubeadm of the pinned kindest/node v1.37.0 deploys (12 lines). Target version v1.37.0 comes from the topology pins (mgmt/local-host/clusters/docker/cluster.yaml:21, mgmt/local-host/clusters/management/cluster.yaml:24), which the contract test treats as authoritative. Mismatches:

    • images.txt:33 and :57 coredns v1.14.7, kubeadm v1.37.0 deploys v1.14.6
    • images.txt:34 and :58 kube-apiserver v1.37.1, deploys v1.37.0
    • images.txt:35 and :59 kube-controller-manager v1.37.1, deploys v1.37.0
    • images.txt:36 and :60 kube-proxy v1.37.1, deploys v1.37.0
    • images.txt:37 and :61 etcd 3.7.2-0, deploys 3.7.0-0
    • images.txt:38 and :62 kube-scheduler v1.37.1, deploys v1.37.0
      This is the group bump's internal incoherence: the kindest/node minor update moves the air-gapped clusters to 1.37.0 while the kubernetes/kubernetes patch update drags the component pins to 1.37.1. The tracked components must match the kubeadm baked in the node image. Fix path: the contract test's --fix rewrites the tracked pins (tags plus registry digests) from kubeadm v1.37.0, or the group must be restructured so component pins follow the node image rather than the standalone kubernetes/kubernetes release.
  2. cert-manager 1.21.2 (bootstrap.toml:38) does not support the pinned Kubernetes version. The PR sets 1.37.0 on both local-host clusters (docker/cluster.yaml:21, management/cluster.yaml:24) and pushes the Talos management cluster to v1.37.1 (mgmt/local-talos/clusters/management/cluster.yaml:63), all above cert-manager's stated ceiling of 1.36 (see verified-locally list; same failure as the red CI check). This gate exists because exactly this pairing silently broke the air-gapped workflow before (issue #322). Fix path: land cert-manager support for 1.37 first (bump the bootstrap.toml pin when a release supports it) or hold the Kubernetes minor until then.

  3. Warning: four customImage pins pair the new tag with the old digest. mgmt/local-host/clusters/docker/cluster-class.yaml:84 and :99, and mgmt/local-host/clusters/management/cluster-class.yaml:89 and :104, now read kindest/node:v1.37.0@sha256:099e049362..., but 099e0493... is the digest of v1.36.4; v1.37.0 is sha256:a1ed56cf... (registry-verified above; this same PR's images.txt:45-46 carries a1ed56cf for v1.37.0). On main these lines were tag+digest consistent; the PR changed the tag and left the digest, so the Renovate custom manager for these files updates the tag without the digest. A tag+digest pull of a mismatched pair fails, which breaks CAPD node creation on the local-host profile. Fix: extend the custom manager (or autoReplaceStringTemplate) to bump tag and digest together, then regenerate.

  4. Warning: docs left behind by an incomplete sweep. docs/airgap.md:138-139 still document archive filenames kindest_node_v1.36.4_mgmt.tar and kindest_node_v1.36.4.tar, but build-package.sh now writes kindest_node_v1.37.0_mgmt.tar and kindest_node_v1.37.0.tar. docs/operations.md:697 still says "The workload uses Kubernetes v1.36.4". docs/airgap.md:316 and the airgap/images.txt:50 section header "(v1.36.4 generation)" describe the previous node generation. Suggestion: fold these into the same human-completes pass as findings 1-3 so the runbook describes the versions that actually ship.

Looks good (checked, no issue): the stage-and-create-cluster.sh KIND_NODE_IMAGE default and the build-config-artifact.sh customImage anchor both carry the correct new tag+digest pair (a1ed56cf); the cluster-class topology version bumps are consistent with the kubeadm target; the Talos kubernetes/kubernetes patch bump is orthogonal to the two gates and not blocked by this review beyond finding 2's support ceiling.

Cross-reference: the earlier batch review (2026-10-12) flagged items 1 and 2 on an older head; findings 3 and 4 are new at this head.

lmilbaum added a commit to lmilbaum/krops that referenced this pull request Oct 13, 2026
)

Remove the CI gate that rejected cert-manager/Kubernetes pairings outside
the upstream published window. The gate was originally added to catch
chart/image drift (polarsquad#322), but that failure mode is already covered by the
surviving tests/test-cert-manager-version-consistency.py. The gate then
blocked PR polarsquad#591 (v1.37.0 bump) even though the exact pairing passed the
scheduled air-gapped nightly on 2026-09-21 (issue polarsquad#384).

Replace with a non-blocking notice: tests/test-cert-manager-kubernetes-support.py
prints a NOTICE when the pinned pairing is not in VALIDATED_PAIRINGS and
exits 0 in all cases; it only exits 1 on unparseable pins. The dedicated
.github/workflows/airgap-image-existence.yml (path-filtered, polarsquad#465) already
covers the unconditional digest checks removed here from validate.yml.

Seed VALIDATED_PAIRINGS with both the current pin (1.21.2, 1.36.4, within
the cert-manager 1.21 published window 1.33-1.36) and the air-gapped
nightly result (1.21.2, 1.37.0, run 35554802424, 2026-09-21).

Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
shrinedogg pushed a commit that referenced this pull request Oct 14, 2026
Remove the CI gate that rejected cert-manager/Kubernetes pairings outside
the upstream published window. The gate was originally added to catch
chart/image drift (#322), but that failure mode is already covered by the
surviving tests/test-cert-manager-version-consistency.py. The gate then
blocked PR #591 (v1.37.0 bump) even though the exact pairing passed the
scheduled air-gapped nightly on 2026-09-21 (issue #384).

Replace with a non-blocking notice: tests/test-cert-manager-kubernetes-support.py
prints a NOTICE when the pinned pairing is not in VALIDATED_PAIRINGS and
exits 0 in all cases; it only exits 1 on unparseable pins. The dedicated
.github/workflows/airgap-image-existence.yml (path-filtered, #465) already
covers the unconditional digest checks removed here from validate.yml.

Seed VALIDATED_PAIRINGS with both the current pin (1.21.2, 1.36.4, within
the cert-manager 1.21 published window 1.33-1.36) and the air-gapped
nightly result (1.21.2, 1.37.0, run 35554802424, 2026-09-21).

Co-authored-by: Claude Sonnet 4.6 <[email protected]>
@renovate
renovate Bot force-pushed the renovate/kubernetes-version branch from 72da2e2 to 98aedf0 Compare October 14, 2026 04:51
lmilbaum added a commit that referenced this pull request Oct 16, 2026
- fix kindest/node digest mismatch in docker and management cluster-class.yaml (v1.37.0 tag paired with v1.36.4 sha256:099e049... digest; replace with sha256:a1ed56c...)
- fix renovate.json5 "kindest/node image pins" manager to capture and replace @sha256 digest alongside the tag, preventing the same defect on future bumps
- add currentDigest assertion for kindest/node in tests/test-renovate-coverage.py

Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
@lmilbaum
lmilbaum force-pushed the renovate/kubernetes-version branch from edb5b60 to 98aedf0 Compare October 16, 2026 15:34
@renovate
renovate Bot force-pushed the renovate/kubernetes-version branch from 98aedf0 to 34aad82 Compare October 16, 2026 15:35
@lmilbaum lmilbaum self-assigned this Oct 17, 2026

@shrinedogg shrinedogg left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

REQUEST_CHANGES (hold): re-review at head 34aad82. The rebase onto current main today resolved the cert-manager gate finding via #458, but the digest-pin failure and the stale-digest customImage lines remain. Not merging.

Prior findings, item by item (CHANGES_REQUESTED review of 2026-10-13 at 72da2e2):

  1. images.txt component pins vs what kubeadm v1.37.0 deploys (12 lines): STILL OPEN. Identical 12 mismatches in the red check at this head (finding 1 below) and in the local run of the same test.
  2. cert-manager 1.21.2 vs k8s 1.37 support gate: RESOLVED via #458 (merged before this rebase). tests/test-cert-manager-kubernetes-support.py is now notice-only (docstring: "Notice (never fail)... the upstream-window gate that blocked every bootstrap.toml PR was removed in #458") and VALIDATED_PAIRINGS includes (1.21.2, 1.37.0, air-gapped nightly 35554802424). CI "Zarf mise asset pin" is green at this head.
  3. Stale digest on the four customImage lines: STILL OPEN (finding 2 below).
  4. Docs incomplete sweep: STILL OPEN in part; line numbers shifted by the rebase (finding 4 below).
  5. kubernetes-version group split (Talos v1.37.1, kubectl 1.37.1 vs kindest/node v1.37.0): STILL OPEN (finding 3 below).

Remaining blocking findings:

  1. Required check "Air-gap image digest pins" is red at head 34aad82 (run 38925234002, job 117054961038; mergeStateStatus UNSTABLE). The 12 mismatches, verbatim from the job log:

    • airgap/images.txt:33 and :57 coredns v1.14.7, kubeadm v1.37.0 deploys v1.14.6
    • airgap/images.txt:34 and :58 kube-apiserver v1.37.1, deploys v1.37.0
    • airgap/images.txt:35 and :59 kube-controller-manager v1.37.1, deploys v1.37.0
    • airgap/images.txt:36 and :60 kube-proxy v1.37.1, deploys v1.37.0
    • airgap/images.txt:37 and :61 etcd 3.7.2-0, deploys 3.7.0-0
    • airgap/images.txt:38 and :62 kube-scheduler v1.37.1, deploys v1.37.0
      Root cause is unchanged: the kindest/node minor group moves the node image to v1.37.0 while the kubernetes/kubernetes patch group drags the images.txt component pins to v1.37.1, and the contract test treats the node image (topology pins v1.37.0 in mgmt/local-host/clusters/docker/cluster.yaml:21 and mgmt/local-host/clusters/management/cluster.yaml:24) as authoritative. Fix path: python3 airgap/tests/test-airgap-kubeadm-images.py --fix (reconciles the tracked tags and registry digests from kubeadm v1.37.0), or restructure the group so the component pins follow the node image. A uniform v1.37.1 is not possible yet: kindest/node v1.37.1 is a registry 404 (verified below).
  2. Four customImage lines pair the new tag with the old digest: mgmt/local-host/clusters/docker/cluster-class.yaml:84 and :99, mgmt/local-host/clusters/management/cluster-class.yaml:89 and :104 read kindest/node:v1.37.0@sha256:099e049362..., and 099e0493... is the digest of v1.36.4 (registry-verified: v1.36.4 -> sha256:099e0493..., v1.37.0 -> sha256:a1ed56cfb0e7b93589bdf9738cd566405a265939e3620fc4f5de89adff580ae5, the digest images.txt:45-46 and the airgap scripts already carry). This is the tooling gap that #605 fixes (the custom manager's tag-only update). Unblock: land #605, then re-cut this PR so the manager re-captures the digest and the lines become v1.37.0@a1ed56cf...; no gate covers these lines, so finding 1 going green does not imply this is fixed.

  3. Warning: the kubernetes-version group is still split. mise.toml:5 kubectl 1.37.1 and mgmt/local-talos/clusters/management/cluster.yaml:63 v1.37.1 versus kindest/node v1.37.0 everywhere else. With kindest/node v1.37.1 unpublished (registry 404), a uniform bump means 1.37.0 across the group; alternatively re-cut the whole PR as a uniform 1.37.1 once kindest publishes it.

  4. Warning: stale v1.36.4 residue survives the rebase (line numbers from the current head): docs/operations.md:772 "The workload uses Kubernetes v1.36.4"; docs/airgap.md:138-139 archive filenames kindest_node_v1.36.4_mgmt.tar and kindest_node_v1.36.4.tar (build-package.sh now writes v1.37.0 names); docs/airgap.md:316 "v1.36.4 bakes registry.k8s.io/pause:3.10"; airgap/images.txt:50 section header "(v1.36.4 generation)"; docs/dependencies.md:126 "The repo currently pins Kubernetes v1.36.4"; comment residue in airgap/scripts/stage-and-create-cluster.sh:6 and airgap/scripts/build-config-artifact.sh:175.

Verified (commands + results):

  • gh pr view 591 --json headRefOid -> 34aad82; local checkout of pull/591/head matches; diff vs origin/main c48201a is 10 files, 28 additions, 28 deletions.
  • gh pr checks 591 -> only "Air-gap image digest pins" fail; the failing run 38925234002 is on head 34aad82 (verified via the actions/runs API head_sha).
  • python3 airgap/tests/test-airgap-kubeadm-images.py at this head -> exit 1 with the same 12 mismatches as the job log.
  • Docker Hub registry API for kindest/node: v1.36.4 -> sha256:099e049362..., v1.37.0 -> sha256:a1ed56cfb0..., v1.37.1 -> 404.
  • git grep v1.36.4 at this head -> the residue list in finding 4.
  • git show origin/main:tests/test-cert-manager-kubernetes-support.py -> notice-only gate with (1.21.2, 1.37.0) in VALIDATED_PAIRINGS; CI "Zarf mise asset pin" pass at this head.

Cross-reference: #605 (fix: capture kindest/node digest in Renovate custom manager; fresh review, all checks green) is the unblock for finding 2. Merge it, re-run this PR's bump so the manager re-captures the digest, then re-verify findings 1 and 2 at the new head.

Comment thread airgap/images.txt
registry.k8s.io/etcd:3.6.8-0@sha256:397189418d1a00e500c0605ad18d1baf3b541a1004d768448c367e48071622e5
registry.k8s.io/kube-scheduler:v1.36.4@sha256:7d84d58f091f16399673c87ccf579de50ac6ede39a2d6b82946c2dd5d7838ffc
registry.k8s.io/coredns/coredns:v1.14.7@sha256:7efd3c635b03efd68c4e8398fc45f0d993d0e9ab016f72c1cefb0fd6d01aa286
registry.k8s.io/kube-apiserver:v1.37.1@sha256:e190f914a6cc21cab9268485d1ae7282fdeab1315ac64b668aa42d732fd1061d

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Part of the 12 mismatches in the red "Air-gap image digest pins" check (run 38925234002, job 117054961038, same 12 in the local run of airgap/tests/test-airgap-kubeadm-images.py). This line is v1.37.1; kubeadm v1.37.0 (baked in the pinned kindest/node) deploys v1.37.0. The contract test treats the node image as authoritative (topology pins v1.37.0 in the two local-host cluster.yaml files), so the whole 1.37.1 component block (lines 33-38 and 57-62: coredns v1.14.7 vs v1.14.6, kube-apiserver/controller-manager/proxy/scheduler v1.37.1 vs v1.37.0, etcd 3.7.2-0 vs 3.7.0-0) must be reconciled to what kubeadm v1.37.0 deploys, tags and registry digests both. Fix path: python3 airgap/tests/test-airgap-kubeadm-images.py --fix. A uniform v1.37.1 is not possible yet: kindest/node v1.37.1 is a registry 404.

backend:
docker:
customImage: kindest/node:v1.36.4@sha256:099e049362a1526b2db71494e1947aae99bd16290d7c895f2b7ea312e3cbfaed
customImage: kindest/node:v1.37.0@sha256:099e049362a1526b2db71494e1947aae99bd16290d7c895f2b7ea312e3cbfaed

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

New tag with the old digest: this line and line 99 read kindest/node:v1.37.0@sha256:099e0493..., and 099e0493... is the digest of v1.36.4 (Docker Hub registry-verified: v1.36.4 -> 099e0493..., v1.37.0 -> a1ed56cfb0e7b93589bdf9738cd566405a265939e3620fc4f5de89adff580ae5). This is the tag-only-update gap in the kindest custom manager that PR #605 fixes. Land #605 and re-cut this PR so the manager re-captures the digest (both lines must become v1.37.0@a1ed56cf...); no gate covers these lines, so the digest-pin check going green does not imply this is fixed.

backend:
docker:
customImage: kindest/node:v1.36.4@sha256:099e049362a1526b2db71494e1947aae99bd16290d7c895f2b7ea312e3cbfaed
customImage: kindest/node:v1.37.0@sha256:099e049362a1526b2db71494e1947aae99bd16290d7c895f2b7ea312e3cbfaed

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same as the docker cluster class (inline comment there): lines 89 and 104 pair kindest/node:v1.37.0 with the v1.36.4 digest sha256:099e0493...; the v1.37.0 digest is sha256:a1ed56cfb0e7b93589bdf9738cd566405a265939e3620fc4f5de89adff580ae5. Blocked on #605 (digest capture in the custom manager) plus a re-cut of this PR.

shrinedogg pushed a commit that referenced this pull request Oct 18, 2026
)

- extend "kindest/node image pins in management cluster manifests" matchStrings to capture @sha256 digest, so Renovate updates tag and digest atomically
- remove autoReplaceStringTemplate so the default replacement applies
- add both cluster-class.yaml files to test-renovate-coverage.py EXPECTED with a currentDigest assertion

Without this, the Renovate kubernetes-version group PR updates the tag but leaves a stale digest in the management cluster-class files, breaking the air-gap artifact build and the kubeadm image gate.

Co-authored-by: Claude Haiku 5.5 <[email protected]>
@shrinedogg

Copy link
Copy Markdown
Contributor

Note

7 resources changed across 3 apps

Blast radius

  • Kustomization flux-system/docker-workload-cluster: 2 dependents (flux-system/local-workload-cni +1 more)
image from to upstream
kindest/node v1.36.4@sha256:099e04… v1.37.0@sha256:a1ed56… ❔

konflate 0.6.4 · rendered 9ee7514

@shrinedogg shrinedogg left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

REQUEST_CHANGES (hold): re-review at head 9ee7514 (unchanged since the wave capture). The digest-pin mismatch and the red required gate persist; the two digest findings from the previous review are resolved. Not merging.

Prior findings, item by item (CHANGES_REQUESTED review of 2026-10-17 at 34aad82):

  1. images.txt component pins vs what kubeadm v1.37.0 deploys (12 lines): STILL OPEN. Identical 12 mismatches at this head (finding 1 below).
  2. cert-manager vs k8s support gate: RESOLVED and stays resolved. tests/test-cert-manager-kubernetes-support.py at this head is notice-only ("Notice (never fail)... the upstream-window gate that blocked every bootstrap.toml PR was removed in #458").
  3. Stale v1.36.4 digest on the four customImage lines: RESOLVED at this head. All four read kindest/node:v1.37.0@sha256:a1ed56cf... (mgmt/local-host/clusters/docker/cluster-class.yaml:84 and :99, mgmt/local-host/clusters/management/cluster-class.yaml:89 and :104), and a1ed56cf... is the registry digest of v1.37.0. #605 (digest capture in the custom manager) merged 2026-10-18T04:40Z and this PR was re-cut after it.
  4. Docs and comment residue: STILL OPEN (warning 2 below), same set as the previous review, line numbers re-verified at this head.
  5. kubernetes-version group split (Talos v1.37.1, kubectl 1.37.1 vs kindest/node v1.37.0): STILL OPEN (warning 1 below).

Blocking finding:

  1. Required check "Air-gap image digest pins" is red at head 9ee7514 (run 39098022373; the run's head_sha verifies equal to 9ee7514). Every other check at this head is green. The 12 mismatches, verbatim from the job log:
    • airgap/images.txt:33 and :57 coredns/coredns:v1.14.7, kubeadm v1.37.0 deploys v1.14.6
    • airgap/images.txt:34 and :58 kube-apiserver:v1.37.1, deploys v1.37.0
    • airgap/images.txt:35 and :59 kube-controller-manager:v1.37.1, deploys v1.37.0
    • airgap/images.txt:36 and :60 kube-proxy:v1.37.1, deploys v1.37.0
    • airgap/images.txt:37 and :61 etcd:3.7.2-0, deploys 3.7.0-0
    • airgap/images.txt:38 and :62 kube-scheduler:v1.37.1, deploys v1.37.0
      Root cause unchanged: the kindest/node minor group pins the node image to v1.37.0 (mgmt/local-host/clusters/docker/cluster.yaml:21, mgmt/local-host/clusters/management/cluster.yaml:24, airgap/images.txt:45-46) while the kubernetes/kubernetes patch group drags the images.txt component pins to v1.37.1, and the gate treats the node image's kubeadm as authoritative. A lockstep 1.37.1 set cannot land today: kindest/node has no v1.37.1 tag. Docker Hub tags matching "1.37" are exactly [v1.37.0, v1.37.0-rc.1] (checked 2026-10-20). Unblock condition: kindest/node v1.37.1 published upstream, then a Renovate re-cut or manual re-bundle of the whole kubernetes-version group at 1.37.1; until then the component pins must follow kubeadm v1.37.0 (python3 airgap/tests/test-airgap-kubeadm-images.py --fix reconciles the tracked tags and registry digests from kubeadm v1.37.0).

Warning 1 (non-blocking): the kubernetes-version group remains split at this head: mise.toml:5 kubectl 1.37.1 and mgmt/local-talos/clusters/management/cluster.yaml:63 TalosControlPlane v1.37.1 versus kindest/node v1.37.0 everywhere else. The environments are intentionally independent and the kind side is capped by the missing node image; converge them in the 1.37.1 re-cut.

Warning 2 (non-blocking): stale v1.36.4 residue survives at this head (line numbers from the head): airgap/images.txt:50 section header "(v1.36.4 generation)" above 1.37.1 lines; docs/operations.md:772 "The workload uses Kubernetes v1.36.4"; docs/airgap.md:138-139 archive names kindest_node_v1.36.4_mgmt.tar and kindest_node_v1.36.4.tar (build-package.sh:109-110 now writes v1.37.0 names); docs/airgap.md:316; docs/dependencies.md:126; comment residue airgap/scripts/stage-and-create-cluster.sh:6 and airgap/scripts/build-config-artifact.sh:175. Sweep these in the same re-cut.

Artifact verification (everything else about the bump checks out):

  • Every registry.k8s.io pin in this PR exists and its tag resolves to exactly the pinned digest (registry HEAD, checked 2026-10-20): kube-apiserver v1.37.1 -> sha256:e190f914..., kube-controller-manager v1.37.1 -> sha256:d470c1b8..., kube-proxy v1.37.1 -> sha256:b9ae667e..., kube-scheduler v1.37.1 -> sha256:b6e2474a..., coredns/coredns v1.14.7 -> sha256:7efd3c63..., etcd 3.7.2-0 -> sha256:7c6c2398... Both sections carry identical digests.
  • kindest/node:v1.37.0 -> sha256:a1ed56cf... (Docker Hub tag API), identical to every node pin in the PR (images.txt:45-46, both cluster-class files, all three scripts).
  • kubernetes/kubernetes v1.37.1 exists (git tag d2b770f4...), so the Talos and kubectl pins reference a real release.
  • mise.toml parses (tomllib, kubectl = 1.37.1); YAML validity at this head is covered by green CI (Lint YAML, Build kustomize overlays).
  • CI "Air-gap image existence" is green at this head: every images.txt digest is pullable, so the partial bump would not break the bundle build, only the version contract.

Release notes: Kubernetes v1.36.4 -> v1.37.0 (CHANGELOG-1.37, checked 2026-10-20): kubeadm v1beta3 config API removed (k8s#136016) with no hand-written kubeadm configs in this repo (grep clean); kubeadm now explicitly sets KubeProxyConfiguration.mode=iptables and kube-proxy warns when unset (k8s#139777, benign for kind); default etcd updated to 3.7.0 (k8s#140333), consistent with the 3.7.x pin trajectory but kubeadm v1.37.0 deploys 3.7.0-0, not the pinned 3.7.2-0; kubeadm passes graduated etcd flags instead of the experimental ones removed in etcd 3.7 (k8s#132838). None of these interact with the repo's pinned topology beyond finding 1.

Verified (commands and results):

  • gh pr view 591 --json headRefOid -> 9ee7514 (unchanged since capture; this head was reviewed).
  • gh pr checks 591 -> only "Air-gap image digest pins" fail; gh api actions/runs/39098022373 -> head_sha 9ee7514..., conclusion failure.
  • gh run view 39098022373 --log-failed -> the 12 verbatim mismatches quoted above, target "kindest/node: v1.37.0".
  • airgap/images.txt read at the head: lines 33-38 and 57-62 carry the 1.37.1-generation tags; lines 45-46 carry kindest/node v1.37.0@a1ed56cf.
  • Docker Hub API: /repositories/kindest/node/tags?name=1.37 -> [v1.37.0, v1.37.0-rc.1]; /tags/v1.37.0 -> sha256:a1ed56cf...
  • registry.k8s.io HEAD per tag: six of six digests match the pins exactly (values above).
  • git ls-remote kubernetes/kubernetes v1.37.1 -> d2b770f4c94636a992534a8d3156b6b2d8e82ac3.
  • mise exec -- python3 -c tomllib.load(mise.toml) -> OK, kubectl 1.37.1.
  • grep at the head for kindest/node:v1.37.0@ -> all 10 pin sites carry a1ed56cf, no old-digest stragglers; grep for kubeadm.k8s.io apiVersion -> no hand-written kubeadm configs.

Cross-reference: #605 (merged) fixed the custom manager's digest capture and resolved prior finding 3 at this head. The remaining unblock is upstream only (kindest/node v1.37.1) plus the re-cut that follows it.

Comment thread airgap/images.txt
registry.k8s.io/etcd:3.6.8-0@sha256:397189418d1a00e500c0605ad18d1baf3b541a1004d768448c367e48071622e5
registry.k8s.io/kube-scheduler:v1.36.4@sha256:7d84d58f091f16399673c87ccf579de50ac6ede39a2d6b82946c2dd5d7838ffc
registry.k8s.io/coredns/coredns:v1.14.7@sha256:7efd3c635b03efd68c4e8398fc45f0d993d0e9ab016f72c1cefb0fd6d01aa286
registry.k8s.io/kube-apiserver:v1.37.1@sha256:e190f914a6cc21cab9268485d1ae7282fdeab1315ac64b668aa42d732fd1061d

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Blocking: this pin and its 11 siblings (:33-38 and :57-62) disagree with what kubeadm v1.37.0 deploys (kube-apiserver v1.37.0), and the gate treats the node image's kubeadm as authoritative, so the required check is red at this head. The digest itself is correct (registry HEAD: v1.37.1 -> sha256:e190f914...). Root cause: kindest/node has no v1.37.1 tag ([v1.37.0, v1.37.0-rc.1] only), so the kubernetes/kubernetes patch group ran ahead of the kind group. Unblock: kindest/node v1.37.1 published upstream, then re-cut the lockstep 1.37.1 set; or follow node v1.37.0 via test-airgap-kubeadm-images.py --fix.

Comment thread airgap/images.txt
registry.k8s.io/kube-proxy:v1.36.4@sha256:b33fcdd8319290736e566f5fc2225ca07d3c2dfc025fb006342791aa31be4603
registry.k8s.io/etcd:3.6.8-0@sha256:397189418d1a00e500c0605ad18d1baf3b541a1004d768448c367e48071622e5
registry.k8s.io/kube-scheduler:v1.36.4@sha256:7d84d58f091f16399673c87ccf579de50ac6ede39a2d6b82946c2dd5d7838ffc
registry.k8s.io/coredns/coredns:v1.14.7@sha256:7efd3c635b03efd68c4e8398fc45f0d993d0e9ab016f72c1cefb0fd6d01aa286

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggestion (non-blocking): the section header above this block, airgap/images.txt:50, still reads "Workload node containerd store [W] (v1.36.4 generation)" while the block now pins 1.37.1-generation tags. Update the header in the same re-cut (same for docs/operations.md:772, docs/airgap.md:138-139 and :316, docs/dependencies.md:126, and the comments at airgap/scripts/stage-and-create-cluster.sh:6 and airgap/scripts/build-config-artifact.sh:175).

This branch has not been deployed

No deployments
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.

2 participants