51

初试 Helm 3

 5 years ago
source link: https://www.tuicool.com/articles/QnuAniQ
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

【编者的话】经过了长时间的开发,Helm 3 终于发布了第一个 alpha 版本。本文将简单介绍 Helm 3 新特性。

移除 Tiller

Helm 2 是 C/S 架构,主要分为客户端 helm 和服务端 Tiller; 与之前版本相同,Helm 3 同样在 Release 页面提供了预编译好的二进制文件。差别在于原先的二进制包下载下来你会看到 helm 和 tiller 。而 Helm 3 则只有 Helm 的存在了。

Tiller 主要用于在 Kubernetes 集群中管理各种应用发布的版本,在 Helm 3 中移除了 Tiller, 版本相关的数据直接存储在了 Kubernetes 中。

现在我们直接在一个新创建的集群上来使用 Helm。测试集群的创建可以参考我之前的文章 使用 Kind 搭建你的本地 Kubernetes 集群。

与之前版本相同,我们需要先执行 helm init 来进行初始化。但现在的初始化就简单了很多,不再需要给集群中部署 Tiller 了。

(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 技术专家交流,可以加我微信liyingjiese,备注『加群』。群里每周都有全球各大公司的最佳实践以及行业最新动态。

Release 名称可在不同 ns 间重用

这是 Helm Release 中提到的功能。 但此功能目前并不直接可用 相关 issue 也已经创建。

(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 参数的获取实现上。

对应代码为:

func getNamespace() string {

 if ns, _, err := kubeConfig().ToRawKubeConfigLoader().Namespace(); err == nil {

     return ns

 }

 return "default" } 

直接使用 Kubeconfig 中的 Namespace 了,所以,我们可以做以下操作以使用此特性。

(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 中重复使用了。

必须指定 Release 名称

在 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

支持将 Chart 推送至 Docker 镜像仓库中

简而言之就是使用镜像仓库同时存储 Docker 镜像和 Helm 3 Chart 不过这个功能我暂时还没验证。之后有空再验证。

移除掉了 helm serve

在 Helm 2 中,可以简单的通过 helm serve 来启动一个本地简单的 HTTP 服务,用于托管本地 local repo 中的 Chart 信息。

不过这个功能在 Helm 3 中被移除了。可能是使用场景有限。

总结

Helm 3 的改动还是比较大的,但是去除掉 Tiller 的选择是非常正确的,这让集群权限的管理更加简单清晰。更多关于 Helm 3 的信息请关注 ReleaseNote

原文链接: 初试 Helm 3 (作者:张晋涛)


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK