首页
/ 如何手动构建并推送各架构的 Kubernetes conformance 测试镜像

如何手动构建并推送各架构的 Kubernetes conformance 测试镜像

2026-09-08 16:26:44作者:冯爽妲Honey

Kubernetes 的 conformance 镜像是一个用于在集群中启动端到端一致性(conformance)测试的独立容器,默认针对多种架构构建,并在每次 release 时自动推送。如果你需要为某个特定版本手动构建并推送这个镜像(例如自建镜像仓库、或为某个发布版本补推缺失架构),可以按仓库文档提供的 make 流程操作。本文基于 test/conformance/image/README.mdtest/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 镜像所需的二进制

镜像构建会把以下二进制拷贝进镜像(见 Dockerfileginkgoe2e.testkubectl 安装到 /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) 查找这四个二进制(ginkgokubectle2e.testgo-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

各条命令的行为(对应 镜像 Makefilebuildpush 目标):

  • build:把 ginkgokubectle2e.testgo-runnercluster/ 目录拷入临时目录,执行 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}。其他架构不会产生这个兼容标签。

如果只想本地构建、不推送,文档说明改用 makemake build 即可(不带 push)。

构建完成后,预期在 registry 中得到 conformance-amd64conformance-armconformance-arm64conformance-ppc64leconformance-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-testkubectl -n conformance logs e2e-conformance-test 输出详细信息后以非零码退出;
  • 其他状态:每 5 秒轮询一次,直到进入上述终态。

限制说明

  • 默认 registry 是 registry.k8s.io,推送前必须保证有权限;切换到自建仓库用 REGISTRY=$HOST/$ORG
  • VERSION 为必填项,且按文档应取一个已发布的 Kubernetes 版本。
  • 向后兼容标签 conformance:VERSION 只在 ARCH=amd64 时生成,不要在其他架构上期待同名镜像。
  • 运行测试的 YAML 需要与推送的镜像版本保持一致,宿主机上的 /tmp/results 路径需可用,否则结果卷挂载会失败。
登录后查看全文
热门项目推荐
相关项目推荐

项目优选

收起
kernelkernel
deepin linux kernel
C
33
18
ops-transformerops-transformer
本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。
C++
1.14 K
2.74 K
pytorchpytorch
作为 Ascend for PyTorch 社区的核心组件,TorchNPU 是昇腾专为 PyTorch 打造的深度学习适配插件,使 PyTorch 框架能够直接调用昇腾 NPU,为开发者提供昇腾 AI 处理器的超强算力。
Python
857
1.35 K
docsdocs
暂无描述
Markdown
897
5.81 K
kernelkernel
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
531
595
ops-nnops-nn
本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。
C++
920
1.84 K
jiuwenswarmjiuwenswarm
JiuwenSwarm 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。
Python
3.63 K
1.02 K
ops-mathops-math
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
1.36 K
1.46 K
cann-learning-hubcann-learning-hub
CANN 学习中心仓,支持在线互动运行、边学边练,提供教程、示例与优化方案,一站式助力昇腾开发者快速上手。
Jupyter Notebook
1.02 K
518
AscendNPU-IRAscendNPU-IR
AscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优
C++
547
389