packages: add containerd-2.3 - #1023
Merged
Merged
Conversation
Signed-off-by: Craig Qian <qianxj@amazon.com>
vigh-m
approved these changes
Sep 2, 2026
piyush-jena
approved these changes
Sep 2, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description of changes:
Introduces containerd
2.3.4as a new package. 2.3 is the first LTS in the 2.x line (supported to ~April 2028); containerd 2.2 goes EOL 2026-11-06, about a month after EKS 1.37 GA so the k8s-1.37 variants can't ship on it. No variant adopts it in this PR.Upstream changelogs:
Patch changes: none. All three patches from
containerd-2.2apply cleanly to 2.3.4 and carry forward unchanged.Other changes: added
export GO_MAJOR="1.26"to%buildin the spec — containerd 2.3'sgo.moddeclaresgo 1.26.3, newer than the SDK default.Testing done
1. Binary versions (verified on a running node):
2. Conformance testing: 26/26 variant/arch combos passing.
Full conformance results per variant/arch
A version-skew run (aws-k8s-1.36 nodes against a 1.37 beta control plane,
conformance:v1.37.0-beta.0) also passed with 0 failures.3. Seccomp defaults (containerd#13409):
containerd 2.3.1 hardened the default seccomp socket policy to block
AF_ALG, and Bottlerocket's patch1001re-allows io_uring in that same code — so the two interact. We ran three probes on a 2.3.4 node and confirmedAF_ALGis blocked underRuntimeDefault(errno=1, EPERM), works underUnconfined(proving the block is seccomp-only, not kernel), and thatio_uring_setup(2)still succeeds underRuntimeDefault(fd=3) — patch1001survives the rebase. Note this makesAF_ALGunavailable toRuntimeDefaultworkloads on 2.3+; upstream behavior, no BR patch re-allows it.Probe results
4. Sandbox image resolution (containerd#13759): containerd 2.3.4 normalizes sandbox image references, and Bottlerocket pins
sandbox = "localhost/kubernetes/pause:0.1.0", so the pinned local reference could have been rewritten. Confirmed it still resolves — theio.cri-containerd.pinnedlabel shows CRI recognized it as the configured sandbox image, andjournalctl -u containerdshows only localImageCreate/ImageUpdateevents with no registry pull attempts.5. CRI stats (containerd#12629):
containerd 2.3.0 added a background collector that computes
UsageNanoCoresfor the kubelet Summary API (relates to Kubernetes KEP-2371). Verified on a cgroup v2 node under astress --cpu 1 --vm 1 --vm-bytes 200Mpod that the field is populated with a plausible rate.6. Shim lifecycle across a containerd restart (#12786 bootstrap protocol, #13803 start-response corruption, #13857 orphaned shims):
containerd 2.3.0 replaced the shim bootstrap mechanism and 2.3.4 carries two fixes to it, so shim re-adoption is new code on this path. Conformance never restarts containerd, so we tested it directly: with a single-container pod and a two-container pod pinned to one node, we restarted
containerd.serviceand confirmed the shims survived and were re-adopted rather than recreated.Note two Bottlerocket specifics:
containerd.servicesetsKillMode=process, so systemd leaves the shim children running — that is the mechanism being exercised. Andkubelet.servicesetsBindsTo=containerd.service, so kubelet restarts alongside containerd and the node is brieflyNotReady; that is expected, not a regression.Before / after on the node and from the cluster
containerd was restarted (MainPID
1844→3949). All six shim PIDs are unchanged and their elapsed times grew continuously across the restart, i.e. the processes were never respawned:Container identity and restart counts unchanged, and the marker file written at container start still holds its original value — proving the same container filesystems, not recreated ones:
journalctl -u containerdshowed no load failures or protocol errors, and a pod created after the restart ran successfully (post-restart-ok), confirming containerd was left fully functional.7. SOCI snapshotter (#13071):
containerd 2.3.0 began passing two additional labels to snapshotters when unpacking image layers —
containerd.io/snapshot/diff-idandcontainerd.io/snapshot/parent-chain-id. Bottlerocket shipssoci-snapshotter0.15.0 as an external proxy-snapshotter plugin (separate process over gRPC), so that label contract is a cross-process interface which the compiler cannot check. SOCI is also opt-in (settings.container-runtime.snapshotter = "soci", defaultoverlayfs), so none of the tests above exercise it, and its failure mode is a silent fallback to overlayfs where pods still run and lazy loading is simply gone. Tested explicitly on a node booted with the SOCI setting.SOCI verification
Setting applied and plugin healthy:
The decisive check — SOCI served every snapshot and overlayfs served none, ruling out silent fallback:
The test pod's sandbox is traceable to a SOCI-managed snapshot — containerd logged
RunPodSandbox for name:"soci-a" ... returns sandbox id "4d2d28a089bcafe98...", and that same ID appears as anActivesnapshot in the soci list above.Neither
journalctl -u soci-snapshotternorjournalctl -u containerdreported any snapshot/label errors; containerd loggedGet image filesystem path "/var/lib/soci-snapshotter" for snapshotter "soci".Terms of contribution:
By submitting this pull request, I agree that this contribution is dual-licensed under the terms of both the Apache License, version 2.0, and the MIT license.