Helm3安装

helm3相比于helm2变化较大,去掉了tiller 组件,直接由可执行文件helm与kubernetes进行交互,引入了namespace的概念,对应k8s的namespace,支持分布式的chart仓库等,目前很多中间件集群的部署方案基于helm3,因此helm的版本急需升级到V3。

安装过程

  1. 下载helm v3.6.3软件包

    1
    2
    # amd64
    wget https://get.helm.sh/helm-v3.6.3-linux-amd64.tar.gz
  2. 解压(tar zxf helm-v3.6.3-linux-amd64.tar.gz

  3. 在解压目录中找到helm程序,移动到需要的目录中(mv linux-amd64/helm /usr/local/bin/helm3)

验证

1
2
3
helm3 version
# 输出
# version.BuildInfo{Version:"v3.6.3", GitCommit:"d506314abfb5d21419df8c7e7e68012379db2354", GitTreeState:"dirty", GoVersion:"go1.16.5"}

Helm2to3插件安装

在线安装2to3插件

1
2
3
4
5
helm3 plugin install https://github.com/helm/helm-2to3
# 输出
# Downloading and installing helm-2to3 v0.1.3 ...
# https://github.com/helm/helm-2to3/releases/download/v0.1.3/helm- 2to3_0.1.3_darwin_amd64.tar.gz
# Installed plugin: 2to3

离线安装2to3插件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# 获取helm3的环境变量
helm3 env
# HELM_BIN="helm3"
# HELM_CACHE_HOME="/root/.cache/helm"
# HELM_CONFIG_HOME="/root/.config/helm"
# HELM_DATA_HOME="/root/.local/share/helm"
# HELM_DEBUG="false"
# HELM_KUBEAPISERVER=""
# HELM_KUBEASGROUPS=""
# HELM_KUBEASUSER=""
# HELM_KUBECONTEXT=""
# HELM_KUBETOKEN=""
# HELM_MAX_HISTORY="10"
# HELM_NAMESPACE="default"
# HELM_PLUGINS="/root/.local/share/helm/plugins"
# HELM_REGISTRY_CONFIG="/root/.config/helm/registry.json"
# HELM_REPOSITORY_CACHE="/root/.cache/helm/repository"
# HELM_REPOSITORY_CONFIG="/root/.config/helm/repositories.yaml"

# 找到 HELM_PLUGINS 项,目录若不存在则创建
mkdir -p /root/.local/share/helm/plugins

# 下载 helm2to3 软件包
wget https://github.com/helm/helm-2to3/releases/download/v0.9.0/helm-2to3_0.9.0_linux_amd64.tar.gz

# 移动至 HELM_PLUGINS 目录,解压
mv helm-2to3_0.9.0_linux_amd64.tar.gz /root/.local/share/helm/plugins/
cd /root/.local/share/helm/plugins && mkdir helm2to3 && tar zxf helm-2to3_0.9.0_linux_amd64.tar.gz -C helm2to3/

# 创建bin目录,并复制 2to3 二进制执行文件到bin目录
cd helm2to3 && mkdir bin && mv 2to3 bin/

验证

1
2
3
4
helm3 plugin list
# 输出
# NAME VERSION DESCRIPTION
# 2to3 0.9.0 migrate and cleanup Helm v2 configuration and releases in-place to Helm v3

Helm2to3数据迁移过程

命令介绍

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
helm3 2to3 move config -h
# 迁移 Helm v2 配置到 Helm v3

Usage:
2to3 move config [flags]

Flags:
--dry-run # 模拟运行
-h, --help # 帮助
--skip-confirmation # 如果设置,则在执行移动之前跳过确认消息

---------------

helm3 2to3 convert -h
# 迁移 Helm v2 release 到 Helm v3

Usage:
2to3 convert [flags] RELEASE

Flags:
--delete-v2-releases # 迁移后删除 v2 版本的release。默认保留v2版本的release
--dry-run # 模拟命令
-h, --help # 帮助
--ignore-already-migrated # 忽略任何已迁移的发布版本并继续迁移
--kube-context string # 使用的kubeconfig上下文的名称
--kubeconfig string # kubeconfig文件的路径
-l, --label string # 根据标签选择tiller资源 (默认 "OWNER=TILLER")
-s, --release-storage string # v2发布存储类型/对象。
--release-versions-max int # 限制每个版本转换的最大版本数。使用0表示无限制(默认为10)
-t, --tiller-ns string # Tiller所在命名空间 (default "kube-system")
--tiller-out-cluster # 当tiller未运行在集群中,e.g. Tillerless

数据迁移

1. 配置迁移
1
2
3
4
5
6
7
8
9
10
# 包含 Chart starters、Repositories、Plugins
helm3 2to3 move config

# 验证,helm v2版本的
helm3 repo list
# NAME URL
# prometheus-community https://prometheus-community.github.io/helm-charts
# kube-state-metrics https://kubernetes.github.io/kube-state-metrics
# nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/
# bitnami https://charts.bitnami.com/bitnami
2. Releases迁移
1
2
3
4
5
helm3 2to3 convert [release name]

# 验证
helm3 list
# 迁移的release 从 v2复制到了 v3

Helm2数据清理(可选)

  • 卸掉Tiller(kubectl delete deploy tiller-deploy -n kube-system
  • 删掉helm2的主文件夹(rm -rf $HELM_HOME