在傳統的 CI/CD 流程中(如 Jenkins、GitHub Actions、GitLab CI),我們通常採用 Push(推動)模型:
kubectl apply,將新版本硬塞進 K8s 集群。
這種 Push 模型在規模變大時會暴露出嚴重的問題:
| 痛點 | 說明 |
|---|---|
| 1. 安全憑證外洩風險 | 外部 CI/CD 伺服器必須握有 K8s 集群的高權限憑證(kubeconfig / Token),若 CI 工具被攻破,整個集群將直接淪陷。 |
| 2. 狀態漂移(Configuration Drift) | 如果維運人員在半夜緊急使用 kubectl edit 手動修改了線上配置,Git 倉庫與線上真實狀態就會脫節,且無人知曉。 |
| 3. 缺乏單一事實來源(Single Source of Truth) | 很難只透過看 Git 倉庫就 100% 確定當前線上究竟在跑哪一個版本、掛載了哪些參數。 |
為了解決這些痛點,GitOps 應運而生。
GitOps 是一種現代化的持續交付架構模式,其核心思想可以濃縮成一句話:
「Git 是系統宣告式期望狀態的唯一事實來源(Single Source of Truth)。」
ArgoCD 是目前 CNCF 中最受歡迎、功能最強大的宣告式 GitOps 持續交付工具。
| 元件 | 職責說明 |
|---|---|
| Application Controller | 持續比對 Git 倉庫定義與 K8s 集群即時狀態的常駐控制器。 |
| Repo Server | 負責將 Git 倉庫中的 YAML、Helm 或 Kustomize 解析為標準的 K8s 資源清單。 |
| API Server & Web UI | 提供精美直觀的視覺化介面,即時展示應用拓撲圖、健康狀態與手動觸發同步。 |
建立專屬命名空間並套用官方最新安裝清單:
# 建立 argocd 命名空間
kubectl create namespace argocd
# 套用 ArgoCD 官方安裝清單
kubectl apply -n argocd -f [https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml](https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml)
檢查 ArgoCD 元件是否全數啟動完成(約需 1 至 2 分鐘):
kubectl get pods -n argocd
取得 ArgoCD 的預設登入密碼(帳號為 admin,密碼存放於 Secret 中):
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d; echo
使用端口轉發將 ArgoCD Web 服務映射到本地:
kubectl port-forward svc/argocd-server -n argocd 8080:443
打開瀏覽器訪問 https://localhost:8080:
admin 與剛剛解碼得到的密碼即可順利登入!我們可以直接透過 YAML 宣告一個 ArgoCD Application 物件,告訴它監控官方範例倉庫:
建立 argocd-demo-app.yaml:
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: guestbook-app
namespace: argocd
spec:
project: default
source:
repoURL: [https://github.com/argoproj/argocd-example-apps.git](https://github.com/argoproj/argocd-example-apps.git)
targetRevision: HEAD
path: guestbook # 監控該倉庫下的 guestbook 目錄
destination:
server: [https://kubernetes.default.svc](https://kubernetes.default.svc)
namespace: default
syncPolicy:
automated:
prune: true # 若 Git 刪除檔案,集群內對應資源也自動刪除
selfHeal: true # 若線上有人手動修改,自動強制覆蓋還原成 Git 狀態
套用配置:
kubectl apply -f argocd-demo-app.yaml
回到瀏覽器上的 ArgoCD 儀表板,你會看到神奇的畫面:
guestbook-app 的卡片。Synced(與 Git 完全同步) 且健康度為 Healthy。見證 Self-heal 自癒奇蹟:
如果你在終端機手動把 guestbook 的 Pod 副本數改掉(例如 kubectl scale deployment guestbook-ui --replicas=5),只要過幾秒鐘,ArgoCD 就會偵測到狀態漂移(OutOfSync),並自動把它縮回 Git 定義的原本副本數!
今天我們解鎖了現代雲原生交付的最高準則 GitOps:
完成了雲原生架構中運算、網路、儲存、維運監控、資安與 CI/CD 的全方位實戰後,當我們要把整個架構搬上真實的企業公有雲(AWS EKS / GCP GKE)時,該如何做架構選型與成本估算?
明天 Day 28,我們將進入公有雲實戰篇:「雲端託管 K8s 實戰:AWS EKS vs. GCP GKE 架構比較與架構選型」!