經過 Day 21~22,我們已經能從零建立 Helm Chart,並透過 _helpers.tpl、多環境 values、功能開關等技巧,讓 Chart 更容易維護與調整。
但接下來會遇到另一個問題:
如果應用程式還需要 Redis、PostgreSQL、Prometheus 等元件,難道每一個都要自己從零寫 Chart 嗎?
當然不用。
就像開發程式時會引用現成的 Library 或 Package,Helm 也可以直接使用其他人已經建立好的 Chart。
這裡會用到兩個重要概念:
例如,我們可以讓自己的應用 Chart 依賴 Redis Chart,Helm 會協助管理所需要的依賴版本與 Chart 套件。
今天內容包含:
repo add、repo update、search
Chart.yaml 宣告依賴condition 依賴開關 —— 控制 Subchart 是否啟用dependency list、lint、template、upgrade --install
以下操作延續 Day 21-22 的
my-chart,皆在 master 節點執行。
Helm Repository 就是一個存放與提供打包後 Chart 的位置。
可以把它類比成:
Helm 可以透過 Repository 搜尋與取得其他人已經建立好的 Chart,基本流程通常是:
加入 Repository → 更新索引 → 搜尋 Chart → 安裝
這篇實戰會使用 Bitnami Repository,安裝現成的 Redis Chart。
💡 補充
除了傳統 Helm Repository,現在很多 Chart 也會透過 OCI Registry 發布。
OCI Registry 可以用來儲存與散佈 Helm Chart,概念上和存放 Container Image 很類似。
先加入 Bitnami Repository:
helm repo add bitnami https://charts.bitnami.com/bitnami
接著更新本機的 Repository 索引:
helm repo update
可以把它理解成類似:
apt update
Helm 會重新取得已加入 Repository 的最新 Chart 索引。
搜尋目前已加入的 Repository 中,和 Redis 相關的 Chart:
helm search repo redis
會看到類似:

其中:
NAME:Chart 名稱CHART VERSION:Chart 本身的版本APP VERSION:Chart 所部署應用程式的版本資訊| 指令 | 用途 |
|---|---|
helm repo add <name> <url> |
加入新的 Repository |
helm repo update |
更新已加入 Repository 的索引 |
helm repo list |
列出目前已加入的 Repository |
helm repo remove <name> |
移除 Repository |
helm search repo <keyword> |
搜尋已加入 Repository 中的 Chart |
helm search hub <keyword> |
到 Artifact Hub 搜尋 Chart |
安裝前,可以先查看這個 Chart 提供哪些可調整的 values:
helm show values bitnami/redis
這個指令會顯示 Chart 的預設 values.yaml,通常內容會很長。
💡 小技巧
可以搭配
less分頁瀏覽:helm show values bitnami/redis | less或搜尋特定設定,例如:
helm show values bitnami/redis | grep -A5 "auth:"
這次練習使用 Standalone 架構,並暫時關閉密碼驗證:
helm install my-redis bitnami/redis \
--set architecture=standalone \
--set auth.enabled=false
其中:
architecture=standalone:使用單一 Redis 實例auth.enabled=false:關閉 Redis 密碼驗證⚠️ 注意
關閉 Redis 驗證只適合 Lab 或學習環境。
正式環境應保留驗證機制,並妥善管理 Redis 的密碼或 Secret。
# 查看目前 Namespace 中的 Helm Release
helm list
# 查看 Redis 相關的常見 Kubernetes 資源
kubectl get all -l app.kubernetes.io/name=redis
# 測試 Redis 連線
kubectl run redis-test \
--rm -it \
--image=redis:7-alpine \
--restart=Never \
-- redis-cli -h my-redis-master ping
如果連線成功,會看到:

