专栏首页CNCF一文教你一次性完成Helm 3迁移

一文教你一次性完成Helm 3迁移

以下文章来源于RancherLabs ,作者Jack Morris

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"

原文链接:

https://itnext.io/additional-tips-for-migrating-to-helm-3-304c9d50f1b4

本文分享自微信公众号 - CNCF(lf_cncf)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-02-04

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Helm 3预览:探索我们的未来 - 第2部

    这是Helm 3预览:探索我们的未来博客文章7部中的第2部。(查看我们之前关于Helm历史的第1部。)

    CNCF
  • Helm v2的弃用时间表

    https://www.jabberwocky.com/carroll/walrus.html

    CNCF
  • Helm项目旅程报告

    今天,我们非常高兴地为Helm发布下一个项目旅程报告。到目前为止,我们已经完成了包括Kubernetes、Prometheus、Envoy、containerd...

    CNCF
  • selenium之键盘事件实战

    实操UI自动化的同学们应该知道键盘事件实战也是系统功能模块UI自动化测试中的一部分,平时我们了解到的八大元素定位方法我们可以很方便的捕捉到页面的各种元素的标签,...

    测试小兵
  • 月入多少的java程序员才可以养得起成都小甜甜?

    8月28号抖音上一个#最好养活小姐姐#成都小甜甜火了,原因是在“成都最街坊”话题中,视频里小姐姐的回答温暖了千万网友。

    美的让人心动
  • 不仅仅是玩具,Python带你解读不一样的乐高

    【导语】:今天我们来聊聊小朋友和大朋友们都爱不释手的乐高,Python技术部分请看第四部分。公众号后台,回复关键字“乐高”获取完整数据。

    CDA数据分析师
  • 4级联动 地址组件 移动端

    mixin ==> 混入文件 控制后三列滑动 util ==> 工具文件, 克隆传递过来的数据 getAddress.js //获取数据文件 需要在父组件...

    yangdongnan
  • 获取MP3信息

      很多时候,我们有必要的到一些歌曲的信息,比如歌手的专辑,歌手名 歌曲名,下面就是java写的获取MP3歌曲信息 首先加入 jid3lib-0.5.4.jar...

    py3study
  • 面试题二十六期--腾讯大数据面试题及解析

    就算所有人都不支持你。这条路会很曲折,你也会一度认为是不是自己选错了,但只要坚持,就算最后没有成功,但努力了就不会有遗憾。

    测试小兵
  • 人工智能产品管理:CEO 的工作 25% 可以由机器完成

    【新智元导读】《哈佛商业评论》日前就自动化发表评论文章,称现在CEO们大约25%的工作时间都花在了可以让机器替代的活动上,例如分析报告和数据以做出决策。文章提出...

    新智元

扫码关注云+社区

领取腾讯云代金券