GitOps 與 ArgoCD 生產實踐:2026年完整部署自動化指南
DevOps
2026年,為什麼 GitOps 是 Kubernetes 部署的標準
Kubernetes 部署經歷了從手動 kubectl 到 CI/CD Pipeline 再到 GitOps 的演進。2026年,GitOps 已經成為 Kubernetes 部署的事實標準。核心原因很簡單:Git 是唯一可信源(Single Source of Truth)。
| 特性 | 傳統 CI/CD | GitOps |
|---|---|---|
| 部署模式 | Push(推) | Pull(拉) |
| 狀態源 | CI 系統 | Git 儲存庫 |
| 叢集憑證 | CI 系統持有 | 叢集內部持有 |
| 狀態漂移 | 難以偵測 | 自動偵測和修復 |
| 稽核追蹤 | CI 日誌 | Git 歷史 |
| 回滾方式 | 重新執行 Pipeline | git revert |
| 多叢集 | 複雜 | 統一管理 |
ArgoCD 架構與核心概念
┌─────────────────────────────────────────────────────┐
│ Git Repository │
└──────────────────────┬──────────────────────────────┘
│ git clone/pull
┌──────────────────────▼──────────────────────────────┐
│ ArgoCD Controller │
│ ┌──────────────┐ ┌──────────────┐ │
│ │ Repo Server │ │ App Controller│ │
│ └──────────────┘ └──────────────┘ │
└──────────────────────┬──────────────────────────────┘
│ kubectl apply
┌──────────────────────▼──────────────────────────────┐
│ Kubernetes Cluster │
└─────────────────────────────────────────────────────┘
完整安裝與設定
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/v2.13.0/manifests/install.yaml
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d
kubectl port-forward svc/argocd-server -n argocd 8080:443
第一個 Application
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: my-app
namespace: argocd
spec:
project: default
source:
repoURL: https://github.com/myorg/my-app-manifests.git
targetRevision: main
path: overlays/production
destination:
server: https://kubernetes.default.svc
namespace: my-app
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true
多叢集管理
argocd cluster add production-cluster --name prod-us-east
argocd cluster add production-cluster-eu --name prod-eu-west
ApplicationSet 自動化多叢集
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
name: my-app-multi-cluster
namespace: argocd
spec:
generators:
- clusters:
selector:
matchLabels:
environment: production
template:
metadata:
name: 'my-app-{{name}}'
spec:
project: production
source:
repoURL: https://github.com/myorg/my-app-manifests.git
targetRevision: main
path: overlays/production
destination:
name: '{{name}}'
namespace: my-app
漸進式交付:Argo Rollouts
kubectl create namespace argo-rollouts
kubectl apply -n argo-rollouts -f https://github.com/argoproj/argo-rollouts/releases/download/v1.7.0/install.yaml
apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
name: my-app
spec:
replicas: 10
strategy:
canary:
steps:
- setWeight: 10
- pause: { duration: 5m }
- setWeight: 20
- analysis:
templates:
- templateName: success-rate
- setWeight: 50
- pause: { duration: 10m }
- setWeight: 100
canaryService: my-app-canary
stableService: my-app-stable
selector:
matchLabels:
app: my-app
template:
spec:
containers:
- name: my-app
image: myorg/my-app:v2.0.0
Secret 管理:Sealed Secrets
kubectl apply -f https://github.com/bitnami-labs/sealed-secrets/releases/download/v0.27.0/controller.yaml
kubectl create secret generic my-app-secret \
--from-literal=db-password='super-secret-password' \
--namespace my-app --dry-run=client -o yaml > secret.yaml
kubeseal --format yaml < secret.yaml > sealed-secret.yaml
ArgoCD vs Flux vs Spinnaker
| 維度 | ArgoCD | Flux | Spinnaker |
|---|---|---|---|
| UI | 優秀 | 基礎 | 優秀 |
| 多叢集 | 原生 | 原生 | 原生 |
| 漸進式交付 | Argo Rollouts | Flagger | 原生 |
| 學習曲線 | 中 | 低 | 高 |
| 適合場景 | 中大型團隊 | 小型團隊 | 大型企業 |
5 個常見陷阱
1. 自動同步導致生產事故
生產環境建議使用手動同步 + 審批。
2. 忽略 Resource Hook
ArgoCD 的 Resource Hook 如果不正確處理,會導致部署流程異常。
3. 大量 Application 導致效能問題
單個 ArgoCD 實例管理超過 100 個 Application 時,可能遇到效能瓶頸。
4. Sealed Secrets 憑證未備份
控制器憑證如果遺失,所有已加密的 Secret 都無法解密。
5. Git 儲存庫結構不合理
建議按 clusters/helm-charts/kustomize/argocd 組織目錄。
10 個錯誤排查
| # | 錯誤現象 | 可能原因 | 排查方法 |
|---|---|---|---|
| 1 | Application 始終 OutOfSync | Git 變更未觸發同步 | 檢查 Webhook 和 syncPolicy |
| 2 | Sync 失敗 | 清單格式錯誤 | argocd app diff my-app |
| 3 | Image 無法拉取 | 私有倉庫憑證缺失 | 設定 imagePullSecrets |
| 4 | 多叢集連線失敗 | RBAC 權限不足 | 檢查 ServiceAccount |
| 5 | Helm Chart 渲染錯誤 | values 檔案引用問題 | helm template 本地驗證 |
| 6 | 資源被意外刪除 | prune: true 誤刪 | 檢查 syncPolicy.prune |
| 7 | Rollout 卡住 | Analysis 指標未達標 | kubectl argo rollouts get rollout |
| 8 | SealedSecret 解密失敗 | 憑證不匹配 | 確認控制器憑證一致 |
| 9 | Git 連線逾時 | 網路策略限制 | 檢查 NetworkPolicy |
| 10 | 記憶體不足 | Application 數量過多 | 增加資源限制 |
線上工具推薦
- JSON 格式化:/zh-TW/json/format
- Base64 編碼:/zh-TW/encode/base64
- 雜湊計算:/zh-TW/encode/hash
總結:GitOps 以 Git 為唯一可信源,透過「拉模式」部署解決了傳統 CI/CD 的安全和一致性問題。ArgoCD 是 2026 年最成熟的 Kubernetes GitOps 工具,配合 Argo Rollouts 實現漸進式交付、Sealed Secrets 管理 Secret、ApplicationSet 管理多叢集。
本站提供瀏覽器本地工具,免註冊即可試用 →
#GitOps#ArgoCD#Kubernetes#持续交付#Argo Rollouts#Sealed Secrets#多集群#渐进式交付