Argo CD 概念 - Amazon EKS
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

帮助改进此页面

要帮助改进本用户指南,请选择位于每个页面右侧窗格中的在 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 存储库,因此无需配置存储库。对于私有存储库,可使用 Amazon Secrets Manager、CodeConnection 或 Kubernetes Secret 配置访问权限(有关详细信息,请参阅配置存储库访问权限)。

对于 Amazon 服务(用于 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 (argocd app get guestbook) 或 Argo CD 用户界面(可通过 EKS 控制台中集群的“功能”选项卡访问)查看应用程序。

注意

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 等负数)。这样您就可以先创建命名空间(波次 -1)等依赖项,再进行部署(波次 0)。

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

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 集成:将项目映射到 Amazon Identity Center 的用户和组 ID

所有应用程序同属一个项目。如果未指定,将使用 default 项目(没有任何限制)。对于生产用途,请创建具有适当限制的项目。

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

存储库组织方式

多数团队采用基于目录的组织方式,配合 Kustomize 叠加层或 Helm 值文件来管理不同环境:

my-app/ ├── base/ │ ├── deployment.yaml │ └── service.yaml └── overlays/ ├── dev/ │ └── kustomization.yaml ├── staging/ │ └── kustomization.yaml └── prod/ └── kustomization.yaml

这种方法将所有环境配置集中于单个存储库,同时保持了灵活性与清晰度。

有关详细的存储库结构模式和最佳实践,请参阅 Argo CD 最佳实践文档

同步选项

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

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

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

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

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

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

后续步骤