初試 Helm 3

初試 Helm 3

經過了長時間的開發,Helm 3 終於釋出了第一個 alpha 版本。本文將簡單介紹 Helm 3 新特性。

移除 Tiller

初試 Helm 3

Helm 2 是 C/S 架構,主要分為客戶端 helm 和服務端 Tiller; 與之前版本相同,Helm 3 同樣在 Release(https://github。com/helm/helm/releases)頁面提供了預編譯好的二進位制檔案。差別在於原先的二進位制包下載下來你會看到 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 initCreating /tmp/helm3/repositoryCreating /tmp/helm3/repository/cacheCreating /tmp/helm3/pluginsCreating /tmp/helm3/startersCreating /tmp/helm3/cache/archiveCreating /tmp/helm3/repository/repositories。yamlAdding 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 的安全性。

Release 名稱可在不同 ns 間重用

初試 Helm 3

這是 Helm Release 中提到的功能。 但此功能目前並不直接可用 相關 issue 也已經建立。

(MoeLove) ➜ ~ helm3 listNAME NAMESPACE REVISION UPDATED STATUS CHARTredis1 default 1 2019-05-17 00:21:06。686127031 +0800 CST deployed redis-7。1。0redis default 1 2019-05-17 00:19:28。234013017 +0800 CST deployed redis-7。1。0(MoeLove) ➜ ~ helm3 -n moelove install redis1 stable/redisError: 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-contextkubernetes-admin@moelove(MoeLove) ➜ ~ kubectl config set-context kubernetes-admin@moelove ——namespace moeloveContext “kubernetes-admin@moelove” modified。(MoeLove) ➜ ~ helm3 -n moelove install redis stable/redis。。。# 省略輸出(MoeLove) ➜ ~ helm3 listNAME NAMESPACE REVISION UPDATED STATUS CHARTredis moelove 1 2019-05-17 00:26:44。572578745 +0800 CST deployed redis-7。1。0

可以看到,Redis 這個 Release 名稱可以在 Moelove 這個 Namespace 中重複使用了。

必須指定 Release 名稱

初試 Helm 3

在 Helm 2 中,如果沒有指定 Release 的名稱,則會自動隨機生成一個名稱。但是在 Helm 3 中,則必須主動指定名稱,或者增加 ——generate-name 的引數。比如:

(MoeLove) ➜ ~ helm3 install stable/redisError: must either provide a name or specify ——generate-name(MoeLove) ➜ ~ helm3 install stable/redis ——generate-name。。。# 省略輸出(MoeLove) ➜ ~ helm3 listNAME NAMESPACE REVISION UPDATED STATUS CHARTredis1 default 1 2019-05-17 00:21:06。686127031 +0800 CST deployed redis-7。1。0redis-1558024567 default 1 2019-05-17 00:36:09。294632336 +0800 CST deployed redis-7。1。0redis default 1 2019-05-17 00:19:28。234013017 +0800 CST deployed redis-7。1。0

支援將 Chart 推送至 Docker 映象倉庫中

初試 Helm 3

簡而言之就是使用映象倉庫同時儲存 Docker 映象和 Helm 3 Chart 不過這個功能我暫時還沒驗證。之後有空再驗證。

移除掉了 helm serve

初試 Helm 3

在 Helm 2 中,可以簡單的透過 helm serve 來啟動一個本地簡單的 HTTP 服務,用於託管本地 local repo 中的 Chart 資訊。

不過這個功能在 Helm 3 中被移除了。可能是使用場景有限。

總結

初試 Helm 3

Helm 3 的改動還是比較大的,但是去除掉 Tiller 的選擇是非常正確的,這讓叢集許可權的管理更加簡單清晰。