千家信息网

# IT明星不是梦 # 一文教你一次性完成Helm 3迁移

发表于:2025-12-01 作者:千家信息网编辑
千家信息网最后更新 2025年12月01日,2019年,Kubernetes软件包管理器--Helm发布了最新版本Helm 3,并且该版本已经stable。Helm 3中的一些关键特性我们在之前的文章中已经介绍过,其中一些功能吸引了许多开发人员
千家信息网最后更新 2025年12月01日# IT明星不是梦 # 一文教你一次性完成Helm 3迁移

2019年,Kubernetes软件包管理器--Helm发布了最新版本Helm 3,并且该版本已经stable。Helm 3中的一些关键特性我们在之前的文章中已经介绍过,其中一些功能吸引了许多开发人员。那么,现在你大概想知道升级/迁移到新版本的Helm是否麻烦。尽管Helm可能十分复杂,但是请不要担心,升级过程极为简单。Helm官方blog提供了有关迁移过程的指南,十分详细,欢迎查阅:

https://helm.sh/blog/migrate-from-helm-v2-to-helm-v3/

这篇官方指南十分直观地告诉你将版本分别迁移到Helm 3所需准备的一切。但是如果你想要一次性完成迁移应该怎么办呢?你如何确保在删除Tiller之前没有任何组件在使用它


下载Helm 3二进制文件

我们测试Helm 2以及最新版本,因此在Helm 2完全卸载之前,我们应该准备好两个版本的二进制文件。下载最新Stable版本的二进制文件并将其添加到你的PATH中。将现有的v2二进制文件重命名为helm2以及将最新版本重命名为helm3。我将两个版本都保存在/usr/local/bin中,以便我能够随时切换它们:

➜ helm2 version  Client: &version.Version{SemVer:"v2.16.0", GitCommit:"e13bc94621d4ef666270cfbe734aaabf342a49bb", GitTreeState:"clean"}  Server: &version.Version{SemVer:"v2.14.3", GitCommit:"0e7f3b6637f7af8fcfddb3d2941fcc7cbebb0085", GitTreeState:"clean"}➜ helm3 version  version.BuildInfo{Version:"v3.0.1", GitCommit:"7c22ef9ce89e0ebeb7125ba2ebf7d421f3e82ffa", GitTreeState:"clean", GoVersion:"go1.13.4"}

准备CI脚本和Chart

