一文教你一次性完成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"
一文教你一次性完成Helm 3迁移的更多相关文章
- [转帖]Helm V2 迁移到 V3 版本
Helm V2 迁移到 V3 版本 -- :: Mr-Liuqx 阅读数 63更多 分类专栏: kubernetes 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上 ...
- Redis实践系列丨Codis数据迁移原理与优化
Codis介绍 Codis 是一种Redis集群的实现方案,与Redis社区的Redis cluster类似,基于slot的分片机制构建一个更大的Redis节点集群,对于连接到codis的Redis客 ...
- Redis进阶实践之十三 Redis的Redis-trib.rb文件详解
一.简介 事先说明一下,本篇文章不涉及对redis-trib.rb源代码的分析,只是从使用的角度来阐述一下,对第一次使用的人来说很重要.redis-trib.rb是redis官方推出的管理re ...
- Redis进阶实践之十三 Redis的Redis-trib.rb脚本文件使用详解
转载来源:http://www.cnblogs.com/PatrickLiu/p/8484784.html 一.简介 事先说明一下,本篇文章不涉及对redis-trib.rb源代码的分析,只是从使用的 ...
- redis cluster管理工具redis-trib.rb详解
redis cluster管理工具redis-trib.rb详解 来源 http://weizijun.cn/2016/01/08/redis%20cluster%E7%AE%A1%E7%90%86% ...
- Redis集群维护、运营的相关命令与工具介绍
Redis集群的搭建.维护.运营的相关命令与工具介绍 一.概述 此教程主要介绍redis集群的搭建(Linux),集群命令的使用,redis-trib.rb工具的使用,此工具是ruby语言写的,用于集 ...
- 手把手图文教你从Eclipse项目迁移Android Studio
转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼yuiop:http://blog.csdn.net/hejjunlin/article/details/52937391 从Android的 ...
- Vcenter一次性将服务器四个网卡从端口组迁移到分布式交换机的方法
如果你的服务器已经在清单列表里了,那么可以先从分布式交换机将这台服务器删除,然后再添加一次.这个时候的添加就可以选择四个网卡(包括端口组,包括管理端口组),一次性加入分布式交换机
- ASP.NET Aries 2.0 发布(原来的源码SVN已关闭,开源源码已迁移到GitHub)
主要更新: 1:增加子目录部署支持. 2:增加Taurus.MVC支持. 3:优化及Bug修复. 1:增加子目录部署支持: 其实在重写Aries框架的时候,我是去掉了目录部署功能的,主要是为了加快Ar ...
随机推荐
- 百度DMA+小度App的蓝牙语音解决方案技术难点解析
前记 你平时在商场看到的语音助手,看起来非常的简单,其实,这个小小语音助手的背后,是一个非常的复杂的技术支撑.从前端到后端的技术依次是:前端语音降噪技术,高效的音频编解码技术,蓝牙双模技术,DMA ...
- 【题解】BZOJ5093图的价值(二项式+NTT)
[题解]BZOJ5093图的价值(二项式+NTT) 今天才做这道题,是我太弱了 强烈吐槽c++这种垃圾语言tmd数组越界不re反倒去别的数组里搞事情我只想说QAQ 推了一张A4纸的式子 考虑每个点的度 ...
- .NET设计篇08-线程统一取消模型和跨线程访问UI
知识需要不断积累.总结和沉淀,思考和写作是成长的催化剂,输出倒逼输入 内容目录 一.线程统一取消模型1.取消令牌2.可以中断的线程1.设计一个中断函数2.创建CancellationTokenSour ...
- Q: 字符串的修改
题目描述 怎么样,前面的题还可以吧~ 依旧是字符串处理,设A和B是两个字符串.我们要用最少的字符操作次数,将字符串A转换为字符串B.这里所说的字符操作共有三种: 1. 删除一个字符: 2. 插入一个字 ...
- matlab数组相除
%数组的除法 clear all %清空MATLAB中的数据 a=[ ] b=[ ] c=a./b %a/b 对应位置相除 d=a.\b %b/a e=a./ %数组与常数相除 f=a/ 运行结果如下
- 剑指Offer-3~9题
3. 数组中重复的数字 题目描述: 在一个长度为 \(n\) 的数组里的所有数字都在 \(0\) 到 \(n-1\) 的范围内. 数组中某些数字是重复的,但不知道有几个数字是重复的,也不知道每个 ...
- 世界500强ING集团顺利的敏捷转型之路
案例背景 为什么银行要像灰狗一样快? 荷兰国际集团(ING),成立于1991年,主营业务银行与保险业务,在全球45个国家和地区拥有分支机构,总资产887亿欧元(2018),全球53,000多名员工,拥 ...
- 关于java php go 中AES加解密秘钥长度问题
今天心血来朝,想用go把php中的一个小功能重写一下,但在解密aes加密的数据时碰到了个坑! php的mcrypt拓展(貌似php7.1版本以上不支持了)提供了aes的加解密: 而且php aes 的 ...
- 固定表头的table
在前端的开发过程中,表格时经常使用的一种展现形式.在我的开发过程中,当数据过多时,最常用的一种方式就是分页,但是有些地方还是需要滚动.通常的table 会随着滚动,导致表头看不见.一下是我找到的一种固 ...
- Jquery电子签名制作_jSignature
今天用Jquery的jSignature库制作一个电子签名 后台.net core上传到指定文件夹 下载jquery库 提取码:rd9g html @{ Layout = null; } <!D ...