iT邦幫忙

2025 iThome 鐵人賽

DAY 18
0
DevOps

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

Day 18 : 從 Terraform 到 Helm:IaC 的雙核心

  • 分享至 

  • xImage
  •  

●前言

在 Day 17 我們透過 Terraform 成功建立了雲端資源,像是 VPC、子網與 Load Balancer,初步感受到 Infrastructure as Code(IaC) 的威力。今天來聊聊 為什麼 IaC 世界裡,同時需要 Terraform 與 Helm。

●什麼是 IaC?

Infrastructure as Code(基礎建設即程式碼),是一種把基礎建設與系統設定寫成程式碼的方式,好處包含:

🔹自動化:避免手動點選介面造成錯誤。

🔹版本控制:基礎建設變更可追蹤(GitOps)。

🔹可重現性:任何人都能用同一份程式碼重建環境。

👉 但光有「Infra as Code」還不夠,因為現代應用程式需要有「App as Code」來接手部署與設定。

●Terraform 的任務:管 Infra

在專案中,Terraform 負責:

🔹VPC、子網、路由表、DNS

🔹IAM / RBAC / 安全性設定

🔹Kubernetes Cluster(EKS/GKE/AKS)建立

🔹Load Balancer、Storage、Database

👉 你可以把 Terraform 看作是「打地基、蓋骨架」的角色。

●Helm 的任務:管 App

相對地,Helm 專注在 Kubernetes 世界的「應用部署」:

🔹Deployment / Service / Ingress

🔹ConfigMap / Secret / Volume

🔹Chart 套件化(像 npm 一樣安裝/更新 App)

🔹多環境覆蓋(values.dev.yaml / values.prod.yaml)

👉 Helm 更像是「在建好的房子裡裝潢、擺設傢俱」。

●為什麼要搭配?

🔎如果只用 Terraform:

你能建好雲端基礎設施,但應用層部署還需要手動操作。

🔎如果只用 Helm:

你能部署 App,但沒辦法自動建立底層 Infra(例如 VPC、Cluster)。

📌 當兩者搭配:

🔹Terraform 建立雲端環境 + Cluster。

🔹Terraform 呼叫 helm_release → 自動在 Cluster 部署應用。

🔹所有基礎建設與應用,都納入同一個 state 與 Git 管理。

●實作步驟

1.啟動Minikube

👉minikube start

2.建立一個main.tf

terraform {
  required_providers {
    helm = {
      source  = "hashicorp/helm"
      version = "2.12.1"
    }
    kubernetes = {
      source  = "hashicorp/kubernetes"
      version = "2.29.0"
    }
  }
}

provider "kubernetes" {
  config_path    = "~/.kube/config"
  config_context = "minikube"
}

provider "helm" {
  kubernetes {
    config_path    = "~/.kube/config"
    config_context = "minikube"
  }
}

resource "helm_release" "nginx_demo" {
  name      = "nginx-demo"
  namespace = "default"

  # 推薦:先用本機 chart 避開 provider 解析 bug
  chart = "./charts/nginx"

  wait   = false
  atomic = false

  set {
    name  = "service.type"
    value = "ClusterIP"
  }

  set {
    name  = "resources.requests.cpu"
    value = "50m"
  }

  set {
    name  = "resources.requests.memory"
    value = "64Mi"
  }
}

3.把 Bitnami 的 nginx Helm chart 下載到你的本機專案

helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
mkdir -p charts
helm pull bitnami/nginx --untar --untardir ./charts

4.初始化專案

👉terraform init
https://ithelp.ithome.com.tw/upload/images/20250831/20178156pG7PIULzMl.png

5.部署前的預覽(Dry Run)

👉terraform plan
https://ithelp.ithome.com.tw/upload/images/20250831/20178156TlchvmK3wD.png

6.執行部署

👉terraform apply
🥏執行 terraform apply 後,Terraform 不只會管 infra,也能把 Helm 的應用部署進 Kubernetes。
https://ithelp.ithome.com.tw/upload/images/20250831/20178156lcnI15C2JF.png

7.確認Terraform狀態

terraform state list
terraform show -no-color | sed -n '1,120p'

https://ithelp.ithome.com.tw/upload/images/20250831/201781569aJKecIMsE.png

8.確認Helm狀態

helm list -n default
helm status nginx-demo -n default

https://ithelp.ithome.com.tw/upload/images/20250831/20178156FH53Vh9VzW.png

●總結

🔹Terraform = 管 Infra(打地基)

🔹Helm = 管 App(裝潢內部)

🔹IaC 的雙核心:兩者結合,才是真正完整的 IaC。

👉下一篇 : Day 19,我們會進一步把 Terraform + Helm 串進 CI/CD,讓基礎建設與應用部署都能隨著程式碼更新而自動化完成。


上一篇
Day 17 : 使用 Terraform 打造 AWS × GCP 混合雲基礎架構
下一篇
Day 19 : Terraform × Helm : 與 CI/CD 的無縫串接
系列文
DevOps 進化論:從全能型戰士到安全守門員19
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言