写点什么

一文教你一次性完成 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:401116

评论

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

Elasticsearch数据库优化实战:让你的ES飞起来

华为云开发者联盟

数据库 大数据 elasticsearch 日志 ES

面试官:啥是请求重放呀?

why技术

Java

如何自学 Java ?不报班只白嫖行不行?

Java架构师迁哥

Python 加密解密信息 - DAY9

Qien Z.

Python 加密解密 5月日更

🕋【Redis干货领域】从底层彻底吃透AOF重写(原理篇)

码界西柚

redis持久化 aof Redis 核心技术与实战 5月日更

前端领域的数据状态统一管理机制

鲸品堂

大前端 数据 流程图 state

百度 Serverless 函数计算引擎 EasyFaaS 正式开源

百度开发者中心

百度 开源

去年创建的个人网站,我又给它加多了一些新功能。

彭宏豪95

写作 网站 博客 5月日更

Springboot结合Netty实战聊天系统

Damon

音视频

打破思维定式(十二)

Changing Lin

鸿蒙轻内核M核源码分析:数据结构之任务就绪队列

华为云开发者联盟

鸿蒙 数据结构 数组 双向循环链表 任务就绪队列

数字化转型助推,200亿元数据治理市场空间充满想象

DT极客

话题讨论|做程序员五年后是什么样子?

饭饭

程序员 职业规划 发展现状 内卷 IT行业

Rust从0到1-集合-Hash Map

rust hashmap 集合 Collections hash map

奇亚chia算力挖矿系统开发搭建

薇電13242772558

区块链 算力

在 Mac 上玩网游的简单方式

懒得勤快

Sentinel在docker中获取CPU利用率的一个BUG

捉虫大师

Java Docker sentinel

实践解析 | 如何用 OpenGL 实现跨平台应用高效渲染

拍乐云Pano

Android开发

快时代的知识形态

Ryan Zheng

话题讨论|程序员在520最想收到什么礼物?

饭饭

程序员 恋爱 520 单身

华为发布HarmonyOS Connect品牌升级计划 帮伙伴做好产品、卖好产品、运营好产品

科技汇

云时代的数据之约

BinTools图尔兹

数据库 云计算 运维 云服务 dba

iOS 面试策略之系统框架-网络、推送与数据处理

iOSer

ios

手撕友商7nm FPGA?英特尔“亲儿子”上阵

E科讯

详解支撑7亿用户搜索的百度图片处理收录中台

百度Geek说

中台 搜索 图片处理

模块四作业

Chris Cheng

架构实战营

为什么TCP 建连接要3次,断连接却要4次呢?

架构精进之路

TCP 网络层 5月日更

Apache Flink在 bilibili 的多元化探索与实践

Apache Flink

大数据 flink 流计算 实时计算

2021年5月墨天轮国产数据库排行榜:十强榜单固若金汤

墨天轮

数据库 腾讯云 阿里云 国产化 dba

ShardingSphere 源码

云淡风轻

ShardingSphere

牛!马士兵亲自教授坦克大战+精通23种设计模式,视频+笔记+源码

Java架构追梦

Java 架构 面试 23种设计模式 坦克大战

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