packages: add containerd-2.2#862
Conversation
5e92c50 to
4d712bc
Compare
|
@ytsssun We should carry containerd/containerd#13125 as part of this work. |
Sounds good. Will that patch land in a new release soon? If not I can add a patch for this. @henry118 |
I think it will be part of v2.2.3. We'll have to carry it by ourselves for 2.2.2 |
Signed-off-by: Yutong Sun <yutongsu@amazon.com>
Bump the priority epoch for containerd 2.1 from 0 to 1 to establish the correct precedence among containerd packages. A higher epoch means the package is preferred when resolving the generic 'containerd' dependency. The resulting priority order is: containerd 1.7 (epoch 2) > containerd 2.1 (epoch 1) > containerd 2.2 (epoch 0) Signed-off-by: Yutong Sun <yutongsu@amazon.com>
…el unpack Carry containerd/containerd#13125 (cherry-pick of #13115 to release/2.2). Fixes whiteouts being ignored when parallel unpack is used with overlayfs by converting bind mounts to overlay mounts before applying diffs. Signed-off-by: Yutong Sun <yutongsu@amazon.com>
|
LGTM will wait for patch |
4d712bc to
1313a25
Compare
|
Verified the fix on a running Snapshot inspection confirms the whiteout character device is present: Without the patch, snapshot would be missing the |
Issue number:
Closes #806
Description of changes:
Introduces containerd
2.2.2as a new package, replacing containerd 2.1 for all 34 variants.Upstream changelogs:
Patch changes:
1002-bump-google-golang-org-grpc.patch— upstream 2.2.2 ships gRPC v1.78.0+ natively1001(io_uring revert) — still needed, io_uring syscalls blocked in seccomp defaults1002(credential fallback) — was 1003, transfer service credential fallback1003(hosts-dir) — was 1004, ctr default hosts-dirOther changes:
clarify.toml— removed stalegoyaml.v2/*entriesTesting done:
1. Binary versions (verified on running node):
2. Conformance testing: 20/20 unique variant/arch combos passing
Full conformance results per variant/arch
3. SubPath test (bottlerocket#4755): Kubernetes 1.35 enables OCI image volumes by default, but containerd 2.1 silently ignores the
subPathfield involumeMountsfor these volumes — mounting the entire image filesystem regardless of the subPath value. We built a test OCI image with a known directory structure, deployed the same pod manifest on both the GA AMI (containerd 2.1) and our custom build (containerd 2.2), and confirmed that 2.1 mounts the full image while 2.2 correctly scopes the mount to only the specified subdirectory. Verified with containerd 2.2.1; low risk for 2.2.2 (no relevant changes in the image volume path).Full test steps and output
Test image pushed to ECR (
<ACCOUNT_ID>.dkr.ecr.us-west-2.amazonaws.com/subpath-test:latest):Pod manifest (same for both tests), mounting with
subPath: data/subdir-a:containerd 2.1 (aws-k8s-1.35 GA AMI) — subPath ignored ❌
The entire image filesystem is mounted at
/mnt/test:containerd 2.2 (custom aws-k8s-1.35 build) — subPath working ✅
Only the contents of
data/subdir-aare mounted at/mnt/test:4. Image pull performance: Tested CRI pull times on m5d.4xlarge with ephemeral NVMe storage, pulling
docker.io/pytorch/pytorch:2.3.0-cuda12.1-cudnn8-devel(8.5GB compressed).crictl pullctr pullTest environment and configuration
All tests on m5d.4xlarge (16 vCPU, 64GB RAM, 2x300GB NVMe SSD).
Ephemeral NVMe storage bound via bootstrap command to
/var/lib/containerd,/var/lib/kubelet,/var/log/pods.All three configurations use 20 max concurrent downloads.
Containerd 2.1.6 (baseline): Concurrent downloads only, no parallel unpack.
Containerd 2.2.2: Concurrent downloads + parallel unpack (5 concurrent unpacks).
SOCI parallel-pull-unpack (on containerd 2.1.6): SOCI manages both downloads and unpacks via the CRI path.
Ephemeral storage also bound to
/var/lib/soci-snapshotter(SOCI's unpack working directory).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.