在 Kubernetes 上发布新版本时自动更新容器映像

aku*_*scu 8 containers docker kubernetes devops

我有一个私人存储库。我想在此私有存储库上更新映像时自动更新 Kubernetes 上的映像。我怎样才能做到这一点?

Arg*_*dhu 6

Kubernetes 本身没有在有新镜像时自动重新部署 pod 的功能。理想情况下,您需要的是一个支持 GitOps 风格部署的工具,其中 git 中的状态更改将同步到 Kubernetes 集群。有支持 GitOps 的FluxArgoCD开源工具。

最近宣布将这两个项目合并为 ArgoFlux。


Dav*_*aze 5

您应该为每个构建分配某种唯一标识符。这可以基于源代码控制标记(如果您明确标记版本)、提交 ID、内部版本号、时间戳或其他内容;但重要的细节是,每个构建都会创建一个具有唯一名称的独特图像。

完成此操作后,您的 CI 系统需要使用新的image:. 如果您使用的是 Kustomize 或 Helm 等工具,则有标准模式可以提供此功能;如果直接使用kubectl apply,则需要在应用之前以某种方式修改部署规范。

这些因素的结合意味着 Deployment 的嵌入式 pod 规范将发生某种实质性的改变(它image:已经改变),这将导致 Kubernetes 部署控制器自动为您进行滚动更新。如果出现问题,普通的 Kubernetes 回滚机制将正常工作(因为带有昨天标签的镜像仍在您的存储库中)。您不需要手动设置imagePullPolicy:或手动导致部署重新启动,更改部署中的映像标签足以导致正常部署发生。


bel*_*ckn 3

查看各种图像拉取策略

imagePullPolicy: always可能最接近您的需要。我不知道“vanilla”K8s 中是否有办法实现自动图像拉取,但我知道 RedHat 的 OpenShift(或 OKD,免费版本)可与图像流配合使用,这正是您所要求的。