

 **帮助改进此页面** 

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

# Argo CD 概念
<a name="argocd-concepts"></a>

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

## 开始使用 Argo CD
<a name="_getting_started_with_argo_cd"></a>

创建 Argo CD 功能（请参阅[创建 Argo CD 功能](create-argocd-capability.md)）后，即可开始部署应用程序。本示例将演示如何注册集群和创建应用程序。

### 步骤 1：设置
<a name="_step_1_set_up"></a>

 **注册集群**（必需）

注册要在其中部署应用程序的集群。在本示例中，我们将注册运行 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 与托管功能结合使用](argocd-comparison.md#argocd-cli-configuration)。

或者，您也可以使用 Kubernetes Secret 注册集群（有关详细信息，请参阅[注册目标集群](argocd-register-clusters.md)）。

 **配置存储库访问权限**（可选）

此示例使用公有 GitHub 存储库，因此无需配置存储库。对于私有存储库，可使用 Amazon Secrets Manager、CodeConnection 或 Kubernetes Secret 配置访问权限（有关详细信息，请参阅[配置存储库访问权限](argocd-configure-repositories.md)）。

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

### 步骤 2：创建应用程序
<a name="_step_2_create_an_application"></a>

在 `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`)。

## 核心概念
<a name="_core_concepts"></a>

### GitOps 原则和源类型
<a name="_gitops_principles_and_source_types"></a>

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](https://argo-cd.readthedocs.io/en/stable/user-guide/application-sources/)。

### 同步与协调
<a name="_sync_and_reconciliation"></a>

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

1. 轮询源以查找变更（默认：每 6 分钟一次）

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

1. 将应用程序标记为 `Synced` 或 `OutOfSync` 

1. 自动同步更改（如果已配置）或等待手动审批

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

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

```
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 同步文档](https://argo-cd.readthedocs.io/en/stable/user-guide/sync-waves/)。

### 应用程序运行状况
<a name="_application_health"></a>

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

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

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

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

有关更多信息，请参阅 Argo CD 文档中的 [Resource Health](https://argo-cd.readthedocs.io/en/stable/operator-manual/health/)。

### 多集群模式
<a name="_multi_cluster_patterns"></a>

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

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

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

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

有关多集群配置的详细信息，请参阅 [Argo CD 注意事项](argocd-considerations.md)。

### Projects
<a name="_projects"></a>

项目为应用程序提供逻辑分组和访问权限控制：
+  **源限制**：限制可以使用哪些 Git 存储库
+  **目标限制**：限制可以指向哪些集群和命名空间
+  **资源限制**：限制可以部署哪些 Kubernetes 资源类型
+  **RBAC 集成**：将项目映射到 Amazon Identity Center 的用户和组 ID

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

有关项目配置和 RBAC 模式，请参阅[配置 Argo CD 权限](argocd-permissions.md)。

### 同步选项
<a name="_sync_options"></a>

使用常用选项微调同步行为：
+  `CreateNamespace=true`：自动创建目标命名空间
+  `ServerSideApply=true`：使用服务器端应用程序以更好地解决冲突
+  `SkipDryRunOnMissingResource=true`：当 CRD 尚不存在时跳过试运行（对 kro 实例非常有用）

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

有关完整的同步选项列表，请参阅 [Argo CD 同步选项文档](https://argo-cd.readthedocs.io/en/stable/user-guide/sync-options/)。

## 后续步骤
<a name="_next_steps"></a>
+  [配置存储库访问权限](argocd-configure-repositories.md)：配置 Git 存储库访问权限
+  [注册目标集群](argocd-register-clusters.md)：注册用于部署的目标集群
+  [创建应用程序](argocd-create-application.md)：创建第一个应用程序
+  [Argo CD 注意事项](argocd-considerations.md)：EKS 特定模式、Identity Center 集成和多集群配置
+  [Argo CD 文档](https://argo-cd.readthedocs.io/en/stable/)：全面的 Argo CD 文档，包括同步钩子、运行状况检查和高级模式