iT邦幫忙

2024 iThome 鐵人賽

DAY 20
0
DevOps

DevOps菜鳥的30天實踐挑戰:從 CI/CD Pipeline 到雲端佈署系列 第 20

Day20 - 使用 Helm 管理 Kubernetes 的應用佈署

  • 分享至 

  • xImage
  •  

在今天的文章中,我們將探討如何使用 Helm 來管理 Kubernetes 應用程式的佈署與管理。Helm 是 Kubernetes 中最受歡迎的套件管理工具之一,它能讓我們輕鬆地打包、分享及佈署應用程式,並提供強大的版本控制和佈署管理功能。


什麼是 Helm?

https://ithelp.ithome.com.tw/upload/images/20241004/20169492DLnTCHxr0f.jpg
圖片來源

Helm 是 Kubernetes 的套件管理工具,類似於 Linux 系統中的 aptyum。透過 Helm,我們可以將應用程式定義為一個 Helm Chart,並使用它來佈署、更新和管理應用程式。Helm 簡化了 Kubernetes 應用的佈署過程,尤其是當應用程式包含多個 Kubernetes 資源時 (如 Deployment、Service、ConfigMap 等)。

Helm 的主要功能包括:

  1. Chart:Helm 的應用包,定義應用程式及其依賴項目。
  2. Release:Helm 佈署的實例,可以管理多個不同版本的應用佈署。
  3. Repository:Helm Chart 的存放庫,用於應用程式的分享和存取。

為什麼使用 Helm?

Helm 提供了以下幾個主要優點:

  1. 快速佈署:透過 Helm Chart,可以一次性佈署應用需要的所有 Kubernetes 資源,減少手動配置的工作。
  2. 版本控制:Helm 支援回復到舊版本,這意味著當應用更新出現問題時,我們可以輕易地回復到之前的穩定版本。
  3. 模板化管理:Helm 支援參數化配置,能夠根據不同的環境動態調整應用的配置。
  4. 易於共享和再利用:開發者可以將應用打包成 Chart ,方便與其他團隊或社群分享,以行快速佈署。

如何使用 Helm?

安裝 Helm

  • macOSLinux 安裝 Helm 非常簡單:
# 安裝 Helm (macOS 使用 Homebrew)
brew install helm

# 安裝 Helm (Linux)
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
  • 在 Windows 上安裝 Helm 可以通過多種方式,這裡我們使用 Chocolatey 安裝 Helm:
  1. 安裝 Chocolatey

    可以通過以下 PowerShell 命令來安裝 Chocolatey(參考官方文件)

Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
  1. 使用 Chocolatey 安裝 Helm

    安裝完 Chocolatey 之後,可以使用以下命令來安裝 Helm:

    choco install kubernetes-helm
    

驗證 Helm 安裝

安裝完成後,可以通過以下命令確認 Helm 是否安裝成功:

helm version

創建 Helm Chart

helm create myapp

這將會生成一個名為 myapp 的新 Helm Chart,內含應用所需的模板與配置檔案。

myapp/
├── charts/              # 子 Chart 目錄
├── templates/           # Kubernetes 資源的模板文件 (如 Deployment、Service 等)
│   └── _helpers.tpl     # 輔助模板
├── values.yaml          # Chart 參數配置文件
├── Chart.yaml           # Chart 的基本資訊 (如名稱、版本等)
└── README.md            # Chart 的說明文件

編輯 Chart 配置

我們可以修改 values.yaml 來定義應用程式的默認配置。

replicaCount: 2

image:
  repository: myregistry.azurecr.io/myapp
  tag: "v1"
  pullPolicy: IfNotPresent

service:
  type: ClusterIP
  port: 80

resources:
  limits:
    cpu: 500m
    memory: 512Mi
  • replicaCount:定義應用的副本數。
  • image:定義應用的容器映像及其標籤版本。
  • service:定義應用的服務類型與連接埠。
  • resources:設定容器的資源限制。

佈署應用

編寫好 Chart 後,我們可以使用 Helm 將應用佈署到 Kubernetes 叢集:

helm install myapp ./myapp
  • myapp:Release 的名稱。
  • ./myapp:我們剛剛創建的 Helm Chart 路徑。

佈署完成後,我們可以使用 helm list 查看已佈署的 Helm Release:

helm list

更新與回復應用

當我們需要更新應用時,只需修改 values.yaml 並使用 upgrade 命令進行更新:

helm upgrade myapp ./myapp

若更新過程中出現問題,我們可以使用 rollback 命令回復到先前的版本:

# 1 是 Release 的版本號
helm rollback myapp 1

