前言
Helm V3
与 V2
版本架构变化较大,数据迁移也比较麻烦,官方为了解决数据迁移问题,提供一个 helm-2to3
工具,本文基于 helm-2to3
工具来迁移 V2
版本中的数据。
Helm V3
与 V2
变化,请参考 Helm v3 新的功能
注意:Helm
V2
升级V3
版本,Kubernetes 集群中 Deployment、Service、Pod等都不会重新创建,所以迁移过程是不会影响线上在跑的服务。
安装 Helm V3 命令
下载 helm 最新 v3.2.3 版本
1 | $ wget https://get.helm.sh/helm-v3.2.3-linux-amd64.tar.gz -O /tmp/helm-v3.2.3-linux-amd64.tar.gz |
解压并移动到 /usr/local/bin/
目录下
1 | # 解压 |
安装 2to3 插件
一键安装
1 | $ helm3 plugin install https://github.com/helm/helm-2to3 |
检查 2to3 插件是否安装成功
1 | $ helm3 plugin list |
迁移 Helm V2 配置
下面操作主要迁移:
- Helm 插件
- Chart 仓库
- Chart starters
1 | $ helm3 2to3 move config |
检查 repo
和 plugin
1 | # 检查 repo |
迁移 Heml V2 Release
查看 2to3 插件中 convert
子命令选项
1 | $ helm3 2to3 convert --help |
--dry-run
:模拟迁移但不做真实迁移操作,建议每次迁移都先带上这个参数测试下效果,没问题的话再去掉这个参数做真实迁移--tiller-ns
:通常tiller
部署在k8s集群中,但不在kube-system
命名空间才指定--tiller-out-cluster
:如果你的 Helm V2 是 tiller 在集群外面 (tillerless) 的安装方式,请带上这个参数
迁移 helm v2 数据
查看 helm v2 的 release
1 | $ helm ls |
使用 --dry-run
预演效果
1 | $ helm3 2to3 convert redis --dry-run |
没有报错,去掉 --dry-run
开始迁移
1 | $ helm3 2to3 convert redis |
检查迁移结果
1 | # 查看 helm v2 release |
helm v3 release 区分命名空间,需要带上
-A
参数,显示所有命名空间
更新 helm charts
通过 lint
检查 chart 语法
helm v2 chart
声明:
1 | {{- if .Values.route.tls }} |
在 helm v2 版本中,lint
是没有问题的,但是使用 helm v3 版本 lint
报:mapping values are not allowed in this context
错误
上面 chart 需要调整,下面给出 helm v3
正确 chart 模板
1 | {{- if .Values.route.tls }} |
Chart v3 变动
- 需要把
requirements.yaml
文件配置合并到Chart.yaml
配置中 - 需要把
Chart.yaml
配置中apiVersion:
v1 修改成 v2
清理 Helm V2 Release
使用 --dry-run
参数,helm v2 清理预演,不会清理 Release 数据
1 | $ helm3 2to3 cleanup --dry-run |
如果上面命令执行完没有问题,这次清理 V2 Release 数据
1 | $ helm3 2to3 cleanup |
执行完后,Tiller
Pod 会被删除,并且 kube-system
命名空间中 configmaps
历史版本信息也会被清理。
参考链接
---本文结束感谢您的阅读。微信扫描二维码,关注我的公众号---
本文链接: https://www.yp14.cn/2020/06/16/生产环境中helm-v2升级v3版本遇到的疑难杂症/
版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!