通過了長時間的開發, 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】