1.1 ArgoCD 概览
- Argo项目2017年由Applatix公司成立,2018年被Intuit收购,之后,BlackRock为Argo项目贡献了Argo Events这一项目;
- Argo所有组件都通过kubernetes CRD实现
- Argo生态目前主要由四个子项目组成
- Argo Workflows :第一个Argo项目
- Argo Events :k8s上基于事件的依赖管理器,用于触发k8s中Argo工作流和其他操作
- Argo CD: 支持GitOps范式的声明式kubernetes资源管理
- Argo Rollouts: ArgoCD的高级交付策略工具,支持声明式渐进式交付策略,例如canary,blue-green等
1.1.1 ArgoCD简介
- 将应用程序部署到kubernetes之上的GitOps工具
- 核心组件:Application Controller及相关的一组CRD
- 基础工作模型
- 以特定Repo(配置仓库)为应用程序部署和管理的唯一可信源,该Repo负责定义Application大人期望状态;
- Application Controlller负责将repo定义的Application运行于一个特定目标i的Kubernetes Cluster上;
- Application Controller持续监视,对比Application的期望状态和实际状态,并确保实际状态和期望状态一致
1.1.2 ArgoCD主要功能
- 可协同使用各种配置管理工具(如ksonnet/jsonnet、Helm和kustomize)确保应用程序的真实状态与GitOps中定义的期望状态一致
- 将应用程序部署到指定的目标环境
- 持续监控已部署的应用程序
- 基于web和CLI的操作接口,以及应用程序可视化
- 部署或回滚到gitrepo仓库中提交的应用程序任何状态
- preSync、Sync、PostSync Hooks以支持复杂的应用程序部署策略,例如:blue/green,canary等
- SSO集成
- WebHooks集成那个:与github,gitlab等
- 可以独立使用,也可以作为pipeline的一部分使用,例如与Argo Workflow,Jenkins 以及GitLab CI等配和使用
1.1.3 核心工作模型
-
ArgoCD的两个核心概念为Applicatio和Project,他们可分别基于Application CRD和AppProject CRD创建
-
Application从本质上讲,包含如下两部分:
-
一组在kubernetes上部署和运行某个应用的资源配置文件,这组资源相关的source和destination:
- source: 定义从何处获取配置文件,包括repoUrL和配置文件所在的目录
- destination:定义这组资源的配置文件中定义的对象应该创建运行于何处。
-
支持的配置管理工具
Helm、Kustomize、Jsonnet
-
-
Application还存在两个非常重要的属性:Sync Status和Health Status:
-
Sync Status: Application的实际状态与Git Repo中定义的期望状态是否一致;Synced为一致,OutOfSync为不一致
-
Health Status:Application的健康状态,是各资源的健康状态的聚合信息
Healthy :健康
Processing:处于尝试转为健康状态的进程中
Degraded:降级
Missing:缺失,即在gitrepo中存在资源定义,但并未完成部署
-
-
Project
- 能够将Application进行分组的逻辑组件
- 主要用于Application彼此隔离,并且支持在project内进行细粒度的权限管控
- 支持为内部Application上的Source和Destionation分别指定各自的黑名单
1.1.4 ArgoCD架构
1.1.5 ArgoCD组件
-
ArgoCD API Server: 为Web UI、CLI,以及相关的CI/CD系统提供服务,相关功能包括:
- 管理应用程序并报告其状态
- 调用并发起应用程序的特定操作:例如sync、rollback以及用户其他行为
- 管理repo和cluster相关的凭据
- 将身份认证与授权功能委派给外部IdP服务
- 强制实施RBAC
- 监听及转发Git Webhook相关的事件
-
Repository Server
- 内部服务,用于为相关的Git仓库维护一个本地缓存
- 负责生成kubernetes的资源配置
-
Application Controller
- 持续监控正在运行的应用程序,并将其当前的活动状态与定义在GitRepo中的期望状态进行比较
- 确保活动状态不断逼近或等同于期望状态
-
ApplicationSet Controller
- 以模板化形式自动生成由ArgoCD管理的应用程序
- 支持从多个不同的角度构建模板,例如不同的Git Repo,或者不同的kubernetes Clusterdeng
-
Notification Controller
- 持续监控ArgoCD管理的Application,并支持通过多种不同的方式将其状态变化通知给用户
- 支持Trigger和Template】
-
Redis和Dex-Server
- Redis负责提供缓存服务
- Dex-Server则用于提供in-memory Database
-
Argo Rollouts
- 可选组件,需要单独部署,由一个控制器和一组CRD组成
- 与Ingress Controller和ServiceMesh集成,为Application提供高级部署功能,如blue-gree、canary、canary analysis和渐进式交付