Argo CD 是什麼?
Argo CD是一個用於持續交付(Continuous Delivery)的工具,用於自動化應用程序的部署、更新和操作。
它是基於Kubernetes的開源項目,旨在幫助團隊更有效地管理和交付應用程序。
Argo CD允許開發人員和運維團隊使用 GitOps 模型來管理基礎設施和應用程序的狀態。
GitOps是一種軟體開發實踐,它將Git作為單一可信源來管理應用程序的狀態和配置。
透過將應用程序的狀態描述為Git存儲庫中的一組聲明,Argo CD可以根據這些聲明自動驅動應用程序的部署和更新。
前言
這部分會分享 Argo CD 的中心思想、架構與功能。
中心思想 GitOps pattern
- Argo CD 遵循 GitOps 模式,即以 Git repositories 作為唯一識別 application 狀態的來源
Argo CD 作為 kubernetes controller
-
Argo CD 作為 kubernetes controller,持續偵測運行中的 application,並比較現在狀態與目標狀態!
-
可用以下幾種方式建立 Argo CD 的 kubernetes manifest
Argo CD architecture
架構圖

有哪些 Components?
-
API Server
- 可以被 Web UI, CLI, 以及 CI/CD systems 介接的 gRPC/REST server
- 它有幾項責任
- 應用管理與
狀態回報 - 處理
application 的操作,如 sync, rollback, 其他使用者定義的動作 - 管理
credential,如 K8s secrets - 管理驗證與權限
- 執行
RBAC Git webhook 事件的傾聽者/傳送者
- 應用管理與
-
Repository Server
- 管理本地 Git repository 的
快取 (Cache) - 當有新增以下參數,需建立 Kubernetes manifests
- repository URL
- revision (commit, tag, branch)
- application path
- template specific settings: parameters, helm values.yaml
- 管理本地 Git repository 的
-
Application Controller
- 屬於
Kubernetes controller - 持續偵測運行中的 application,並比較
現在狀態與目標狀態,若偵測到OutOfSync則會選擇性採取正確動作 - 此元件負責為生命週期事件(PreSync, Sync, PostSync)去調用使用者定義的 hooks
- 屬於
Features
根據提供的功能,可以將其分為以下幾項:
- 部署和管理功能:
- 自動部署應用程序到指定的目標環境
- 支持多個配置管理/模板工具(Kustomize、Helm、Jsonnet、純YAML)
- 能夠管理和部署到多個集群
- 身份驗證和安全功能:
- SSO集成(OIDC、OAuth2、LDAP、SAML 2.0、GitHub、GitLab、Microsoft、LinkedIn)
- 多租戶和RBAC策略用於授權
- 回滾和配置管理功能:
- 回滾/任意回滾到Git存儲庫中提交的任何應用程序配置
- 應用程序資源的健康狀態分析
- 自動配置漂移檢測和可視化
- 自動或手動將應用程序同步到所需狀態
- 用戶界面和集成功能:
- 提供實時應用程序活動的Web UI
- 命令行界面(CLI)用於自動化和CI集成
- Webhook集成(GitHub、BitBucket、GitLab)
- 用於自動化的訪問令牌(Access token)
- 應用程序升級和監控功能:
- 支持 PreSync、Sync、PostSync 鉤子以支持複雜的應用程序升級(例如藍/綠和金絲雀升級)
- 應用程序事件和API調用的軌跡
- Prometheus metrics
- 可覆蓋 Helm 參數的參數覆蓋
支援的功能繁多,列出一部分。每一版或者會有些不同,建議可參考官方文件
這些功能可幫助團隊實現自動化部署、安全驗證、配置管理、回滾、監控等在持續交付環境中必要的任務。
心得
-
Argo CD 在 March 26, 2020 被 CNCF 列入,CNCF 的專案們整合程度越來越高,相信未來的多數公司的 CICD、監控、Log、角色權限控管、資料庫等會以 CNCF 專案為主。
-
若想知道如何在 docker desktop 建立 Argo CD,請參考文章【使用 Docker Desktop 運行 Argo CD】
參考資料
- Argo CD
- Argo CD Components
- Kubernetes Controllers
- getting started guide
- user oriented documentation
- Developer oriented documentation
- the upgrade guide
最後,若喜歡我的分享,可以免費幫我按讚,是對我最大的鼓勵!