如何在 Kubernetes 部署上动态更新版本

How to Dynamically Update Version on Kubernetes Deployment

我想根据底层 docker 映像的版本动态更新 kubernetes 部署标签上的版本。例如,在这个例子中:

...

  labels:
    app: appName
    version: 1.0.0 <----- what I want to get updated
spec:
  containers:
    - image: dockerRepository/imageName:latest
      imagePullPolicy: Always
      name: appName
...

我想用 docker 图像的版本更新版本标签。不是“最新”,而是最新指向的基础版本。

这可以动态完成还是必须手动完成?

通常这是您告诉 Kubernetes 的事情,而不是询问它。 Docker“最新”标签在 Kubernetes 中很难可靠地使用:在 Deployment 的上下文中,您可以轻松地拥有不同的副本 运行 不同的“最新”版本,并且您必须执行一些手动步骤来导致 Deployment 将自身更新为更新的“最新版本”。

如果您使用像 Helm 这样的模板工具,并且每个构建都有一个不同的图像标签,那么很容易为图像标签和标签使用相同的值(可在安装时配置) :

metadata:
  labels:
    version: {{ quote .Values.tag }}
spec:
  containers:
    - image: dockerRepository/imageTag:{{ .Values.tag }}
helm install ... --set-string tag=20201125 ...

您可以为此目的使用 Helm 图表。您需要为部署创建 custom 图表。 其中对于标签和图像,您可以使用以下值:

metadata:
  labels:
     version: {{ .Values.tag}}

图片如下:

spec:
  containers:
    - image: dockerRepository/imageTag:{{ .Values.tag }}

然后在 Values.yml 中,您需要提供如下值:

tag: <your value>

每次你需要用Image版本更新标签,你可以简单地更新values.yml和运行中的标签:

helm upgrade --set tag=<your value> <name of your deployment> ./<name of your chart>

您还可以使用 _helpers.tpl 进行复杂的操作。