argo
概述
Argo CD 是用于 Kubernetes 的声明式 GitOps 持续交付工具。
核心概念
- 遵循 GitOps 模式:以 Git 仓库作为定义所需应用程序状态的真实来源,将 Kubernetes 配置清单等存储在 Git 仓库中,通过对 Git 仓库的操作来管理应用程序的部署和更新。
- 声明式部署:用户只需在 Git 仓库中声明应用程序的期望状态,Argo CD 会自动将应用程序部署到指定的目标环境中,确保实际运行状态与期望状态一致。
工作原理
- Kubernetes 控制器:Argo CD 被实现为 Kubernetes 控制器,它持续监视正在运行的应用程序,将当前的活动状态与 Git 存储库中指定的所需目标状态进行比较。当已部署应用程序的运行状态偏离目标状态时,Argo CD 会将其视为 OutOfSync,并报告和可视化差异,同时提供自动或手动方式将实时状态同步回所需目标状态的功能。
- 跟踪更新:应用程序部署可以跟踪 Git 提交时对分支、标签的更新,或固定到清单的特定版本,从而实现对应用程序版本的精确控制。
主要特性
- 支持多种配置管理工具:支持原始的 k8s 配置、Kustomize、Helm、Jsonnet 等多种配置管理/模板工具,方便用户根据不同的项目需求选择合适的配置管理方式。
- 多集群管理:能够管理和部署到多个集群,实现对多个 Kubernetes 集群的统一管理和应用程序部署。
- 身份认证与授权:支持 SSO 集成,包括 OIDC、OAuth2、LDAP、SAML 2.0、GitHub、GitLab、Microsoft、LinkedIn 等,同时提供多租户和 RBAC 授权策略,确保系统的安全性和访问控制。
- 自动配置漂移检测和可视化:可以自动检测应用程序配置的漂移情况,并通过 Web UI 进行可视化展示,让用户及时了解应用程序的状态变化。
- 丰富的操作功能:提供自动或手动将应用程序同步到所需状态的功能,支持在任何地方回滚/滚动到 Git 存储库中提交的任何应用程序配置,还具备应用程序资源的健康状况分析、审核跟踪等功能。
- Web UI 和 CLI:提供 Web UI,提供应用程序活动的实时视图,方便用户进行可视化操作和管理;同时提供 CLI,用于自动化和 CI 集成,满足不同用户的操作需求。
应用场景
- 云原生应用部署:适用于云原生应用的持续交付,帮助开发团队快速、高效地将应用程序部署到 Kubernetes 集群中,并实现对应用程序生命周期的自动化管理。
- 多环境部署:可以轻松管理不同环境(如开发、测试、生产等)中的应用程序部署,确保应用程序在各个环境中的一致性和稳定性。
- 复杂应用部署:通过 PreSync、Sync、PostSync 钩子等功能,支持复杂的应用程序部署场景,如蓝/绿发布和金丝雀升级等,降低应用程序升级的风险。
Application
Application(应用程序)是 Argo CD 中用于表示和管理部署到 Kubernetes 集群的应用的核心概念。
- 定义和配置:一个 Argo CD 的 Application 是通过 YAML 文件进行定义的,该文件描述了应用程序的基本信息,如名称、所在的命名空间、关联的 Git 仓库、目标 Kubernetes 集群、以及要部署的 Kubernetes 资源清单的路径等。例如:
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: my-app
namespace: argocd
spec:
destination:
namespace: my-app-namespace
server: https://my-kubernetes-cluster-api-server
source:
path: manifests/my-app
repoURL: https://github.com/my-org/my-app-repo.git
targetRevision: main
project: default
上述配置定义了一个名为 my-app 的应用程序,将部署到指定的 Kubernetes 集群的 my-app-namespace 命名空间中,应用程序的资源清单位于指定 Git 仓库的 manifests/my-app 路径下,并且跟踪 main 分支的最新更改。
- 同步和部署:一旦 Application 被创建并提交到 Argo CD,Argo CD 会定期检查关联的 Git 仓库,查看是否有新的更改。如果发现有更新,Argo CD 会自动将最新的资源清单应用到目标 Kubernetes 集群,实现应用程序的同步和部署。用户也可以手动触发同步操作,以立即应用最新的更改。
- 状态监控和可视化:Argo CD 提供了直观的用户界面,用于监控 Application 的状态。用户可以查看应用程序的部署历史、当前状态(如是否已成功部署、是否存在错误等)、以及与目标状态的差异。Argo CD 还会显示每个 Kubernetes 资源的详细信息,帮助用户快速识别和解决问题。
- 滚动更新和回滚:对于应用程序的更新,Argo CD 支持滚动更新策略,逐步将新版本的应用程序部署到集群中,同时监控应用的健康状况。如果在更新过程中出现问题,Argo CD 允许用户轻松地回滚到之前的版本,恢复应用程序的稳定状态。
- 多环境管理:Argo CD 可以管理多个环境(如开发、测试、生产等)中的应用程序。通过在不同的 Application 配置中指定不同的目标集群和环境特定的配置,用户可以在不同环境之间轻松地推广应用程序,同时确保每个环境的配置和部署策略符合其特定需求。
使用多个应用源
比如可以将 chart 和 values 文件分开
apiVersion: argoproj.io/v1alpha1
kind: Application
spec:
sources:
- repoURL: 'https://prometheus-community.github.io/helm-charts'
chart: prometheus
targetRevision: 15.7.1
helm:
valueFiles:
- $values/charts/prometheus/values.yaml
- repoURL: 'https://git.example.com/org/value-files.git'
targetRevision: dev
ref: values
子文档
- [Argo cli用法](./Argo cli用法.md)