經過了長時間的開發,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 了。
(
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 名稱可在不同 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 的選擇是非常正確的,這讓集群權限的管理更加簡單清晰。
閱讀更多 軟件行業服務 的文章