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、觀察自動同步的過程。