Skip to content

fix(build): version-match the containerd pause image to kubeadm (C4)#21

Merged
wrkode merged 1 commit into
mainfrom
fix/c4-version-matched-pause
Jun 29, 2026
Merged

fix(build): version-match the containerd pause image to kubeadm (C4)#21
wrkode merged 1 commit into
mainfrom
fix/c4-version-matched-pause

Conversation

@wrkode

@wrkode wrkode commented Jun 29, 2026

Copy link
Copy Markdown
Collaborator

What

Fix pitfall C4: the containerd pod-sandbox (pause) image was hardcoded to registry.k8s.io/pause:3.10 for every build, but kubeadm expects a per-minor pause:

minor kubeadm pause
1.34 / 1.35 3.10.1
1.36 3.10.2

The registry was already correct (not the dead k8s.gcr.io), but the stale tag means containerd uses a different pause than kubeadm pre-pulls — a duplicate image + version drift.

Fix

  • The Dockerfile now resolves the pause image from the bundled kubeadm at build time (kubeadm config images list) and rewrites sandbox_image, so it always matches the target minor. containerd/config.toml keeps a placeholder the build overwrites.
  • New CI step asserts the shipped sandbox_image equals kubeadm pause per minor, so a stale tag cannot silently regress.

Verification

Validated locally: kubeadm 1.34.0 -> pause:3.10.1, 1.36.0 -> pause:3.10.2; the sed rewrite + assert pass against the real config.toml. actionlint clean; Go gates unaffected (no Go change). The full per-minor build + the new assertion run in CI.

Closes kairos-io/kairos#4200.

🤖 Generated with Claude Code

containerd/config.toml hardcoded registry.k8s.io/pause:3.10 for every build,
but kubeadm expects a per-minor pause: 3.10.1 (1.34/1.35) and 3.10.2 (1.36).
The registry was already correct (not the dead k8s.gcr.io), but the stale tag
means containerd pulls a different pause than kubeadm pre-pulled -- a duplicate
image and version drift (pitfall C4).

Resolve the pause image from the bundled kubeadm at build time
(kubeadm config images list) and rewrite sandbox_image, so it always matches the
target Kubernetes minor instead of a hardcoded tag. The config.toml value is now
a placeholder the build overwrites. A CI step asserts the shipped
sandbox_image equals kubeadm pause per minor, so it cannot silently regress.

Verified locally: kubeadm 1.34.0 -> pause:3.10.1, 1.36.0 -> pause:3.10.2; the
sed rewrite + assert pass against the real config.toml.

Closes kairos-io/kairos#4200.

Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: William Rizzo <william.rizzo@gmail.com>

@wrkode wrkode left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

LGTM

@wrkode
wrkode merged commit edc7975 into main Jun 29, 2026
9 checks passed
@wrkode
wrkode deleted the fix/c4-version-matched-pause branch June 29, 2026 10:39
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.

provider-kubernetes: use registry.k8s.io with a version-matched pause image (C4)

1 participant