GitOps 核心思想

Vibe Prompt

「解釋 GitOps 與傳統部署的差異,為什麼 GitOps 更適合 K8s。」

傳統 vs GitOps

| 面向 | 傳統部署 | GitOps | |------|---------|--------| | 觸發方式 | 手動 SSH / CI/CD push | Git 提交自動同步 | | 狀態來源 | 伺服器當前狀態 | Git Repo 宣告式設定 | | 回滾方式 | 手動重部署 | git revert | | 審計軌跡 | 無 | Git History | | 災難復原 | 重新部署 | argocd app sync |

ArgoCD 安裝

kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

# 取得密碼
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d

# 連接 ArgoCD
argocd login localhost:8080
argocd app create myapp --repo https://github.com/me/myapp.git --path k8s --dest-server https://kubernetes.default.svc --dest-namespace default
argocd app sync myapp

Application YAML

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: myapp
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://github.com/me/myapp.git
    path: k8s/overlays/production
    targetRevision: main
  destination:
    server: https://kubernetes.default.svc
    namespace: production
  syncPolicy:
    automated:
      prune: true
      selfHeal: true

Sync 策略

  • Manual:手動觸發同步
  • Automated:自動同步(prune = 刪除多餘資源,selfHeal = 自動修復漂移)

關鍵要點

  • ✅ 請根據本章主題補充具體的學習重點
  • ✅ 建議加入比較表格、程式碼範例或流程圖
  • ✅ 確保內容扎實且有價值

GitOps 的核心原則

| 原則 | 說明 | 實作方式 | |------|------|---------| | 宣告式配置 | 整個系統狀態用程式碼定義 | Kubernetes YAML / Terraform HCL | | 版本控制 | 所有變更都透過 Git | Pull Request + Code Review 流程 | | 自動同步 | Git 是唯一的事實來源 | ArgoCD / Flux 自動檢測差異 | | 自我修復 | 系統自動回歸到 Git 定義的狀態 | 偏離偵測 + 自動校正 |

GitOps vs 傳統 CI/CD

| 比較 | 傳統 CI/CD | GitOps | |------|:----------:|:------:| | 部署方式 | Pipeline 推送至叢集 | ArgoCD 從 Git 拉取 | | 權限模型 | CI 系統需要叢集存取權 | 僅 ArgoCD 需要(安全性更高) | | 偏離偵測 | ❌ 部屬後不管 | ✅ 持續比較 Git vs 實際狀態 | | 回退方式 | 重新執行 Pipeline | Git revert + 自動同步 |



GitOps 核心思想:宣告式 + 自動化

GitOps 的核心非常簡單:Git Repository 是你的系統的單一事實來源(Single Source of Truth)。你的基礎設施狀態應該完全由 Git Repo 中的檔案來定義。

為什麼需要 GitOps?

傳統的基礎設施管理方式是「手動 SSH 進去改設定」或「在 CI/CD 後台點選部署」。問題是:

  • 誰在什麼時間改了什麼?沒有記錄
  • 改錯了可以 rollback 嗎?很難
  • 不同環境的設定一致嗎?不保證

GitOps 解決了這三個問題——因為所有變更都透過 Git PR 進行,有完整的審計軌跡、可以 git revert、而且環境之間只差一個 branch。

How:GitOps 的工作流程

開發者修改 K8s YAML → git push → PR → Code Review → Merge to main
                                                          ↓
                                              ArgoCD 偵測到變更
                                                          ↓
                                              ArgoCD sync 到 K8s 叢集
                                                          ↓
                                              K8s 叢集狀態 = Git Repo 狀態

GitOps vs 傳統 CI/CD

| 比較 | 傳統 CI/CD | GitOps | |:----|:---------|:-------| | 部署方式 | CI/CD Pipeline 主動推送 | ArgoCD 主動拉取 | | 狀態比對 | 部署完就結束了 | 持續比對 Git 和實際狀態 | | 偏移偵測 | 無 | 有人手動改了 K8s → ArgoCD 自動恢復 | | Rollback | 重新執行 Pipeline | git revert,ArgoCD 自動同步 |

下一章預告:ArgoCD 應用管理

理解了 GitOps 的核心思想之後,下一章帶你實際操作 ArgoCD——連接你的 Git Repo、建立 Application、觀察自動同步的過程。

會員專屬免費教學

本章節為註冊會員專屬的免費開放內容!請先登入或註冊會員,即可立即解鎖閱讀。

立即登入 / 註冊