写点什么

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

  • 2020-05-25
  • 本文字数:2544 字

    阅读完需:约 8 分钟

一文教你一次性完成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 versionClient: &version.Version{SemVer:"v2.16.0", GitCommit:"e13bc94621d4ef666270cfbe734aaabf342a49bb", GitTreeState:"clean"}Server: &version.Version{SemVer:"v2.14.3", GitCommit:"0e7f3b6637f7af8fcfddb3d2941fcc7cbebb0085", GitTreeState:"clean"}➜ helm3 versionversion.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 TLSRELEASES=$(helm list --tls -aq)# Loop through releases and, for each one, test conversionwhile IFS= read -r release; do  helm3 2to3 convert $release --dry-rundone <<< "$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 devNAMESPACE                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.v1secret "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 TLSRELEASES=$(helm list --tls -aq)# Loop through releases and, for each one, test conversionwhile IFS= read -r release; do  helm3 2to3 convert $release --tiller-out-clusterdone <<< "$RELEASES"
复制代码


原文链接:

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


2020-05-25 16:401103

评论

发布
暂无评论
发现更多内容

JavaScript slice 方法使用指南

Liam

JavaScript 程序员 前端 前端开发 slice

跨境自建站卖家如何提高谷歌广告质量得分?

九凌网络

从混乱到优雅:基于DDD的六边形架构的代码翻新指南

不在线第一只蜗牛

架构 DDD 框架设计

做独立站需要用到的十大软件

九凌网络

inBuilder低代码平台新特性推荐-第七期

inBuilder低代码平台

低代码

英伟达中国特供芯片是缩水版;华为 Mate60 Pro 国产零件价值占比 47%丨 RTE 开发者日报 Vol.84

声网

光纤网络排障分析

小魏写代码

Hybrid App开发的流程及业务价值

Onegun

html5 混合开发 Hybrid App

桌面便签软件哪个好?10款全球好评的便签软件助你提升效率!

彭宏豪95

效率 在线白板 备忘录 笔记应用 笔记软件

深入理解Docker:一种革新的容器技术

不在线第一只蜗牛

Docker 容器化 容器化部署

如何item_get-获得淘宝商品详情api接口

技术冰糖葫芦

API 接口

轻量级数据中台,大中型企业数字化转型首选

谷云科技RestCloud

数据中台

低代码平台是什么?具备哪些特性?

树上有只程序猿

低代码

石原子科技亮相2023成都市信息领域新产品发布会

StoneDB

MySQL 数据库 HTAP StoneDB

利用生成式AI的产研流程:创新与效率的完美结合

之家技术

测试 用例 效能 生成式AI 释产能

浅谈研发数字化在汽车之家的落地实践

之家技术

产品 数字化 研发 效能 释产能

新一代信息技术成为数字化转型满意度评价新要素

极客天地

选购美国云服务器,轻松打造高效网络

一只扑棱蛾子

美国服务器 美国云服务器

技术贴 | SQL 执行 - 执行器优化

KaiwuDB

能够导出源代码的低代码平台有哪些?

互联网工科生

低代码 源代码

X2RTC安装教程详解(图文版)

X2Rtc

开源 音视频 RTC 教程分享

Redis分布式锁问题分析与处理方案

郑在暴富中

redis redisson 分布式锁

一文教你一次性完成Helm 3迁移_文化 & 方法_Rancher_InfoQ精选文章