歡迎光臨
每天分享高質量文章

初試 Helm 3

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

 

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 了。
  1. (MoeLove) ~ export HELM_HOME=/tmp/helm3
  2. (MoeLove) ~ helm3 init
  3. Creating /tmp/helm3/repository
  4. Creating /tmp/helm3/repository/cache
  5. Creating /tmp/helm3/plugins
  6. Creating /tmp/helm3/starters
  7. Creating /tmp/helm3/cache/archive
  8. Creating /tmp/helm3/repository/repositories.yaml
  9. Adding stable repo with URL: https://kubernetes-charts.storage.googleapis.com
  10. $HELM_HOME has been configured at /tmp/helm3.
  11. Happy Helming!

 

原先,由於有 RBAC 的存在,我們在開始使用時,必須先創建一個 ServiceAccount 而現在 Helm 的權限與當前的 Kubeconfig 中配置用戶的權限相同,非常容易進行控制。
這樣也大大增強了使用 Helm 的安全性。
Release 名稱可在不同 ns 間重用

 

這是 Helm Release 中提到的功能。 但此功能目前並不直接可用 相關 issue 也已經創建。
  1. (MoeLove) ~ helm3 list
  2. NAME NAMESPACE REVISION UPDATED STATUS CHART
  3. redis1 default 1 2019-05-17 00:21:06.686127031 +0800 CST deployed redis-7.1.0
  4. redis default 1 2019-05-17 00:19:28.234013017 +0800 CST deployed redis-7.1.0
  5. (MoeLove) ~ helm3 -n moelove install redis1 stable/redis
  6. Error: cannot re-use a name that is still in use}}}
  7. 根源在於 Namespace 引數的獲取實現上。
  8. 對應代碼為:
  9. {{{func getNamespace() string {
  10. if ns, _, err := kubeConfig().ToRawKubeConfigLoader().Namespace(); err == nil {
  11. return ns
  12. }
  13. return "default" }

 

直接使用 Kubeconfig 中的 Namespace 了,所以,我們可以做以下操作以使用此特性。
  1. (MoeLove) ~ kubectl config current-context
  2. kubernetes-[email protected]
  3. (MoeLove) ~ kubectl config set-context kubernetes-[email protected] --namespace moelove
  4. Context "[email protected]" modified.
  5. (MoeLove) ~ helm3 -n moelove install redis stable/redis
  6. ...# 省略輸出
  7. (MoeLove) ~ helm3 list
  8. NAME NAMESPACE REVISION UPDATED STATUS CHART
  9. 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 的引數。比如:
  1. (MoeLove) ~ helm3 install stable/redis
  2. Error: must either provide a name or specify --generate-name
  3. (MoeLove) ~ helm3 install stable/redis --generate-name
  4. ...# 省略輸出
  5. (MoeLove) ~ helm3 list
  6. NAME NAMESPACE REVISION UPDATED STATUS CHART
  7. redis1 default 1 2019-05-17 00:21:06.686127031 +0800 CST deployed redis-7.1.0
  8. redis-1558024567 default 1 2019-05-17 00:36:09.294632336 +0800 CST deployed redis-7.1.0
  9. 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(https://github.com/helm/helm/releases/tag/v3.0.0-alpha.1)。
赞(0)

分享創造快樂