💡 重點回顧
使用現成 Chart 的基本流程可以記成:
repo add → repo update → search → install不需要自己從零撰寫 Kubernetes YAML,只要透過
--set或-f覆寫需要調整的 values,就能快速部署現成應用。
剛才我們是獨立安裝 Redis,但實務上更常見的情境是:
「我的應用需要搭配 Redis,我希望執行一次
helm install,就能把應用 + Redis 一起部署。」
這就是 Chart Dependencies 的用途 —— 讓自己的 Chart 引用其他 Chart 作為依賴。
可以用程式語言的套件管理來類比:
| 程式語言 | Helm |
|---|---|
package.json |
Chart.yaml 裡的 dependencies |
node_modules/ |
charts/ 目錄 |
package-lock.json |
Chart.lock |
npm install |
helm dependency update |
簡單來說:
Chart.yaml:宣告「我需要哪些 Chart」helm dependency update:解析並下載依賴charts/:存放下載下來的 Dependency ChartChart.lock:記錄解析後的依賴版本與來源這樣你的 Chart 就可以把 Redis、PostgreSQL 等元件當成 Subchart 一起管理。
編輯:
vim my-chart/Chart.yaml
在 Chart.yaml 中加入 dependencies:
apiVersion: v2
name: my-chart
description: A Helm chart for learning
type: application
version: 0.2.0
appVersion: "1.27.0"
dependencies:
- name: redis
version: "25.3.2"
repository: https://charts.bitnami.com/bitnami
condition: redis.enabled

每個欄位的用途:
name:Dependency Chart 的名稱version:Redis Chart Version
repository:Redis Chart 所在的 Repositorycondition:透過 parent chart 的 values 控制是否啟用 Redis⚠️ 注意 Chart Version
這裡的
version指的是 Redis Chart 本身的版本,不是 Redis 的 App Version。可以先查詢目前 Repository 中的版本:
helm search repo bitnami/redisHelm 也支援 SemVer 版本範圍,但指定精確版本會比較容易讓不同時間操作的結果保持一致。
# 下載依賴的 Chart 到 charts/ 目錄
helm dependency update ./my-chart
執行後會看到:

ls my-chart/charts/
# → redis-25.x.x.tgz (下載的子 Chart 壓縮包)
cat my-chart/Chart.lock
# → 記錄了依賴的精確版本與 hash(類似 lock file)

💡
charts/目錄
charts/用來存放目前 Chart 的 Dependency Charts。執行:
helm dependency update ./my-chart或:
helm dependency build ./my-chartHelm 會把需要的 Dependency Chart 下載到
charts/。之後執行
helm install或helm template時,Helm 會連同這些 Subcharts 一起渲染。一般不需要手動解壓或直接修改
charts/裡的 Dependency Chart。
| 指令 | 用途 |
|---|---|
helm dependency update <chart> |
根據 Chart.yaml 解析並下載依賴,同時更新 Chart.lock |
helm dependency build <chart> |
根據 Chart.lock 重新下載鎖定的依賴 |
helm dependency list <chart> |
查看 Chart 宣告的依賴與目前狀態 |
💡
updatevsbuild
update:讀取Chart.yaml的dependencies,解析符合版本條件的依賴,下載到charts/,並產生或更新Chart.lockbuild:依照現有的Chart.lock重新建立charts/,不重新解析新的 Dependency Version團隊協作時,通常會將
Chart.lock加入 Git,讓不同開發者或 CI 環境使用相同的 Dependency Version。
子 Chart 有自己的 values.yaml,但你可以在父 Chart 的 values 裡覆寫它。
vim my-chart/values.yaml
在最後面加上:
# === 子 Chart: Redis 設定 ===
redis:
enabled: true
architecture: standalone
auth:
enabled: false
master:
persistence:
enabled: false

