Argo CD 概念 - Amazon EKS

帮助改进此页面

要帮助改进本用户指南,请选择位于每个页面右侧窗格中的在 GitHub 上编辑此页面链接。

Argo CD 概念

Argo CD 通过将 Git 视为应用程序部署的单一事实来源,实现了 GitOps。本主题将介绍一个实际示例,然后解释使用适用于 Argo CD 的 EKS 功能时需要了解的核心概念。

开始使用 Argo CD

创建 Argo CD 功能(请参阅创建 Argo CD 功能)后,即可开始部署应用程序。本示例将演示如何注册集群和创建应用程序。

步骤 1:设置

注册集群(必需)

注册要在其中部署应用程序的集群。在本示例中,我们将注册运行 Argo CD 所在的同一集群(可以使用 in-cluster 作为名称,以便与大多数 Argo CD 示例兼容):

# Get your cluster ARN CLUSTER_ARN=$(aws eks describe-cluster \ --name my-cluster \ --query 'cluster.arn' \ --output text) # Register the cluster using Argo CD CLI argocd cluster add $CLUSTER_ARN \ --aws-cluster-name $CLUSTER_ARN \ --name in-cluster \ --project default
注意

有关配置 Argo CD CLI 以使其与 EKS 中的 Argo CD 功能结合使用的信息,请参阅将 Argo CD CLI 与托管功能结合使用

或者,您也可以使用 Kubernetes Secret 注册集群(有关详细信息,请参阅注册目标集群)。

配置存储库访问权限(可选)

此示例使用公有 GitHub 存储库,因此无需配置存储库。对于私有存储库,可使用 AWS Secrets Manager、CodeConnection 或 Kubernetes Secret 配置访问权限(有关详细信息,请参阅配置存储库访问权限)。

对于 AWS 服务(用于 Helm 图表的 ECR、CodeConnections 和 CodeCommit),您可以直接在 Application 资源中引用它们,而无需创建存储库。功能角色必须具有必要的 IAM 权限。有关详细信息,请参阅 配置存储库访问权限

步骤 2:创建应用程序

my-app.yaml 中创建以下应用程序清单:

apiVersion: argoproj.io/v1alpha1 kind: Application metadata: name: guestbook namespace: argocd spec: project: default source: repoURL: https://github.com/argoproj/argocd-example-apps.git targetRevision: HEAD path: guestbook destination: name: in-cluster namespace: guestbook syncPolicy: automated: prune: true selfHeal: true syncOptions: - CreateNamespace=true

应用应用程序:

kubectl apply -f my-app.yaml

应用此应用程序后,Argo CD 会执行以下操作:1. 将应用程序从 Git 同步到集群(初始部署)2. 监控 Git 存储库中的更改 3. 自动将后续更改同步到集群 4. 检测并纠正任何与预期状态的偏差 5. 在用户界面中提供运行状况状态和同步历史记录

查看应用程序状态:

kubectl get application guestbook -n argocd

您也可以使用 Argo CD CLI 或 Argo CD 用户界面(可通过 EKS 控制台中集群的“功能”选项卡访问)查看应用程序。

注意

使用具有托管功能的 Argo CD CLI 时,请使用命名空间前缀指定应用程序:argocd app get argocd/guestbook

注意

destination.name 中使用集群名称(注册集群时使用的名称)。托管功能不支持本地的集群内默认值 (kubernetes.default.svc)。

核心概念

GitOps 原则和源类型

Argo CD 实现了 GitOps,应用程序源是部署的单一事实来源:

  • 声明式:使用 YAML 清单、Helm 图表或 Kustomize 叠加层声明预期状态

  • 版本控制:每次更改都有完整的审计跟踪记录

  • 自动化:Argo CD 持续监控源并自动同步更改

  • 自我修复:检测并纠正预期状态与集群实际状态之间的偏差

