帮助改进此页面
要帮助改进本用户指南,请选择位于每个页面右侧窗格中的在 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 会持续监控源和集群,以检测并纠正偏差:
-
轮询源以查找变更(默认:每 6 分钟一次)
-
将预期状态与集群实际状态进行比较
-
将应用程序标记为
Synced或OutOfSync -
自动同步更改(如果已配置)或等待手动审批
-
同步后监控资源运行状况
同步波次使用注释控制资源创建顺序:
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 同步选项文档
后续步骤
-
配置存储库访问权限:配置 Git 存储库访问权限
-
注册目标集群:注册用于部署的目标集群
-
创建应用程序:创建第一个应用程序
-
Argo CD 注意事项:EKS 特定模式、Identity Center 集成和多集群配置
-
Argo CD 文档
:全面的 Argo CD 文档,包括同步钩子、运行状况检查和高级模式