初試 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 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 3

這是 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 3

在 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 鏡像倉庫中

初試 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 的選擇是非常正確的,這讓集群權限的管理更加簡單清晰。


分享到:


相關文章: