什麼是 Argo CD?
Argo CD 是一個宣告式的 GitOps 持續交付工具,用於 Kubernetes 叢集。它透過持續監控 Git 倉庫中的 Kubernetes 資源配置檔案,將這些配置自動應用到指定的 Kubernetes 叢集中,確保叢集的實際狀態與倉庫中的配置保持一致。Argo CD 支援各種 Kubernetes 清單格式,如 Kustomize、Helm Charts、Ksonnet、YAML 和 JSON,允許你透過 Git 倉庫管理和部署 Kubernetes 資源。
Argo CD 的好處
-
宣告式管理:Argo CD 採用宣告式的管理方式,開發者只需在 Git 倉庫中定義好應用的期望狀態,Argo CD 就會自動將叢集的實際狀態與之同步。這樣可以減少人為錯誤,並使配置管理更加清晰和可審計。
-
GitOps 工作流:Argo CD 將 Git 倉庫作為配置管理的唯一真理來源(Source of Truth),實現了 GitOps 的最佳實踐。每一次應用的部署或更新都透過提交程式碼和合並請求觸發,從而保證了自動化和稽核跟蹤。
-
持續同步和自愈:Argo CD 能夠持續監控 Kubernetes 叢集中的資源狀態,並在檢測到任何偏離期望狀態的情況時自動糾正,使叢集的狀態始終與 Git 倉庫中的配置一致。
-
多叢集支援:Argo CD 可以管理多個 Kubernetes 叢集,使得跨叢集的應用部署和管理更加容易。
-
細粒度訪問控制:Argo CD 提供了細粒度的訪問控制機制,允許基於角色的訪問控制(RBAC)以及透過 SSO 整合來控制對特定專案和應用的訪問許可權。
Argo CD 與 Jenkins 的對比
功能 | Argo CD | Jenkins |
---|---|---|
架構 | 專注於 Kubernetes 叢集的宣告式部署 | 通用的 CI/CD 工具,支援多種程式語言和環境 |
GitOps 支援 | 內建支援 GitOps 工作流,Git 是唯一的真理來源 | 需要透過外掛或自定義指令碼來支援 GitOps 工作流 |
部署自動化 | 自動同步 Kubernetes 資源配置,持續保持叢集一致性 | 透過流水線(pipeline)手動配置部署過程 |
可觀測性和回滾 | 內建監控和自動回滾功能 | 透過第三方工具或外掛實現 |
外掛支援 | 提供基礎功能,無需大量外掛 | 透過外掛擴充套件功能,外掛種類豐富 |
CI/CD 整合 | 專注於 CD 部分,通常與 Argo Workflows 等其他工具整合使用 | 既支援 CI 又支援 CD,整合度較高 |
使用 Argo CD 部署一個服務
接下來我們將展示如何使用 Argo CD 部署一個簡單的服務。假設我們要在 Kubernetes 叢集中部署一個 Nginx 服務。
1. 安裝 Argo CD
首先,我們需要在 Kubernetes 叢集中安裝 Argo CD:
kubectl create namespace argocd kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
安裝完成後,可以透過以下命令獲取 Argo CD API Server 的外部訪問地址:
kubectl get svc -n argocd
2. 訪問 Argo CD
你可以透過 port-forward 訪問 Argo CD 的 Web 介面:
kubectl port-forward svc/argocd-server -n argocd 8080:443
然後在瀏覽器中訪問 https://localhost:8080
。預設的使用者名稱是 admin
,可以透過以下命令獲取初始密碼:
kubectl get secret argocd-initial-admin-secret -n argocd -o jsonpath="{.data.password}" | base64 -d
3. 建立 Git 倉庫並推送配置
在 GitHub 或其他 Git 服務上建立一個新倉庫,並將以下內容儲存為 nginx-deployment.yaml
檔案,推送到你的 Git 倉庫中。
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.14.2 ports: - containerPort: 80 --- apiVersion: v1 kind: Service metadata: name: nginx-service spec: selector: app: nginx ports: - protocol: TCP port: 80 targetPort: 80
4. 使用 YAML 檔案定義 Argo CD 應用
建立一個新的 YAML 檔案 argo-nginx-app.yaml
,並將以下內容新增到其中:
apiVersion: argoproj.io/v1alpha1 kind: Application metadata: name: nginx-app namespace: argocd spec: project: default source: repoURL: '<YOUR_GIT_REPOSITORY_URL>' targetRevision: HEAD path: '<YOUR_APP_PATH>' destination: server: https://kubernetes.default.svc namespace: default syncPolicy: automated: prune: true selfHeal: true
將 <your-username>
和 <your-repo>
替換為你的 GitHub 使用者名稱和倉庫名。
5. 應用 YAML 檔案
透過以下命令將 Argo CD 應用的定義檔案應用到 Kubernetes 叢集:
kubectl apply -f argo-nginx-app.yaml
6. 驗證部署
回到 Argo CD 的 Web 介面,你應該能看到名為 nginx-app
的應用。如果狀態為 “Synced”,說明部署已經成功。
你也可以透過以下命令在 Kubernetes 中驗證 Nginx 服務是否正常執行:
kubectl get pods -l app=nginx kubectl get svc nginx-service
總結
Argo CD 是一個強大的 Kubernetes 持續交付工具,能夠簡化和自動化 Kubernetes 叢集中的應用管理。透過 GitOps 工作流,Argo CD 使得應用部署和配置更具透明性和可追溯性。與 Jenkins 等傳統 CI/CD 工具相比,Argo CD 更專注於 Kubernetes 環境,尤其適合微服務和容器化應用的持續交付。