在你运行升级流程之前,你需要确认你的CI脚本以及自定义Chart是否与Helm 3兼容。我之前写过一篇文章(https://itnext.io/breaking-changes-in-helm-3-and-how-to-fix-them-39fea23e06ff ),文章中涵盖了一些需要注意的事情,其中的大部分都能够轻松解决。尽管OpenAPI验证机制很有趣,但它很有可能让你措手不及:

➜ helm install prometheus .  Error: unable to build kubernetes objects from release manifest: error validating "": error validating data: ValidationError(Deployment.spec.template.spec.containers\[0\].volumeMounts\[0\]): unknown field "defaultMode" in io.k8s.api.core.v1.VolumeMount


一旦你解决了所有这些麻烦的问题,那么就可以开始迁移到Helm 3啦!

迁移Helm配置

我在文章开头提到的Helm博客文章中有这一步骤的详细描述,它将会更新所有你的本地配置以便Helm 3可以使用它:

https://helm.sh/blog/migrate-from-helm-v2-to-helm-v3/#migrate-helm-v2-configuration

如果你在诸如Jenkins、TeamCity或TravisCI之类的CI系统中的构建代理运行Helm,那么可以这一步骤。如果你在本地机器或有持久文件系统的中央服务器中运行Helm,那么一定要在整个配置中进行迁移,尤其是当你拥有自己的Helm repo或使用自定义插件时。无论哪种方式,请确保你已经通读了这一部分,以确定是否与你有关。

迁移版本(保留Tiller)

现在,我们有几种方式可以实现迁移。你可以迁移特定版本到Helm 3来进行一些测试,具体操作在Helm官方博客中可以找到。你也可以选择迁移许多版本并将它们从Tiller中全部删除。就我个人而言,我发现一次性迁移所有版本到既定环境中更为简单,但需要将发布数据保留在Tiller中,直到确定在我们的环境中没有一处使用Helm 2为止。如此,就不会产生盲点,所有东西都使用相同版本的Helm:

# List Helm 2 Releases  # omit --tls flag if you're not using TLS  RELEASES=$(helm list --tls -aq)# Loop through releases and, for each one, test conversion  while IFS= read -r release; do    helm3 2to3 convert $release --dry-run  done <<< "$RELEASES"


你感到满意之后,可以删除--dry-run标志,并静观2to3插件发挥其作用。

请注意:正如我所提到的,这里有--delete-v2-releases标志,它将会迁移版本并从Tiller删除。如果你确定自己不再需要任何信息,你可以执行这一操作,风险自担。

移除Tiller之前……

这一步是我最不想略过的一步,以防万一我们需要回滚到Helm 2。此时,只要你的CI系统和团队成员都在使用Helm 3,就没有理由保留Tiller。但如果你想完全确保没有任何组件还将会使用旧版本,那我建议你还是将Tiller保留几个小时并观察helm ls的输出结果以查看UPDATEDcolumn中的时间戳是否完全改变。如果改变了,就意味着有人/有些组件没有使用Helm 3。

如果将版本迁移到Helm 3之后,由Helm 2对其进行了修改,你将必须删除保存了版本信息的Helm 3 Kubernetes secret,才能够将其从Helm 3中清除,而不会删除相关资源:

➜ kubectl get secret -n dev  NAMESPACE NAME TYPE DATA AGE dev sh.helm.release.v1.postgres.v1 helm.sh/release.v1 1 36d  ➜ kubectl delete secret -n dev sh.helm.release.v1.postgres.v1  secret "secret "sh.helm.release.v1.postgres.v1" deleted


现在如果我们使用Helm 3列出在dev命名空间中的版本,我们将会看到那些版本已经不复存在:

NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION


在我们弄清楚谁依旧在使用Helm 2之后,我们就可以再次执行迁移流程。解决此问题后,请使用helm3 2to3 convert进行迁移。

一旦你完全确定你可以移除Tiller及其相关的RBAC角色和数据,那么就可以运行 helm 2to3 cleanup

迁移版本--没有Tiller的Helm

直接添加--tiller-out-cluster标志到我在之前提供的脚本中,然后2to3插件将从你的本地Tiller实例中移除版本信息。

# List Helm 2 Releases  # omit --tls flag if you're not using TLS  RELEASES=$(helm list --tls -aq)# Loop through releases and, for each one, test conversion  while IFS= read -r release; do    helm3 2to3 convert $release --tiller-out-cluster  done <<< "$RELEASES"
版本 文件 二进制 文章 运行 信息 官方 插件 标志 系统 组件 脚本 准备 升级 配置 一次性 两个 博客 指南 数据 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 如何打开国际服的服务器 黄浦图腾网络服务器机柜价格 登封租房软件开发 网络安全和前端哪个需求大 中科电集团网络安全 苹果推信软件开发哪里做 龙华php软件开发培训 数据库的数据存在哪里 为什么软件开发需要需求 u9数据库安装包 2021黑客文化与网络安全期末考试 关于网络安全的英语通知 linux 隐藏行数据库 时分秒存数据库丢失 企业网络安全需要什么软件和设备 硅谷里软件开发管理的工具 北京萝卜互联网科技 陕西三通网络技术有限公司 数据库工作引擎失败 火车头数据库发布教程 厦门嵌入式软件开发工程师前景 关于开展全市网络安全检查 uefibios嵌入式软件开发 现如今缺网络技术 贵阳支付宝服务器 知名网络技术培训前10名 网络安全隐患排查整治服务项目 服务器密码被黑如何用程序修改 怎么做河南软件开发 江苏海航软件开发价目表
0