iT邦幫忙

2025 iThome 鐵人賽

DAY 18
0
DevOps

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

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

  • 分享至 

  • xImage
  •  

Day 18|Terraform × Helm:IaC 的雙核心

● 前言

在 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

terraform init

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

terraform plan

terraform plan

6. 執行部署

terraform apply

🥏 執行後,Terraform 不只會管 infra,也能把 Helm 的應用部署進 Kubernetes。
terraform apply

7. 確認 Terraform 狀態

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

terraform state

8. 確認 Helm 狀態

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

helm status


● 總結

🔹 Terraform = 管 Infra(打地基)
🔹 Helm = 管 App(裝潢內部)
🔹 IaC 的雙核心:兩者結合,才是真正完整的 IaC


👉 下一篇

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


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

尚未有邦友留言

立即登入留言