如何手动构建并推送各架构的 Kubernetes conformance 测试镜像
Kubernetes 的 conformance 镜像是一个用于在集群中启动端到端一致性(conformance)测试的独立容器,默认针对多种架构构建,并在每次 release 时自动推送。如果你需要为某个特定版本手动构建并推送这个镜像(例如自建镜像仓库、或为某个发布版本补推缺失架构),可以按仓库文档提供的 make 流程操作。本文基于 test/conformance/image/README.md 与 test/conformance/image/Makefile 的内容,覆盖从构建二进制、逐架构推送,到用镜像跑测试并判断结果的完整路径。
准备条件
- 已检出 Kubernetes 源码仓库,并在仓库根目录执行构建命令。
- 本机装有 Docker,且
make push使用的构建目标依赖docker buildx(镜像 Makefile 中的构建命令为docker buildx build)。 - 基础镜像为
registry.k8s.io/build-image/debian-base-${ARCH}:bookworm-v1.0.6,构建时会通过--pull拉取,需要网络可达。 - 默认推送到
registry.k8s.io(Makefile 中REGISTRY?=registry.k8s.io)。如果推送到自己的仓库,文档给出的方式是export REGISTRY=$HOST/$ORG切换到其他 registry;请确保有对应仓库的推送权限。
第一步:构建 conformance 镜像所需的二进制
镜像构建会把以下二进制拷贝进镜像(见 Dockerfile:ginkgo、e2e.test、kubectl 安装到 /usr/local/bin/,gorunner 安装为 /usr/local/bin/kubeconformance)。这些二进制先要在仓库根目录用 make 构建出来:
$ make WHAT="test/e2e/e2e.test github.com/onsi/ginkgo/v2/ginkgo cmd/kubectl test/conformance/image/go-runner"
镜像的 Makefile 会从 _output/local/bin/linux/$(ARCH) 或 _output/dockerized/bin/linux/$(ARCH) 查找这四个二进制(ginkgo、kubectl、e2e.test、go-runner),找不到时会使用 dockerized 构建产物。因此这一步需要为目标架构产出对应二进制。
第二步:逐架构构建并推送
镜像 README 给出的完整命令如下,{target_version} 需要替换为你要发布的目标 Kubernetes 版本号(镜像 Makefile 的用法说明中标注为 VERSION={some_released_version_of_kubernetes},且 VERSION 未定义时 Makefile 会直接报错):
# Build for linux/amd64 (default)
$ make push VERSION={target_version} ARCH=amd64
# ---> registry.k8s.io/conformance-amd64:VERSION
# ---> registry.k8s.io/conformance:VERSION (image with backwards-compatible naming)
$ make push VERSION={target_version} ARCH=arm
# ---> registry.k8s.io/conformance-arm:VERSION
$ make push VERSION={target_version} ARCH=arm64
# ---> registry.k8s.io/conformance-arm64:VERSION
$ make push VERSION={target_version} ARCH=ppc64le
# ---> registry.k8s.io/conformance-ppc64le:VERSION
$ make push VERSION={target_version} ARCH=s390x
# ---> registry.k8s.io/conformance-s390x:VERSION
各条命令的行为(对应 镜像 Makefile 的 build 和 push 目标):
build:把ginkgo、kubectl、e2e.test、go-runner和cluster/目录拷入临时目录,执行docker buildx build --platform linux/${ARCH} --load,产出镜像${REGISTRY}/conformance-${ARCH}:${VERSION}。push:在build之后执行docker push ${REGISTRY}/conformance-${ARCH}:${VERSION}。- 仅
ARCH=amd64时额外打一个向后兼容标签:docker tag ... conformance:${VERSION}并推送,即${REGISTRY}/conformance:${VERSION}。其他架构不会产生这个兼容标签。
如果只想本地构建、不推送,文档说明改用 make 或 make build 即可(不带 push)。
构建完成后,预期在 registry 中得到 conformance-amd64、conformance-arm、conformance-arm64、conformance-ppc64le、conformance-s390x 各带目标版本 tag 的镜像,amd64 额外有一个无架构后缀的 conformance 兼容镜像。
用推送的镜像运行 conformance 测试
推送完成后,文档给出了在集群中运行测试的方式(README 的 "How to run tests" 一节):
$ kubectl create -f conformance-e2e.yaml
其中 conformance-e2e.yaml 会创建 conformance 命名空间、ServiceAccount 与 ClusterRoleBinding(对全部 API 资源授予全部权限,另对 /metrics、/logs 只读),并启动一个名为 e2e-conformance-test 的 Pod,设置 E2E_FOCUS="\[Conformance\]"、E2E_PROVIDER="skeleton"、E2E_PARALLEL="false" 等环境变量,把结果目录挂载到宿主机 /tmp/results(hostPath 卷,需要宿主机上存在或允许创建该目录)。注意该 YAML 中示例镜像固定写作 registry.k8s.io/conformance-amd64:v1.14;如果你刚推送了其他版本或推送到了自己的 registry,需要先将其中的 image 字段替换为你实际推送的镜像名,再应用。
仓库还提供了 conformance-e2e.sh 脚本,它封装了应用 YAML 后的状态轮询:
$ kubectl -n conformance get pods e2e-conformance-test -o jsonpath="{.status.phase}"
按脚本中的判断逻辑:
- Pod 状态为
Succeeded:测试完成,脚本提示用kubectl logs -n conformance e2e-conformance-test查看结果; - Pod 状态为
Failed:脚本会执行kubectl -n conformance describe pods e2e-conformance-test和kubectl -n conformance logs e2e-conformance-test输出详细信息后以非零码退出; - 其他状态:每 5 秒轮询一次,直到进入上述终态。
限制说明
- 默认 registry 是
registry.k8s.io,推送前必须保证有权限;切换到自建仓库用REGISTRY=$HOST/$ORG。 VERSION为必填项,且按文档应取一个已发布的 Kubernetes 版本。- 向后兼容标签
conformance:VERSION只在ARCH=amd64时生成,不要在其他架构上期待同名镜像。 - 运行测试的 YAML 需要与推送的镜像版本保持一致,宿主机上的
/tmp/results路径需可用,否则结果卷挂载会失败。
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0629
MiniCPM5-2BMiniCPM5-2B 是一款面向端侧、本地部署和资源受限场景的 2B 稠密 Transformer,能够达到同尺寸开源模型 SOTA 水平。Markdown00
GLM-5.3GLM-5.3 与 GLM-5.2 使用相同的基座模型——所有提升均来自后训练。与 GLM-5.2 相比,它在复杂编程和长程任务上的表现显著提升。Jinja00
HivisionIDPhotos⚡️HivisionIDPhotos: a lightweight and efficient AI ID photos tools. 一个轻量级的AI证件照制作算法。Python07
DragonOSDragonOS is an operating system developed from scratch using Rust, with Linux compatibility. It is designed for **Serverless** scenarios. 使用Rust从0自研内核,具有Linux兼容性的操作系统,面向云计算Serverless场景而设计。Rust00
Spark-X2.5-1.7BSpark-X2.5-1.7B 旨在让强大的 AI 更加实用、高效且易于获取。这些模型在广泛的日常任务中表现出色,涵盖对话、写作、翻译、推理、编程、工具调用和智能体工作流,并在同等规模的开源模型中取得领先结果。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00