Parent Chart 可以用 Subchart 名稱作為 key,覆寫子 Chart 的 values。
例如 Redis Subchart 原本:
auth:
enabled: true
Parent Chart 可以這樣覆寫:
redis:
auth:
enabled: false
也就是:
redis.auth.enabled
會覆寫 Redis Subchart 裡的:
auth.enabled
如果某些參數需要讓 Parent Chart 和 Subchart 共用,可以放在 global 底下:
global:
storageClass: standard
之後在 Parent Chart 或 Subchart 中,都可以透過:
{{ .Values.global.storageClass }}
取得這個值。
💡 什麼時候適合使用
global?當多個 Chart 需要共享相同設定時,可以考慮放在
global,例如:
- StorageClass
- Image Registry
- Domain Name
這樣可以避免在不同 Subchart 底下重複設定相同的值。
condition — 依賴開關還記得 Day 22 學過的功能開關嗎?
當時我們用 if 控制自己寫的模板,例如 Ingress 是否要產生。
現在同樣的概念也可以套用到 Subchart,透過 condition 控制某個 Dependency 是否啟用。
📌 這一節不需要修改任何檔案
以下設定在前面的 Step 7 和 Step 9 已經完成,這裡只是說明它們如何搭配運作。
回顧 Chart.yaml:
dependencies:
- name: redis
version: "25.3.2"
repository: https://charts.bitnami.com/bitnami
condition: redis.enabled
搭配 values.yaml:
redis:
enabled: true
其中:
condition: redis.enabled
會讀取 Parent Chart 的:
redis.enabled
來決定 Redis Subchart 是否啟用。
當:
redis:
enabled: true
執行:
helm template my-release ./my-chart
會一起渲染 Redis Subchart 的資源。
如果關閉 Redis:
helm template my-release ./my-chart \
--set redis.enabled=false
Redis Subchart 的資源就不會被渲染。
這在不同環境很實用,例如:
redis.enabled: false
redis.enabled: true
同一份 Chart 就可以依不同環境決定是否包含 Redis。
# 1. 確認 Dependency 狀態
helm dependency list ./my-chart
確認 Redis 的 STATUS 顯示:
ok
接著執行:
# 2. 檢查 Chart
helm lint ./my-chart
# 3. 渲染完整 Manifest
helm template my-release ./my-chart
redis.enabled: false 時,Redis Subchart 的資源是否不再被渲染可以再測一次:
helm template my-release ./my-chart \
--set redis.enabled=false
如果設定正確,輸出中就不會再出現 Redis Subchart 的資源。
如果之前的 Release 還存在,可以先移除:
helm uninstall my-release 2>/dev/null
接著部署 Parent Chart,Redis Dependency 也會一起安裝:
helm upgrade --install my-release ./my-chart

安裝成功後,可以分別確認 Parent Chart 與 Redis Subchart 的資源:
# 查看我們自己建立的 Nginx 資源
kubectl get all -l release=my-release
# 查看 Redis Subchart 的資源
kubectl get all -l app.kubernetes.io/instance=my-release
應該可以看到:
Nginx
├── Deployment
├── Pod
└── Service

Redis Subchart 使用不同的 Label,因此需要另外查:
kubectl get all -l app.kubernetes.io/instance=my-release
📝 為什麼要用兩種 Label?
我們自己建立的 Nginx Chart 使用:
release=my-releaseBitnami Redis Chart 則使用:
app.kubernetes.io/instance=my-release不同 Chart 的 Label 設計可能不同,因此驗證第三方 Subchart 時,要先確認它實際使用的 Labels。
| 問題 | 原因與解法 |
|---|---|
Error: no repository definition for https://... |
先確認對應的 Repository 已透過 helm repo add 加入,再執行 helm dependency update |
charts/ 裡面是空的 |
可能尚未執行 helm dependency update,或 Dependency 版本 / Repository 設定有誤 |
| Subchart 參數沒生效 | 覆寫時要用 Subchart 名稱當作 key,例如 redis.auth.enabled,而不是直接寫 auth.enabled |
Chart.lock 要不要 commit? |
建議要。 團隊或 CI 可以透過 helm dependency build 使用相同的 Dependency Version |
| 想用本地 Chart 當 Dependency | 可以使用相對路徑,例如 repository: file://../my-other-chart |
今天我們學會了如何善用現成的 Chart,透過 Repository 與 Dependencies,把自己的應用和其他元件組合在一起。
| 學到的東西 | 一句話總結 |
|---|---|
| Helm Repository | repo add → repo update → search → install,快速使用現成 Chart |
helm show values |
安裝前先查看 Chart 提供哪些可調整參數 |
| Chart Dependencies | 在 Chart.yaml 宣告依賴,再用 helm dependency update 下載到 charts/ |
| Subchart Values 覆寫 | 用 Subchart 名稱作為 key,在 Parent Chart 中調整子 Chart 的 values |
| Global Values | 讓 Parent Chart 與 Subchart 共用部分參數 |
condition 依賴開關 |
用 condition: redis.enabled 控制 Subchart 是否啟用 |
Chart.lock |
鎖定依賴版本,讓團隊與 CI 使用一致的 Dependency Version |
到這裡,Helm 這一系列就告一段落了。
我們已經從 使用現成 Chart → 自己建立 Chart → 進階模板 → Repository 與 Dependency 管理,走完一套完整的 Helm 基礎流程。
下一篇要切換到 Kubernetes 安全性的核心主題 —— RBAC(Role-Based Access Control),學習如何控制「誰可以對哪些資源執行哪些操作」!