从18年初开始使用helm,也看到过helm3版本的一些规划路线图,对里面的一些功能比较期待。就在昨天helm项目发布了helm3-alpha.1版本,现在迫不及待想要试试新功能,哈哈…

新功能总览

其它是一些终端命令的重命名:

移除Tiller

这个改动应该是最大的吧,直接去除了一个服务端组件,从此只有helm这个客户端来和kubernetes集群进行交互操作。 所以从之前的交互流程: helm client –gRPC–> helm server (Tiller) –> kubernetes api (install chart)

变成: helm client –gRPC–> kubernetes api(install chart)

因为helm 是使用了kubeconfig来与 kubernetes集群通信,所以如 helm 3的changelog中说的,管理员可以进行更细粒度的权限控制。 还有release 也会在集群中进行记录。只不过是随着release chart在同一Namespace中。

Release name 范围缩小至Namespace

在helm2,release name 是全局的,意味着即使安装某个chart到不同的Namespace,release name名字也不能一样。这个缺陷应该困扰了很多helm用户。

在helm3之前,Chart Release 记录都和Tiller服务一起,在一个Namespace中。现在由于移除了Tiller组件,每个chart的Release记录与它部署到哪个namespace一样,存在同一个Namespace中。这样就可以在不同Namespace中使用同一个Release name。

NOTES: 在Helm 2 之前,Release 信息以ConfigMap存储在tiller 部署的Namespace中。Helm 3是以Secret资源来存储Release信息的。

动手做一做

安装helm3

sudo wget https://get.helm.sh/helm-v3.0.0-alpha.1-linux-amd64.tar.gz && tar -xvf helm-v3.0.0-alpha.1-linux-amd64.tar.gz
sudo cp linux-amd64/helm /usr/local/bin/

初始化helm

helm init

不指定Release name安装一个chart

$ helm install stable/nginx
Error: must either provide a name or specify --generate-name

So,下面是正确方式:

helm install stable/traefik --generate-name

在不同Namespace中使用同一个Release name 安装chart

helm install traefik-test -n default stable/traefik

使用kubectl切换到默认namespace为目标部署namespace中,这里官方文档暂时没有更新。

格式:kubectl config set-context CONTENT_NAME --namespace NAMESPACE,如:

kubectl config set-context gke_hi42-top_us-east1-b_my-test --namespace qa

如果不自行使用kubectl切换,那么会报以下错误提示:

Error: cannot re-use a name that is still in use

上面的错误提示不太明显,应该在加上一条:“请手动使用kubectl切换到目标Namespace”。

不过还是觉得在使用 -n NAMESPACE之后,应该由helm 内部来实现切换context,而不是让用户来执行kubectl config。

使用 traefik-test 作为Release name继续安装Chart到qa namespace中:

helm install traefik-test -n qa stable/traefik

查看已安装的chart

现在我们可以列出所有安装的chart release:

helm list --all-namespaces
NAME                    NAMESPACE       REVISION        UPDATED                                 STATUS          CHART
traefik-test            default         1               2019-05-16 19:20:07.537745555 +0800 +08 deployed        traefik-1.68.2
traefik-test            qa              1               2019-05-16 19:47:31.145192715 +0800 +08 deployed        traefik-1.68.2
traefik-1558005396      default         1               2019-05-16 19:16:40.235417243 +0800 +08 deployed        traefik-1.68.2

从上面的输出可以看到,NAMESPACE那一列也由最后一列提到了第二列。方便观测。

NOTES: --all 选项只会列出当前kube context文件中定义namesapce中部署的release

小总结

helm 3 的一些功能可谓是从很早之前就开始计划,现在终于来了。解决了很多使用上的不便。虽然现在依然有些不完善之处,考虑到HELM 在CNCF还是孵化状态,希望后面能越来越好,也期待早日”毕业”。

参考:helm v3 docs