iT邦幫忙

2024 iThome 鐵人賽

DAY 21
0
Kubernetes

Kubernetes三十天就上手系列 第 21

Day 21- Kubernetes 的套件管理工具 Helm

  • 分享至 

  • xImage
  •  

Kubernetes的套件管理工具 Helm

Helm 是 Kubernetes 的套件管理工具,旨在簡化應用的部署、升級和管理過程。它透過 Chart 封裝應用程式,使得 Kubernetes 上的應用部署變得更加容易且可管理。

Helm 的基本概念

  1. Chart
    Chart 是 Helm 的封裝格式,類似於 Linux 的套件管理器(如 apt 或 yum)。它包含 Kubernetes 應用程式的所有必要資源,如 Deployment、Service、ConfigMap 等的 YAML 檔案範本。Chart 允許用戶定義應用程式的設定選項,這些選項可以根據不同的環境進行自定義。

  2. Values
    Values 檔案提供了用戶自定義 Chart 中設定的途徑,使得同一個 Chart 可以根據開發、測試和正式環境的不同需求進行靈活設定。

  3. Release
    Release 是基於 Chart 部署後的應用實例。每次使用 Helm 部署 Chart,都會創建一個唯一名稱的 Release,方便管理和追蹤應用版本。

  4. Repository
    Chart Repository 是儲存和分發 Chart 的場所,類似於 Linux 的套件管理儲存庫。用戶可以從官方的 Helm Hub 或 Artifact Hub 等公共儲存庫中下載和安裝所需的 Chart。

Helm 的架構與組件

Helm 由以下主要組件構成:

  1. Helm CLI:這是用戶與 Helm 互動的命令列工具,負責 Chart 管理、Release 操作及與 Kubernetes API 進行通訊。

  2. Tiller(Helm 2 中的架構):在 Helm 2 中,Tiller 是運行在 Kubernetes Cluster中的伺服器端元件,負責管理 Release。需要注意的是,Helm 3 移除了 Tiller,改進了安全性並簡化了操作。

  3. Chart Repository:這些是 Helm Chart 的集中存放地,類似於 Linux 的軟體儲存庫。

Helm 的樣板語法與進階使用

Helm 使用 Go 樣板語法來定義和渲染 Chart。以下是一些進階的樣板語法與使用技巧:

  1. 樣板條件語句:Helm 支援 ifelse 等條件語句,允許根據 Values 檔案中的參數來動態生成資源設定。

    apiVersion: v1
    kind: Service
    metadata:
      name: {{ .Values.serviceName }}
    spec:
      type: {{ if .Values.serviceType }}{{ .Values.serviceType }}{{ else }}ClusterIP{{ end }}
    
  2. 迴圈語法:可以使用 range 來遍歷列表或字典,生成動態數量的資源。

    spec:
      containers:
        {{- range .Values.containers }}
        - name: {{ .name }}
          image: {{ .image }}
        {{- end }}
    
  3. 函數支援:Helm 提供了一些內建函數,像是 defaultquotetoYaml 等,可以用來處理複雜的樣板需求。

Helm 的使用場景與最佳實踐

  1. 多環境部署管理:Helm 非常適合管理開發、測試和正式環境中應用的不同設定。通過在 Values 檔案中定義不同環境的變數,可以靈活切換和部署。

  2. 應用的版本控制與回滾:Helm 的 Release 版本控制功能允許用戶輕鬆回滾至穩定版本,這在升級失敗或發生問題時尤為重要。

  3. Chart 的繼承與組合:在 Helm 中,可以透過子 Chart 來組合多個應用,實現複雜的系統架構。這些子 Chart 可以使用依賴管理功能自動安裝和設定。

  4. CI/CD 整合:Helm 常被整合到 CI/CD 流程中,用來自動化部署和升級 Kubernetes 應用。搭配工具如 Jenkins、GitLab CI 等,可以實現自動化的持續部署流程。

Helm 3 的改進與優勢

相比 Helm 2,Helm 3 移除了 Tiller,這不僅簡化了架構,也提高了安全性。以下是 Helm 3 的幾個重要改進:

  1. 去除了 Tiller:Helm 3 不再需要 Tiller,消除了與 Kubernetes RBAC 的衝突問題,也使得操作更為直觀。

  2. 原生支援多命名空間:Helm 3 支援針對不同的命名空間進行更靈活的管理,避免了在多租戶環境中的資源衝突。

  3. 改進的 Chart 分析:Helm 3 引入了更強大的 Chart 分析工具,可以在部署前檢查 Chart 的正確性,減少了設定錯誤。

安裝 Helm

1. 安裝 Helm CLI

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"}

2. 添加 Chart Repository

要安裝 Helm Chart,首先需要添加一個 Chart Repository,例如官方的 stable Repository:

helm repo add stable https://charts.helm.sh/stable
helm repo update

使用 Helm 管理應用程式

1. 安裝應用程式

使用 Helm 安裝一個應用程式非常簡單。例如,要安裝一個 NGINX 應用程式,可以運行以下命令:

helm install my-nginx stable/nginx-ingress

在這個範例中:

  • my-nginx 是 Release 的名稱。
  • stable/nginx-ingress 是 Chart 的名稱。

安裝完成後,Helm 會創建一個名為 my-nginx 的 Release,並根據 Chart 的定義創建相關的 Kubernetes 資源。

2. 升級應用程式

當需要更新應用程式時,可以使用 Helm 升級已經安裝的 Release。例如,要更新 my-nginx 的設定,可以運行以下命令:

helm upgrade my-nginx stable/nginx-ingress --set controller.replicaCount=2

這將會更新 my-nginx Release,並將 NGINX 控制器的副本數設置為 2。

3. 刪除應用程式

要刪除一個已經安裝的應用程式,可以使用以下命令:

helm uninstall my-nginx

這將會刪除 my-nginx Release 以及它創建的所有 Kubernetes 資源。

管理 Helm Release

  • 查看 Release:使用 helm list 命令可以查看Cluster中所有的 Release。
  • 查看 Release 詳細資訊:使用 helm status <release-name> 可以查看特定 Release 的詳細資訊和狀態。
  • 回滾 Release:如果某次升級導致應用程式無法正常運行,可以使用 helm rollback <release-name> <revision-number> 來回滾到上一個版本。

總結

Helm 是一個強大且靈活的 Kubernetes 套件管理工具,通過使用 Chart,可以輕鬆地管理 Kubernetes 應用程式的安裝、升級和刪除。Helm 不僅簡化了應用程式的部署過程,還提供了版本管理和回滾功能,使得 Kubernetes 應用程式的運維管理更加高效和可靠。

在接下來的課程中,我們將探討如何使用 Kustomize 進行 Kubernetes 設定管理,這將進一步提升你在 Kubernetes 中的設定管理能力。


上一篇
Day 20- Kubernetes 中的命名空間與資源隔離
下一篇
Day 22- 使用 Kustomize 進行 Kubernetes 設定管理
系列文
Kubernetes三十天就上手30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言