本文发布于Cylon的收藏册,转载请著名原文链接~


Argo组件

  • API Server
  • Repository Server
  • Application Controller

API Server:一个 gRPC/REST 服务器,提供了 “Web UI”、“CLI” 和 “CI/CD” 使用的 API

  • 应用管理和状态报告
  • 调用应用操作(例如同步、回滚、用户定义的操作)
  • 存储库和 Cluster credential 管理(作为 kubernetes secret 存储)
  • 为外部提供身份认证和代理授权功能
  • RBAC 试试
  • Git webhook 事件的 listener/forwarder

Repository Server:内部服务,用于维护 git 中的应用清单 (manifests) 的本地缓存。负责接收生成和返回 kubernetes 清单

  • 仓库URL
  • revision (commit, tag, branch)
  • APP PATH
  • 模板特定的参数

Application Controller:Kubernetes controller,主要做的工作是持续监控运行的 Application,并于当前实时状态和目标所需状态进行对比(与 Kubernetes Controller 功能是相同的),并且不仅仅是 KC 还会和存储库中指定目标状态进行比较,检测到 OutOfSync 状态将进行纠正。

Argo 架构

Argo CD 时最常见的三种架构:单实例方案, 集群级方案,以及折衷方案 (compromise between the two)。

单实例方案

单实例 (One instance) 是指 “通过一个实例 (Argo) 来管理多个集群”,这是一种比较流行的方式,这种方式最大的特点是在用户角度看,是用户对 Application 有单一的视图层。单一的 “视图层” 为用户简化了 API 的集成与 CLI 的登录的配置与体验;为管理员提供了一个统一配置,如 “密钥”, “CRD” 等。

图:单实例集群架构图
Source:https://akuity.io/blog/argo-cd-architectures-explained/

单实例方案的优缺点如下:

  • 跨所有集群的单一视图层。
  • 统一控制平面,简化安装和维护。
  • 单实例可轻松集成 API/CLI。

缺点:

  • 单点故障。
  • 扩展需要调整各个组件。
  • 需要一个单独的“管理”集群 (Kubernetes)。
  • 所有集群的 “集群凭证” (kubeconfig) 存储在单集群上,掌握了管理集群或Argo实例,等于可以直接访问所有集群
  • 单独的 Application Controller 去管理所有集群的资源,AC 压力较大
  • Argo CD 和集群之间存在大量网络流量。

集群级别方案

集群级别方案 (separation instance for cluster) 是指将 Argo 分到每一个集群内,这样可以简化安全与控制难度;为什么说这种方式相对安全,因为在这种模式下, Argo CD 在集群内运行,这意味着不需要将集群 API 暴露给外部控制平面。另外也没有任何中心化实例包含了所有集群的凭证 (kubeconfig),这种模式下就将 “安全域” 限制为 Argo CD 所在集群,而不是共享(中心化)。

每个集群的 Argo CD 实例图。

图:SIC集群架构
Source:https://akuity.io/blog/argo-cd-architectures-explained/

集群级方案的优缺点如下:

  • 每个集群一个 Argo CD workload
  • 不需要外部访问,消除 Argo CD 离开集群的流量
  • 一个集群中断不会引起其他集群的正常工作
  • 集群安全凭证仅限制该集群自己
  • 减少了网络流量的成本(集群内使用内外,跨集群可能需要公网流量)
  • 安全域与故障半径得到控制

缺点:

  • 维护成本增加,需要维护不同配置的多个实例,或相同配置的多个实例
  • 集群规模不同,Argo 实例也不同
  • API/CLI 需要分别绑定集群
  • 在计算资源的总成本相对增加

折衷方案 - 根据逻辑组划分

这个方案是根据 “单实例” 与 “SIC” 两个方案的优缺点进行折衷的一种方式,是将多个 Kubernetes 集群按照 “逻辑组” 划分,分组可以按团队, 区域或环境进行。只要是对你有意义的。此架构非常有用。它消除了维护过多 Argo CD 的成文。对于实例管理的所有集群来说,RBAC, AppProject 和其他配置可能是相似的。因此,与为每个集群运行一个实例相比,减少了配置重复。

图:折衷方案架构图
Source:https://akuity.io/blog/argo-cd-architectures-explained/

折衷方案的优缺点如下:

  • 按组分配 Argo 负载
  • 一个集群的中断不会影响其他分组
  • 可以控制对外网络流量,进一步缩小了凭证等信息的安全域,以及限制了问题半径
  • 减少配置

缺点:

  • 有相对的维护成本
  • 也需要单独的“管理集群”

Reference

[1] A Comprehensive Overview of Argo CD Architectures – 2023

[2] How many do you need? - Argo CD Architectures Explained

本文发布于Cylon的收藏册,转载请著名原文链接~

链接:https://www.oomkill.com/2023/10/ch01-argo-beginning/

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」 许可协议进行许可。