2019-06-06
分類:後端
閱讀(2496) 評論(0)

經過了長時間的開發,Helm 3 終於釋出了第一個 alpha 版本。本文將簡單介紹 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 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 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 中重覆使用了。
在 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 2 中,可以簡單的透過 helm serve 來啟動一個本地簡單的 HTTP 服務,用於託管本地 local repo 中的 Chart 資訊。
不過這個功能在 Helm 3 中被移除了。可能是使用場景有限。
Helm 3 的改動還是比較大的,但是去除掉 Tiller 的選擇是非常正確的,這讓叢集許可權的管理更加簡單清晰。更多關於 Helm 3 的資訊請關註 ReleaseNote(https://github.com/helm/helm/releases/tag/v3.0.0-alpha.1)。
朋友會在“發現-看一看”看到你“在看”的內容