Helm 是 Kubernetes 的套件管理工具,旨在簡化應用的部署、升級和管理過程。它透過 Chart 封裝應用程式,使得 Kubernetes 上的應用部署變得更加容易且可管理。
Chart:
Chart 是 Helm 的封裝格式,類似於 Linux 的套件管理器(如 apt 或 yum)。它包含 Kubernetes 應用程式的所有必要資源,如 Deployment、Service、ConfigMap 等的 YAML 檔案範本。Chart 允許用戶定義應用程式的設定選項,這些選項可以根據不同的環境進行自定義。
Values:
Values 檔案提供了用戶自定義 Chart 中設定的途徑,使得同一個 Chart 可以根據開發、測試和正式環境的不同需求進行靈活設定。
Release:
Release 是基於 Chart 部署後的應用實例。每次使用 Helm 部署 Chart,都會創建一個唯一名稱的 Release,方便管理和追蹤應用版本。
Repository:
Chart Repository 是儲存和分發 Chart 的場所,類似於 Linux 的套件管理儲存庫。用戶可以從官方的 Helm Hub 或 Artifact Hub 等公共儲存庫中下載和安裝所需的 Chart。
Helm 由以下主要組件構成:
Helm CLI:這是用戶與 Helm 互動的命令列工具,負責 Chart 管理、Release 操作及與 Kubernetes API 進行通訊。
Tiller(Helm 2 中的架構):在 Helm 2 中,Tiller 是運行在 Kubernetes Cluster中的伺服器端元件,負責管理 Release。需要注意的是,Helm 3 移除了 Tiller,改進了安全性並簡化了操作。
Chart Repository:這些是 Helm Chart 的集中存放地,類似於 Linux 的軟體儲存庫。
Helm 使用 Go 樣板語法來定義和渲染 Chart。以下是一些進階的樣板語法與使用技巧:
樣板條件語句:Helm 支援 if
、else
等條件語句,允許根據 Values 檔案中的參數來動態生成資源設定。
apiVersion: v1
kind: Service
metadata:
name: {{ .Values.serviceName }}
spec:
type: {{ if .Values.serviceType }}{{ .Values.serviceType }}{{ else }}ClusterIP{{ end }}
迴圈語法:可以使用 range
來遍歷列表或字典,生成動態數量的資源。
spec:
containers:
{{- range .Values.containers }}
- name: {{ .name }}
image: {{ .image }}
{{- end }}
函數支援:Helm 提供了一些內建函數,像是 default
、quote
、toYaml
等,可以用來處理複雜的樣板需求。
多環境部署管理:Helm 非常適合管理開發、測試和正式環境中應用的不同設定。通過在 Values 檔案中定義不同環境的變數,可以靈活切換和部署。
應用的版本控制與回滾:Helm 的 Release 版本控制功能允許用戶輕鬆回滾至穩定版本,這在升級失敗或發生問題時尤為重要。
Chart 的繼承與組合:在 Helm 中,可以透過子 Chart 來組合多個應用,實現複雜的系統架構。這些子 Chart 可以使用依賴管理功能自動安裝和設定。
CI/CD 整合:Helm 常被整合到 CI/CD 流程中,用來自動化部署和升級 Kubernetes 應用。搭配工具如 Jenkins、GitLab CI 等,可以實現自動化的持續部署流程。
相比 Helm 2,Helm 3 移除了 Tiller,這不僅簡化了架構,也提高了安全性。以下是 Helm 3 的幾個重要改進:
去除了 Tiller:Helm 3 不再需要 Tiller,消除了與 Kubernetes RBAC 的衝突問題,也使得操作更為直觀。
原生支援多命名空間:Helm 3 支援針對不同的命名空間進行更靈活的管理,避免了在多租戶環境中的資源衝突。
改進的 Chart 分析:Helm 3 引入了更強大的 Chart 分析工具,可以在部署前檢查 Chart 的正確性,減少了設定錯誤。
Helm CLI 是管理和部署 Helm Chart 的命令行工具。以下是在 Linux 上安裝 Helm 的步驟:
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
上列指令如果正常執行就可以得到以下的輸出結果
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 11694 100 11694 0 0 8154 0 0:00:01 0:00:01 --:--:-- 8154
Downloading https://get.helm.sh/helm-v3.15.3-linux-amd64.tar.gz
Verifying checksum... Done.
Preparing to install helm into /usr/local/bin
helm installed into /usr/local/bin/helm
安裝完成後,可以使用以下命令驗證 Helm 安裝是否成功:
helm version
輸出結果如下:
version.BuildInfo{Version:"v3.15.3", GitCommit:"3bb50bbbdd9c946ba9989fbe4fb4104766302a64", GitTreeState:"clean", GoVersion:"go1.22.5"}
要安裝 Helm Chart,首先需要添加一個 Chart Repository,例如官方的 stable
Repository:
helm repo add stable https://charts.helm.sh/stable
helm repo update
使用 Helm 安裝一個應用程式非常簡單。例如,要安裝一個 NGINX 應用程式,可以運行以下命令:
helm install my-nginx stable/nginx-ingress
在這個範例中:
my-nginx
是 Release 的名稱。stable/nginx-ingress
是 Chart 的名稱。安裝完成後,Helm 會創建一個名為 my-nginx
的 Release,並根據 Chart 的定義創建相關的 Kubernetes 資源。
當需要更新應用程式時,可以使用 Helm 升級已經安裝的 Release。例如,要更新 my-nginx
的設定,可以運行以下命令:
helm upgrade my-nginx stable/nginx-ingress --set controller.replicaCount=2
這將會更新 my-nginx
Release,並將 NGINX 控制器的副本數設置為 2。
要刪除一個已經安裝的應用程式,可以使用以下命令:
helm uninstall my-nginx
這將會刪除 my-nginx
Release 以及它創建的所有 Kubernetes 資源。
helm list
命令可以查看Cluster中所有的 Release。helm status <release-name>
可以查看特定 Release 的詳細資訊和狀態。helm rollback <release-name> <revision-number>
來回滾到上一個版本。Helm 是一個強大且靈活的 Kubernetes 套件管理工具,通過使用 Chart,可以輕鬆地管理 Kubernetes 應用程式的安裝、升級和刪除。Helm 不僅簡化了應用程式的部署過程,還提供了版本管理和回滾功能,使得 Kubernetes 應用程式的運維管理更加高效和可靠。
在接下來的課程中,我們將探討如何使用 Kustomize 進行 Kubernetes 設定管理,這將進一步提升你在 Kubernetes 中的設定管理能力。