通过了长时间的开发, Helm 3 终于在今天发布了 第一个 alpha 版本。本文将简单介绍 Helm 3 新特性。
Helm 2 是 C/S 架构,主要分为客户端 helm
和服务端 Tiller
; 与以前版本相同,Helm 3 一样在 Release 页面提供了预编译好的二进制文件。差异在于原先的二进制包下载下来你会看到 helm
和 tiller
。而 Helm 3 则只有 helm
的存在了。git
Tiller
主要用于在 Kubernetes 集群中管理各类应用发布的版本,在 Helm 3 中移除了 Tiller
, 版本相关的数据直接存储在了 Kubernetes 中。github
如今咱们直接在一个新建立的集群上来使用 Helm。测试集群的建立能够参考我以前的文章 使用 Kind 搭建你的本地 Kubernetes 集群。redis
与以前版本相同,咱们须要先执行 helm init
来进行初始化。但如今的初始化就简单了不少,再也不须要给集群中部署 Tiller
了api
(MoeLove) ➜ ~ export HELM_HOME=/tmp/helm3 (MoeLove) ➜ ~ helm3 init Creating /tmp/helm3/repository Creating /tmp/helm3/repository/cache Creating /tmp/helm3/plugins Creating /tmp/helm3/starters Creating /tmp/helm3/cache/archive Creating /tmp/helm3/repository/repositories.yaml Adding stable repo with URL: https://kubernetes-charts.storage.googleapis.com $HELM_HOME has been configured at /tmp/helm3. Happy Helming!
原先,因为有 RBAC 的存在,咱们在开始使用时,必须先建立一个 ServiceAccount 而如今 Helm 的权限与当前的 KUBECONFIG
中配置用户的权限相同,很是容易进行控制。安全
这样也大大加强了使用 Helm 的安全性。架构
这是 Helm Release 中提到的功能。 但此功能目前并不直接可用 相关 issue 也已经建立。app
(MoeLove) ➜ ~ helm3 list NAME NAMESPACE REVISION UPDATED STATUS CHART redis1 default 1 2019-05-17 00:21:06.686127031 +0800 CST deployed redis-7.1.0 redis default 1 2019-05-17 00:19:28.234013017 +0800 CST deployed redis-7.1.0 (MoeLove) ➜ ~ helm3 -n moelove install redis1 stable/redis Error: cannot re-use a name that is still in use
根源在于 namespace
参数的获取实现上。ide
对应代码为:测试
func getNamespace() string { if ns, _, err := kubeConfig().ToRawKubeConfigLoader().Namespace(); err == nil { return ns } return "default" }
直接使用 Kubeconfig 中的 Namespace 了,因此,咱们能够作如下操做以使用此特性。google
(MoeLove) ➜ ~ kubectl config current-context kubernetes-admin@moelove (MoeLove) ➜ ~ kubectl config set-context kubernetes-admin@moelove --namespace moelove Context "kubernetes-admin@moelove" modified. (MoeLove) ➜ ~ helm3 -n moelove install redis stable/redis ...# 省略输出 (MoeLove) ➜ ~ helm3 list NAME NAMESPACE REVISION UPDATED STATUS CHART redis moelove 1 2019-05-17 00:26:44.572578745 +0800 CST deployed redis-7.1.0
能够看到,redis
这个 release 名称能够在 moelove
这个 Namespace 中重复使用了。
在 Helm 2 中,若是没有指定 release 的名称,则会自动随机生成一个名称。可是在 Helm 3 中,则必须主动指定名称,或者增长 --generate-name
的参数。好比:
(MoeLove) ➜ ~ helm3 install stable/redis Error: must either provide a name or specify --generate-name (MoeLove) ➜ ~ helm3 install stable/redis --generate-name ...# 省略输出 (MoeLove) ➜ ~ helm3 list NAME NAMESPACE REVISION UPDATED STATUS CHART redis1 default 1 2019-05-17 00:21:06.686127031 +0800 CST deployed redis-7.1.0 redis-1558024567 default 1 2019-05-17 00:36:09.294632336 +0800 CST deployed redis-7.1.0 redis default 1 2019-05-17 00:19:28.234013017 +0800 CST deployed redis-7.1.0
简而言之就是使用镜像仓库同时存储 Docker 镜像和 Helm 3 Chart 不过这个功能我暂时还没验证。以后有空再验证。
helm serve
在 Helm 2 中,能够简单的经过 helm serve
来启动一个本地简单的 HTTP 服务,用于托管本地 local repo 中的 Chart 信息。
不过这个功能在 Helm 3 中被移除了。多是使用场景有限。
Helm 3 的改动仍是比较大的,可是去除掉 Tiller
的选择是很是正确的,这让集群权限的管理更加简单清晰。更多关于 Helm 3 的信息请关注 ReleaseNote
能够经过下面二维码订阅个人文章公众号【MoeLove】