当有新版本的容器镜像时,自动初始化 kubernetes 部署的滚动更新

当有新版本的容器镜像时,自动初始化 kubernetes 部署的滚动更新

我有一个如下所示的 kubernetes 部署:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: datacollector
spec:
  replicas: 1
  selector:
    matchLabels:
      pod-type: datacollector
  template:
    metadata:
      labels:
        pod-type: datacollector
    spec:
      imagePullSecrets:
      - name: secret
      containers:
        - name: datacollector
          image: "build.dorangg.dev/doranggdatacollector:latest"
          imagePullPolicy: Always

目前,每当我想要更新部署以使用来自 docker 注册表(build.dorangg.dev)的最新版本的映像时,我都会运行以下命令:

kubectl rollout restart deployment/datacollector

每当镜像的新版本出现在docker注册表中时,我想自动启动部署的滚动更新(上述命令的作用)。

可以使用 kubernetes 配置来实现吗?如果不行,是否可以使用脚本实现此自动化?

答案1

可以使用 kubernetes 配置来实现吗?

我不知道。

如果没有,是否可以使用脚本实现这种自动化?

是的。你对图像执行操作docker pull。如果 docker 拉取新图像,则删除 POD,kubectl然后重新部署。

答案2

说实话,我认为它无法在 Kubernetes 内部配置。它需要额外的脚本/触发器。

我想到了一些选项,但是您需要使用脚本“捕获”新图像(例如成功推送到存储库后的新图像的名称)。

- 补丁部署

$ kubectl patch deployment [your-deployment] -p \
'{"spec":{"template":{"spec":{"image":"[new-image-name:tag]"}}}}'

如果 Kubernetes 发现一些变化,它应该重新部署整个部署。

- 创建脚本并设置新图像

$ kubectl set image deployment/[deployment-name] [image-name]=[new-image-name:tag]

经过此更改后,kubernetes 也应该重新部署所有 pod。

- 使用 HELM

作为使用图表和模板的 helm,您可以创建脚本来更改图像名称values.yaml并重新部署它。

- 补丁宽限期

如果你想一直保持相同的镜像名称,你可以尝试 patch GracePeriod。它被描述为这里

希望它会有所帮助。

答案3

更好的方法是使用kubectl set image来告诉部署有新镜像,但如果您使用,它将不起作用,:latest因为如果标签没有更改,部署将不会触发。:latest无论如何,使用 不是一个好主意,因此您必须转向对容器的标签进行半版本控制。

相关内容