如何在不与其他工具冲突的情况下将helm与其他工具结合使用进行k8s配置管理

61次阅读
没有评论

问题描述

目前有一个k8s项目,其中有多个服务由helm chart进行管理。helm chart安装在用户的本地机器上,并希望保持这种方式。但现在用户需要提供一种简单易用的方式,让其他人可以更改某些服务的docker镜像版本。用户考虑创建一个jenkins任务,允许更改这些服务的”image”字段,但这将与helm发布产生冲突:下次使用helm更新时,它会将jenkins的”image”字段更改回helm chart中的值。

用户想知道是否有一种简单的方法来解决这个冲突,比如告诉helm不要更改”image”字段?如果没有,用户如何继续使用helm进行项目配置,同时允许jenkins更改”image”字段?

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

Helm并不是用来这样使用的。如果您希望使用静态部署,最好使用纯Kubernetes清单。这样,更改image字段的人不会破坏您的发布。

您可以通过运行helm get manifest命令将其轻松转换为静态部署。

Helm用于管理发布版本。也就是说,每次有新的发布(docker镜像更改肯定符合此条件),您都需要对helm chart进行更改。

您还有另一种选择,即将docker镜像定义为一个值。然后,您可以传递一个命令行参数来替换新的镜像标签,并在每次有新的部署时从Jenkins重新运行helm。

示例:

在values.yaml中:

image:
  repo: foo
  tag: bar

在运行helm时的命令行:

helm upgrade --install my-app --set image.tag=newtag

最后,也是最不推荐的方法是使用可变的标签(例如”master”),并将您的ImagePullPolicy设置为Always。这样,当您有一个部署时,您只需要重启部署/守护进程集/有状态集对象中的所有pod。

方案2

评论:我想我会将我的helm发布移到另一台可以从jenkins访问的主机上,并使用您提供的命令行参数的解决方案。

用户可以将helm发布移到另一台可以从jenkins访问的主机上,并使用命令行参数的解决方案。这样,jenkins就可以更改”image”字段,而不会与helm发布产生冲突。

以上是解决这个冲突的两种方案,用户可以根据自己的需求选择适合的方法。

正文完