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 數量過多 增加資源限制

線上工具推薦


總結:GitOps 以 Git 為唯一可信源,透過「拉模式」部署解決了傳統 CI/CD 的安全和一致性問題。ArgoCD 是 2026 年最成熟的 Kubernetes GitOps 工具,配合 Argo Rollouts 實現漸進式交付、Sealed Secrets 管理 Secret、ApplicationSet 管理多叢集。

本站提供瀏覽器本地工具,免註冊即可試用 →

#GitOps#ArgoCD#Kubernetes#持续交付#Argo Rollouts#Sealed Secrets#多集群#渐进式交付