顯示具有 helm 標籤的文章。 顯示所有文章
顯示具有 helm 標籤的文章。 顯示所有文章

星期五, 10月 09, 2026

用 helm-diff 在升級前先看會改到什麼

我管理 Helm chart 的慣例

每個 chart 我會開一個目錄,維護四個檔案:

  • init-repo.sh:加入 repo 的指令,記錄 repo 是怎麼加的。
  • upgrade.sh:安裝與升級的指令,通常是 helm upgrade --install,並用 --version 固定 chart 版本。
  • values.yaml:先用 helm show values <chart> 取得可調整的設定,再改成自己要的。不用 --set 是因為設定只存在指令列裡,事後很難回想當初設了什麼。
  • README.md:說明文件。

這些都是純文字檔,可以直接納入版本管理。

為什麼需要 helm-diff

最近用 Claude 整理自家的 k8s,發現有些 release 是早期直接下指令裝的,沒有照上面的慣例留下 values.yaml。要把它們補回來,得先確認「我補寫的 values.yaml 和叢集裡實際在跑的設定一致」,Claude 建議我裝 helm-diff 這個 plugin 來比對。

helm-diff 會把「chart 加上你的 values」算出來的 manifest,拿去和叢集裡該 release 目前的 manifest 比較,像 git diff 一樣列出差異。它只做比對,不會改動叢集。

安裝

Helm 4:

curl -sL https://github.com/databus23.gpg | gpg --import
gpg --list-keys --with-fingerprint EA17A2A206AFF8CD
# 指紋應為:C5645EF4 7482257A 1F806D2B EA17A2A2 06AFF8CD
helm plugin install https://github.com/databus23/helm-diff/releases/latest/download/helm-diff-linux-amd64.tgz

Helm 4 安裝 plugin 時預設會驗證來源證明(provenance),確認檔案確實由作者簽署、沒有被竄改,所以要先匯入作者的 GPG 公鑰,並核對指紋。只有直接指向 tarball 的網址才支援驗證。檔名裡的 linux-amd64 請依自己的作業系統與架構,到 releases 頁面挑對應的檔案。

Helm 3(需 3.18 以上):

helm plugin install https://github.com/databus23/helm-diff

使用

升級前先看會改什麼。參數和 upgrade.sh 裡的 helm upgrade 保持一致即可:

helm diff upgrade ngf <chart> -n nginx-gateway --version <版本> -f values.yaml -C 3

-C 3 是只顯示差異前後 3 行,不加的話會印出完整 manifest。Secret 的內容預設會遮蔽。

rollback 前先看退回某個 revision 會改什麼:

helm diff rollback ngf 1 -n nginx-gateway

把手動安裝的 release 補回慣例

  1. 取出當初安裝時給的設定:helm get values ngf -n nginx-gateway -o yaml > values.yaml
  2. 用 helm list -n nginx-gateway 確認目前的 chart 版本,寫進 upgrade.sh。
  3. 執行上面的 helm diff upgrade。沒有任何輸出,就代表這份 values.yaml 和線上設定一致,可以放心納入版本管理。

其他常用的子指令

  • upgrade:升級會改什麼
  • rollback:rollback 會改什麼
  • revision:比較同一個 release 的兩個 revision,例如 helm diff revision ngf 1 2
  • release:比較兩個 release,例如 prod 和 staging

要注意 helm-diff 預設是和 Helm 記錄的上一版 manifest 比。如果有人用 kubectl edit 直接改過資源,要加 --three-way-merge 才會和叢集的實際狀態比對。


星期一, 4月 06, 2026

helm-dashboard

 可以管理 helm chart 的網頁工具。

https://github.com/komodorio/helm-dashboard

有兩種使用方式

  • 指令列
  • 用 helm 佈署到容器平台

指令列

安裝 (以下假定你已經安裝 helm)

helm plugin install https://github.com/komodorio/helm-dashboard.git

使用

helm dashboard -b --bind=0.0.0.0 -p 8080

這會在 port 8080 啟動一個網頁伺服器,然後就可以用瀏覽器存取了。

用 helm 佈署到容器平台

加入 helm repo

helm repo add komodorio https://helm-charts.komodor.io

更新 helm repo

helm repo update komodorio

取出 chart 可設定的參數

helm show values komodorio/helm-dashboard >values.yaml

修改 values.yaml,主要修改以下內容

  • ingress:我使用 tailscale ,所以 ingress 設為 tailscale
  • service:port 調整為 9090,這改不改沒關係
  • dashboard:因網頁介面內可以直接 upgrade chart,所以把 allowWriteActions 設為 true

ingress:
enabled: true
className: “tailscale”
hosts:
– host: “”
service:
port: 9090
dashboard:
allowWriteActions: true

安裝

helm upgrade --install helm-dashboard komodorio/helm-dashboard \
  --namespace helm-dashboard \
  --create-namespace \
  -f values.yaml

安裝以後,就可以使用 ingress 的 address 登入了。

畫面可參考:https://github.com/komodorio/helm-dashboard/blob/main/images/screenshot.png

星期六, 7月 13, 2024

helm images

 適用情境,客戶是離線環境,沒辦法直接拉 container image,所以要先知道 helm chart 裏面用到的 container image,用這指令,就可以找到所有 helm chart 所使用到的 image,再用 skopeo/podman pull/docker pull 拉取下來,存為 tarball ,並帶到客戶端。

專案網址:https://github.com/nikhilsbhat/helm-images

安裝

安裝好 helm 以後,可以用以下指令安裝

helm plugin install https://github.com/nikhilsbhat/helm-images

使用

簡單說,就是拿 helm install 的指令來用,並改為 helm images get。

所以在配置好 helm repo 以後,就可以用 helm images 取得

例如 redis-operator

helm images get redis redis-operator/redis-operator

又例如 zabbix operator

helm images get zabbix zabbix-chart-7.0/zabbix-helm-chrt

就可以取得 container images 的網址。


題外話,應該要來熟悉一下 skopeo 怎麼用才是。

星期日, 1月 07, 2024

如何檢查GitOps Manifests

Kubernetes 主要會用這幾種檔案格式:

  1. YAML
  2. Kustomize
  3. Helm Chart

在使用前,是否可以檢查呢?以下就分別來介紹

YAMLint

YAML 可以使用 yamllint 來檢查,在 RHEL9 裡可以直接安裝 yamllint 。

sudo yum install yamllint

用以下指令檢查

yamllint service.yml

可以使用 -f 來指定輸出格式。

Kustomize

kustomize 可以用 kustomize build 來檢查。

kustomize build path/to/folder

Red Hat 有寫一個輔助腳本:validate_manifest.sh

Helm

helm 本身有提供 subcommand 來檢查:helm lint

helm lint Chart.yaml

參考資料