Helm 是甚麼? 如何用?

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?
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

--

--

Senior software engineer ! Linkedin: https://www.linkedin.com/in/benjaminliu0131/ Github : https://github.com/totoroliu0131?tab=repositories

Love podcasts or audiobooks? Learn on the go with our new app.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store