使用情境

  1. 快速佈署複雜應用
    • 當應用由多個微服務組成,需要多個 Kubernetes 資源時,手動佈署所有資源可能會繁瑣且容易出錯。Helm 可以將這些資源打包成一個 Chart,使佈署變得簡單且一致。
    • 情境:一個電子商務平台有多個微服務,包括用戶管理、支付、庫存管理等,使用 Helm Chart 可以一次性佈署這些微服務並管理其依賴關係。
  2. 應用更新
    • 當應用程式需要定期進行更新時,Helm 的版本控制功能可以幫助開發團隊輕鬆更新應用,也能夠快速回復到先前的穩定版本,以確保系統的穩定性。
    • 情境:一個應用在上線後,團隊需要定期推出新功能或修復 Bug,使用 Helm 的滾動更新功能可以逐步替換舊版本的 Pod,確保應用的持續可用。
  3. 環境間的配置管理
    • 在不同的環境中(如開發、測試、正式),應用的配置需求可能不同。Helm 允許開發團隊使用相同的 Chart 並根據 values.yaml 文件進行不同的配置管理,方便應用在不同環境中佈署。
    • 情境:一個微服務應用需要在開發環境中運行兩個 Pod,但在正式環境中需要運行 10 個 Pod。Helm 可以根據不同的配置文件進行靈活的佈署。
  4. 回復 (Rollback)
    • 當新的應用版本上線後發現問題,Helm 提供了簡單的回復機制,讓應用能快速恢復到上一個版本,減少業務中斷時間。
    • 情境:新功能上線後發現性能問題,導致應用無法正常運行,Helm 能夠迅速將應用回復到上一個穩定版本,確保用戶體驗不受影響。

Helm vs kubectl

看到這邊,可能會產生 Helmkubectl 好像差不多的想法,但事實上它們在 Kubernetes 中扮演著不同的角色:

  • kubectl 是 Kubernetes 的直接命令行工具,適合進行叢集管理和操作。
  • Helm 是 Kubernetes 的應用管理工具,適合自動化佈署、升級、管理應用程式,特別是當應用需要佈署多個 Kubernetes 資源時。

1. 功能不同

  • kubectl
    • kubectl 是 Kubernetes 的命令行工具,主要用於與 Kubernetes API 互動。
    • 它允許我們管理 Kubernetes 叢集中的各種資源,比如 Pod、Service、Deployment 等。常見的操作包括佈署應用、管理資源、查看叢集狀態、排錯等。
    • 它是 Kubernetes 用戶進行叢集管理和操作的主要工具。
  • Helm
    • Helm 是一個 Kubernetes 的套件管理工具,用來簡化應用程式的佈署、升級和管理。
    • Helm 使用Chart來打包應用程式和其所有的 Kubernetes 資源定義,這樣可以更方便地佈署和管理應用的不同版本。Helm 提供了版本控制、回復和模板化功能。
    • Helm 可以看作是 Kubernetes 的應用管理工具,讓應用佈署和管理變得更加自動化和標準化。

2. 使用場景

  • kubectl
    • 主要用於日常的 Kubernetes 操作和資源管理。例如:手動創建 Pod、更新 Deployment、查看叢集狀態、調試問題等。
    • 適合直接與 Kubernetes API 互動,進行叢集的具體操作和調整。
  • Helm
    • 主要用於應用程式的管理,包括應用程式的安裝、升級、回復等。它簡化了應用程式的佈署,尤其是在複雜應用中,可以使用 Helm 的 Chart 一次定義多個 Kubernetes 資源。
    • 適合需要佈署多個資源或進行應用升級的情境。

3. 操作方式

  • kubectl

    • 操作單個資源,需要手動編寫 YAML 文件或指定命令來操作 Kubernetes 資源。例如,創建一個 Deployment 通常需要編寫一個 YAML 文件,並使用以下命令:
    kubectl apply -f deployment.yaml
    
  • Helm

    • 通過 Helm Chart,一個 Chart 可能包含多個 Kubernetes 資源的定義,並且支持模板化,可以根據需要動態調整參數。使用 Helm 安裝一個應用,只需要一行命令:
    helm install myapp stable/myapp
    

4. 版本控制

  • kubectl

    • 不提供原生的版本控制或回復機制,更新資源需要手動修改 YAML 文件並重新應用。
  • Helm

    • 提供內建的版本控制和回復功能,可以輕鬆回復到之前的版本。
    helm rollback myapp 1
    

結語&預告

今天我們介紹了如何使用 Helm 來管理 Kubernetes 的應用程式佈署。Helm 不僅簡化了 Kubernetes 應用的佈署過程,還提供了靈活的版本控制、配置管理和應用回復功能。透過 Helm,我們能夠更輕鬆地管理應用的生命週期,無論是在開發環境還是正式環境中,都能提高應用的穩定性與可維護性。

明天,我們將開始進行 Kubernetes 應用的基礎監控,學習如何使用 Prometheus 來收集、監控應用程式的性能數據,幫助我們及時發現問題並提升應用的穩定性!敬請期吧~


參考文件


上一篇
Day19 - Kubernetes 自動擴展 (Autoscaling)
下一篇
Day21 - 使用 Prometheus 進行基礎監控
系列文
DevOps菜鳥的30天實踐挑戰:從 CI/CD Pipeline 到雲端佈署30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言