微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么 Skaffold 在构建到本地 docker 守护进程时会维护两个标签?

如何解决为什么 Skaffold 在构建到本地 docker 守护进程时会维护两个标签?

a different question 中询问:

为什么 skaffold 需要对同一张图片使用两个标签

解决方法

在部署过程中,Skaffold 会重写正在部署的 Kubernetes 清单中的镜像引用,以确保集群拉取新构建的镜像并且不使用陈旧的副本(阅读 imagePullPolicy 和一些问题它试图解决)。 Skaffold 不能只使用计算出的图像标签,因为许多标签约定不会产生唯一的标签,并且该标签可以被其他开发人员覆盖并指向不同的图像。开发团队或并行测试将图像推送到同一个图像存储库并遇到标签冲突的情况并不少见。例如,latest 将被下一个构建覆盖,并且默认的 gitCommit 标记器生成诸如 v1.17.1-38-g1c6517887 之类的标记,它使用最新版本标记和当前提交 SHA,因此不是在未提交的源更改中是唯一的。

推送到注册表时,Skaffold 可以使用图像的摘要,即 @gcr.io/my-project/image:latest@sha256:xxx 之后的部分。此摘要是映像配置和层的哈希值,可唯一标识特定映像。当有摘要时,容器运行时会忽略标记(此处为 latest)。

当将镜像加载到 Docker 守护进程时,就像部署到 minikube 时发生的那样,Docker 守护进程不维护镜像摘要。因此,Skaffold 使用计算摘要用第二个标签标记图像。两个不同的图像极不可能具有相同的计算摘要,除非它们是相同的图像。

标签很便宜:它们就像符号链接,指向图像标识符。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。