【问题标题】:issues with K8s compiled docker imagesK8s 编译的 docker 镜像的问题
【发布时间】:2025-12-04 19:40:02
【问题描述】:

将 repo (tag v1.14.0) 克隆到本地机器后;我修改了cmd/kube-apiserver/app/server.go 文件;我添加了一行新代码,即客户日志条目 在 K8s 代码编译时,我在 _output/release-images/amd64/ 中找到了 docker images tar 球,我使用了 docker load -i _output/release-images/amd64/kube-apiserver.tar 它添加了一个新构建的 apiserver docker 映像,但是,它不会覆盖标签,而是创建一个新标签 v1.14.0-dirty

现在我的问题是K8s 如何以及为什么将dirty 后缀添加到图像标签? 现在,当我执行 kubeam init 时,它仍然会部署带有 v1.14.0 标签的原始镜像,并且不会部署带有 v1.14.0-dirty 标签的新建镜像

如何使用新建的 docker 镜像启动 K8s?

【问题讨论】:

    标签: kubernetes kubeadm kube-apiserver


    【解决方案1】:

    一个快速而肮脏的解决方案是添加另一个命令:

    docker tag k8s.gcr.io/kube-apiserver:v1.14.0-dirty k8s.gcr.io/kube-apiserver:v1.14.0
    

    这应该为图像创建正确的标签。

    dirty 标签可以在 tar 构建阶段应用,因为构建器检测到 git 存储库状态为 dirty

    【讨论】:

    • 是的,这就是最初取得的进展;感谢您的提醒。
    • 目前我看不到其他出路;但必须有正确的方法
    【解决方案2】:

    Kubeadm 在 /etc/kubernetes /manifests 下为 api 服务器、控制器、调度程序服务创建清单。

    更新上述路径中的 api server 镜像名称,然后删除 api server pods。

    【讨论】:

    • 这些 yaml 在kubeadm init 之后不断被覆盖;在此处进行更改以使用自定义图像标记不起作用。
    • kubeadm init 是一次性活动。如果您运行多次,则每次都会重新初始化集群