支持的源类型

  • Git 存储库:GitHub、GitLab、Bitbucket、CodeCommit(HTTPS、SSH 或 CodeConnections)

  • Helm 注册表:HTTP 注册表(如 https://aws.github.io/eks-charts)和 OCI 注册表(如 public.ecr.aws

  • OCI 映像:包含清单或 Helm 图表的容器映像(如 oci://registry-1.docker.io/user/my-app

得益于这种灵活性,组织能够选择符合其安全性和合规性要求的源。例如,限制集群访问 Git 的组织可以使用 ECR 存放 Helm 图表或 OCI 映像。

有关更多信息,请参阅 Argo CD 文档中的 Application Sources

同步与协调

Argo CD 会持续监控源和集群,以检测并纠正偏差:

  1. 轮询源以查找变更(默认:每 6 分钟一次)

  2. 将预期状态与集群实际状态进行比较

  3. 将应用程序标记为 SyncedOutOfSync

  4. 自动同步更改(如果已配置)或等待手动审批

  5. 同步后监控资源运行状况

同步波次使用注释控制资源创建顺序:

metadata: annotations: argocd.argoproj.io/sync-wave: "0" # Default if not specified

按波次顺序应用资源(数字小的先执行,例如 -1 等负数)。如果未指定,则默认为波次 0。这样您就可以先创建命名空间(波次 -1)等依赖项,再创建部署(波次 0),再创建服务(波次 1)。

自我修复会自动还原手动更改:

spec: syncPolicy: automated: selfHeal: true
注意

托管功能使用基于注释的资源跟踪(而不是基于标签),以便更好地兼容 Kubernetes 规范和其他工具。

有关同步阶段、钩子和高级模式的详细信息,请参阅 Argo CD 同步文档

应用程序运行状况

Argo CD 会监控应用程序中所有资源的运行状况:

运行状况:* 良好:所有资源均按预期运行 * 正在处理:正在创建或更新资源 * 已降级:部分资源运行状况不佳 [容器组(pod)崩溃、任务失败] * 已暂停:应用程序故意暂停 * 缺失:集群中缺少 Git 中定义的资源

Argo CD 内置有针对常见 Kubernetes 资源(Deployment、StatefulSets、Jobs 等)的运行状况检查,并且支持对 CRD 进行自定义运行状况检查。

应用程序运行状况由所有资源决定,如果任何资源为 Degraded,则应用程序为 Degraded

有关更多信息,请参阅 Argo CD 文档中的 Resource Health

多集群模式

Argo CD 支持两种主要的部署模式:

轴辐式:在专用的管理集群(部署到多个工作负载集群)上运行 Argo CD:* 集中控制和可见性 * 在所有集群之间保持策略一致 * 只需一个 Argo CD 实例即可进行管理 * 实行控制面板与工作负载之间的清晰分离

单集群:在每个集群上运行 Argo CD,仅管理该集群的应用程序:* 集群分离(一个故障不会影响其他集群)* 联网更简单(无需跨集群通信)* 初始设置更轻松(无需注册集群)

对于管理许多集群的平台团队,选择轴辐式;对于独立的团队或必须完全隔离的集群,选择单集群。

有关多集群配置的详细信息,请参阅 Argo CD 注意事项

Projects

项目为应用程序提供逻辑分组和访问权限控制:

  • 源限制:限制可以使用哪些 Git 存储库

  • 目标限制:限制可以指向哪些集群和命名空间

  • 资源限制:限制可以部署哪些 Kubernetes 资源类型

  • RBAC 集成:将项目映射到 AWS Identity Center 的用户和组 ID

应用程序同属一个项目。如果未指定,它们将使用 default 项目(默认没有任何限制)。对于生产用途,请编辑 default 项目以限制访问权限,并创建具有适当限制的新项目。

有关项目配置和 RBAC 模式,请参阅配置 Argo CD 权限

同步选项

使用常用选项微调同步行为:

  • CreateNamespace=true:自动创建目标命名空间

  • ServerSideApply=true:使用服务器端应用程序以更好地解决冲突

  • SkipDryRunOnMissingResource=true:当 CRD 尚不存在时跳过试运行(对 kro 实例非常有用)

spec: syncPolicy: syncOptions: - CreateNamespace=true - ServerSideApply=true - SkipDryRunOnMissingResource=true

有关完整的同步选项列表,请参阅 Argo CD 同步选项文档

后续步骤