Helm 是甚麼? 如何用?

Po-Ching Liu
Feb 17, 2022

--

前言 : 此篇文章僅記錄筆者在軟體工程相關知識學習上的紀錄,若有任何錯誤還請見諒並且留言告訴我,非常感謝你/妳的閱讀以及幫助。

Helm

Helm 是甚麼?
有使用過 kubernetes 的開發者多少會知道,在部屬一個後端服務時不外乎會定義 deployment, ingress, service 等種類的yaml檔,在部屬SQL服務則可能會定義statefulset, config, secretconfig, volumn等種類在yaml檔。在筆者的公司內這樣子的服務不會僅止於一份,甚至一個後端服務可能就會配上一個redis cluster。若有10個後端服務在專案中可能就會有10*3份(deployment, ingress, service)的yaml檔案,在筆者的經驗中這三份檔案內很大機率會是 name, image, host中的值會不相同,因此下意識地認為若可以將這三份檔案抽成template在部屬時塞入差異值並做版本的控制,這樣就可以減少維護的成本,而helm就是以這樣的概念幫我們管理k8s內的服務。

Helm helps you manage Kubernetes applications — Helm Charts help you define, install, and upgrade even the most complex Kubernetes application.
https://helm.sh/

如何使用Helm?
1.
安裝好helm後,打開command line 並執行 。

helm create {yourChartName}

2. 執行後可以看到default的template以及語法,並使用IDE打開。

3. 可以刪除你不需要的檔案與資料夾,筆者在這只會留下 ingress, service, deployment,並會以deployment為範例template講解。

由上圖可知在templates folder內的deployment.yaml檔案內有類似變數的寫法如下圖。

{{.Values.deployment.name}}
{{default "1" .Values.deployment.replicas }}

此變數將會對應到 values.yaml檔案中的 deployment:name 的值,在此例中為applicationName。
備註: default:1 意味著當values.yaml檔案中沒有給此值時則會給予1為default。

4. 當寫好template以及要部屬的 values時即可將此服務部屬至k8s。如附圖,持續使用helm語法。

helm install {name} {chartName} --set deployment.image={imageRepo}

備註: install時也可以使用--set將參數傳入,此處傳入image為例子。

藉由上圖 install 的語法就可以將deployment, ingress, service 做成template管理。helm 還可以給予版本並搭配rollback、upgrade等語法更新k8s服務。

Reference
Helm 官網 : https://helm.sh/
Helm 安裝 : https://helm.sh/docs/intro/install
Sample : https://github.com/totoroliu0131/kubernetes-practice/tree/main/helm/myChart

--

--

No responses yet