iT邦幫忙

2025 iThome 鐵人賽

DAY 19
0
DevOps

DevOps 進化論:從全能型戰士到安全守門員系列 第 19

Day 19|Terraform × Helm : 與 CI/CD 的無縫串接

  • 分享至 

  • xImage
  •  

● 前言

在 Day 17~18,我們已經完成了兩大基礎:

  • 🔸 Terraform:自動化建立基礎架構(VPC / K8s Cluster / Namespace)
  • 🔸 Helm:將應用程式打包成 Chart,讓部署可參數化、可重複

今天,我們要把這些元件拉進 CI/CD 管線,實現完整的 DevOps 範例:

  • 🔸 PR → Plan(預覽部署)
  • 🔸 Merge → Apply(部署)
  • 🔸 自動 Smoke Test(服務可用性檢查)
  • 🔸 出包可一鍵 Rollback(Helm / Git)

● 核心觀念

  1. IaC 一條龍:Terraform 與 Helm 都要走流水線,避免「手動 apply」的落差
  2. 環境隔離:dev/staging/prod 使用不同 tfvars/values.yaml,避免污染
  3. 狀態與密鑰管理:Remote State(S3/GCS/Blob 或 Terraform Cloud)+ Secrets / OIDC 取代硬寫金鑰

● 實作步驟

1. 啟動 Minikube

minikube start
kubectl config current-context   # 確認是 minikube

2. 準備所需檔案

專案結構:
專案結構

3. Helm 檢查語法與預渲染

helm lint charts/app
helm template hello charts/app \
  -f charts/app/values.yaml \
  -f charts/app/values.dev.yaml

👉 確保 Chart 本身能正確渲染,不會生成壞掉的 YAML。

4. Terraform 初始化 & 部署

terraform -chdir=deploy/terraform init
terraform -chdir=deploy/terraform plan -var-file=envs/dev.tfvars
terraform -chdir=deploy/terraform apply -auto-approve -var-file=envs/dev.tfvars

5. 驗證部署結果

kubectl -n demo get pods,svc
kubectl -n demo port-forward svc/hello-app-app 8080:80

Pods 狀態
👉 瀏覽 http://localhost:8080
服務頁面

6. CI/CD 串接

  • CI(Pull Request 驗證)
    • 🔸 helm lint/template:擋掉語法錯誤
    • 🔸 terraform fmt/validate/plan:確保 IaC 健康
    • 🔸 PR 階段僅「預演」,不會真的部署
  • CD(主線自動部署)
    • 🔸 push 到 main → Actions 啟動
    • 🔸 在 pipeline 裡起一個 kind cluster → terraform apply
    • 🔸 自動佈署 Helm Release
    • 🔸 部署後跑 Smoke Test(等 Pod ready)
  • 回滾
    • 🔸 Helm rollback:快速回到上個版本
    • 🔸 Git revert + terraform apply:IaC 保證狀態一致

7. Smoke Test

部署後立即檢查:

kubectl -n demo rollout status deploy/hello-app-app --timeout=120s
kubectl -n demo get svc hello-app-app

✅ 確保服務可用,CI/CD pipeline 才算通過。


● 總結

今天我們把 Terraform + Helm 拉進 CI/CD,形成完整閉環:

  • 🔸 IaC 一條龍 → 基礎建設與應用都版本控
  • 🔸 自動化驗證 → Lint、Template、Plan、Smoke Test
  • 🔸 環境隔離 → dev/staging/prod 配置檔分離
  • 🔸 快速回滾 → Helm rollback 或 Git revert

這就是從 基礎設施層(Terraform)應用部署層(Helm) 的「無縫串接」。


👉 下一篇

Day 20|Observability 全面監控:Prometheus × Grafana × ELK


上一篇
Day 18|從 Terraform 到 Helm:IaC 的雙核心
下一篇
Day 20|Observability 全面監控:Prometheus × Grafana × ELK
系列文
DevOps 進化論:從全能型戰士到安全守門員30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言