iT邦幫忙

2026 iThome 鐵人賽

DAY 21
0
Kubernetes

從零開始的雲端實戰:30 天 Kubernetes 核心觀念與部署指南系列 第 21

【Day 21】用 Helm 一鍵部署並客製化 WordPress + MySQL 集群

  • 分享至 

  • xImage
  •  

今日目標

  • 融會貫通第三週所學:Secret 機密資料、PVC 持久化儲存與 Helm 套件管理。
  • 理解複雜多層應用(WordPress + MySQL)的相依性架構。
  • 掌握建立客製化 values.yaml 覆寫預設設定的實務技巧。
  • 實戰操作:使用 Helm 在 Minikube 上一鍵部署具備持久化儲存的 WordPress 網站並進行驗證。

傳統部署 vs. Helm 部署的降維打擊

如果要手動部署一套具備生產級別可用性的 WordPress 網站,我們總共需要撰寫:

  • 2 個 Deployment / StatefulSet(WordPress + MySQL)
  • 2 個 Service(WordPress 對外入口 + MySQL 內部連線)
  • 2 個 PVC(儲存上傳的圖片檔案與資料庫檔案)
  • 至少 1 個 Secret(儲存資料庫 Root 密碼與使用者密碼)

這往往需要撰寫超過上百行的 YAML 檔,且容易在密碼串接或儲存掛載時發生拼字錯誤。

今天我們將透過 Helm 官方社群維護的 Bitnami WordPress Chart,示範如何透過一份簡潔的自訂參數檔,在幾十秒內自動完成所有底層物件的編排與關聯!


架構拆解:Chart 背後自動生成的元件

當我們安裝 WordPress Chart 時,Helm 會在背後自動幫我們產生以下元件:

元件名稱 資源類型 職責與配置
WordPress Web Deployment 運行 WordPress PHP 核心與 Apache 伺服器
WordPress Data PVC 持久化儲存使用者上傳的外掛、主題與媒體檔案
WordPress Service Service (NodePort) 提供本機存取 WordPress 前台與後台的網路入口
MariaDB / MySQL StatefulSet 運行關聯式資料庫,儲存文章、設定與會員帳號
Database Data PVC 持久化儲存資料庫實體數據檔(重啟不遺失資料)
App Secrets Secret 存放資料庫連線密碼與 WordPress 管理員憑證

實戰演練:客製化部署 WordPress 集群

步驟 1:建立自訂參數檔 custom-values.yaml

我們不需要改動 Chart 的原始碼,只需建立一個 custom-values.yaml 檔案,覆寫我們想要客製化的參數:

# WordPress 應用程式設定
wordpressUsername: admin
wordpressPassword: MyStrongAdminPassword2026
wordpressEmail: user@example.com
wordpressFirstName: Central
wordpressLastName: Admin

# 服務暴露型態 (在 Minikube 使用 NodePort)
service:
  type: NodePort
  nodePorts:
    http: "30080"

# WordPress 檔案持久化設定
persistence:
  enabled: true
  size: 2Gi

# 關聯的 MariaDB 資料庫設定
mariadb:
  enabled: true
  auth:
    rootPassword: RootDBSecretPassword2026
    database: bitnami_wordpress
    username: bn_wordpress
    password: UserDBSecretPassword2026
  primary:
    persistence:
      enabled: true
      size: 3Gi

步驟 2:執行 Helm 安裝

使用剛剛建立的 custom-values.yaml 進行一鍵安裝:

helm install my-blog bitnami/wordpress -f custom-values.yaml

輸出預期:

NAME: my-blog
LAST DEPLOYED: ...
NAMESPACE: default
STATUS: deployed
REVISION: 1

步驟 3:觀察各項資源物件自動就位

在終端機檢查所有自動生成的資源:

# 檢查 Pods (WordPress 與 MariaDB)
kubectl get pods

# 檢查 PVC (確認 2 顆持久化硬碟皆已 Bound)
kubectl get pvc

# 檢查 Secrets (確認機密資料已自動生成)
kubectl get secrets

小提醒:由於需要從遠端下載 WordPress 與 MariaDB 的映像檔並進行資料庫初始化,初次啟動大約需要 1 至 2 分鐘,直到兩個 Pod 狀態皆顯示為 Running


步驟 4:存取 WordPress 網站

在 Minikube 中,取得 WordPress 的連線網址:

minikube service my-blog-wordpress --url

打開瀏覽器輸入輸出的網址(或訪問 http://$(minikube ip):30080):

  • 前台首頁:可以看到全新初始化的 WordPress 官方部落格。
  • 管理後台:點擊網址後方加上 /wp-admin,輸入我們在 custom-values.yaml 中設定的帳號 admin 與密碼 MyStrongAdminPassword2026,即可成功登入後台!

步驟 5:持久化極限測試(驗證文章不遺失)

  1. 在 WordPress 後台隨意發佈一篇標題為 「Day 21 K8s 實戰測試」 的新文章。
  2. 回到終端機,將 WordPress Pod 與 MariaDB Pod 手動刪除:
kubectl delete pod -l app.kubernetes.io/name=wordpress
kubectl delete pod -l app.kubernetes.io/name=mariadb
  1. 等待 Controller 與 StatefulSet 自動重啟全新 Pod 後,重新整理瀏覽器頁面。
  2. 驗證結果:剛剛發佈的文章依然完好無損,證明 PVC 資料持久化完全正常運作!

第三週完賽總結

恭喜順利完成第三週共 21 天的挑戰!

在這 7 天裡,我們攻克了 Kubernetes 最具技術門檻的「有狀態與儲存架構」:

  • Day 15:用 Secret 機密資料庫保障密碼與金鑰安全。
  • Day 16:用 PV / PVC / StorageClass 破解容器資料易逝的痛點。
  • Day 17:用 StatefulSet 與 Headless Service 駕馭有狀態分散式資料庫。
  • Day 18:用 Job / CronJob 自動化執行批次與定時任務。
  • Day 19:用 Namespace 與 ResourceQuota 劃分團隊租戶算力邊界。
  • Day 20-21:用 Helm Chart 實現高度模組化、一鍵安裝的企業級應用打包。

進入最後一週(第四週:維運、監控與雲端生態),我們將把重心轉移到軟體上線後的關鍵維運課題:健康檢查探針、自動擴縮容、監控告警與 CI/CD GitOps。

明天 Day 22,我們將學習 Pod 的自我健康體檢機制:「Pod 的體檢機制:Liveness, Readiness, Startup Probes 探針實務」


上一篇
【Day 20】K8s 包裝神器:Helm Chart 概念與 Helm Repo 操作
下一篇
【Day 22】Pod 的體檢機制:Liveness, Readiness, Startup Probes 探針實務
系列文
從零開始的雲端實戰:30 天 Kubernetes 核心觀念與部署指南30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言