

 **帮助改进此页面** 

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

# 创建应用程序
<a name="argocd-create-application"></a>

应用程序代表目标集群中的部署。每个应用程序都定义了源（Git 存储库）和目标（集群和命名空间）。应用后，Argo CD 会将 Git 存储库中清单指定的资源创建到集群中的命名空间。应用程序通常用于指定工作负载部署，但它们可以管理目标集群中任何可用的 Kubernetes 资源。

## 先决条件
<a name="_prerequisites"></a>
+ 已创建具有 Argo CD 功能的 EKS 集群
+ 已配置存储库访问权限（请参阅[配置存储库访问权限](argocd-configure-repositories.md)）
+ 已注册目标集群（请参阅[注册目标集群](argocd-register-clusters.md)）
+  已配置 `kubectl` 以与集群通信

## 创建基础应用程序
<a name="_create_a_basic_application"></a>

定义从 Git 存储库部署的应用程序：

```
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: guestbook
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://github.com/argoproj/argocd-example-apps
    targetRevision: HEAD
    path: guestbook
  destination:
    name: in-cluster
    namespace: default
```

**注意**  
将 `destination.name` 用于您注册集群时使用的集群名称（如适用于本地集群的 `in-cluster`）。`destination.server` 字段也适用于 EKS 集群 ARN，但为了提高可读性，建议使用集群名称。

应用应用程序：

```
kubectl apply -f application.yaml
```

查看应用程序状态：

```
kubectl get application guestbook -n argocd
```

## 源配置
<a name="_source_configuration"></a>

 **Git 存储库**：

```
spec:
  source:
    repoURL: https://github.com/example/my-app
    targetRevision: main
    path: kubernetes/manifests
```

 **特定的 Git 标签或提交**：

```
spec:
  source:
    targetRevision: v1.2.0  # or commit SHA
```

 **Helm 图表**：

```
spec:
  source:
    repoURL: https://github.com/example/helm-charts
    targetRevision: main
    path: charts/my-app
    helm:
      valueFiles:
      - values.yaml
      parameters:
      - name: image.tag
        value: v1.2.0
```

 **带有来自外部 Git 存储库的值的 Helm 图表**（多源模式）：

```
spec:
  sources:
  - repoURL: https://github.com/example/helm-charts
    targetRevision: main
    path: charts/my-app
    helm:
      valueFiles:
      - $values/environments/production/values.yaml
  - repoURL: https://github.com/example/config-repo
    targetRevision: main
    ref: values
```

有关更多信息，请参阅 Argo CD 文档中的[来自外部 Git 存储库的 Helm 值文件](https://argo-cd.readthedocs.io/en/stable/user-guide/multiple_sources/#helm-value-files-from-external-git-repository)。

 **来自 ECR 的 Helm 图表**：

```
spec:
  source:
    repoURL: oci://account-id.dkr.ecr.region.amazonaws.com/repository-name
    targetRevision: chart-version
    chart: chart-name
```

如果功能角色具有所需的 ECR 权限，则可以直接使用该存储库，无需配置。有关详细信息，请参阅 [配置存储库访问权限](argocd-configure-repositories.md)。

 **来自 CodeCommit 的 Git 存储库**：

```
spec:
  source:
    repoURL: https://git-codecommit.region.amazonaws.com/v1/repos/repository-name
    targetRevision: main
    path: kubernetes/manifests
```

如果功能角色具有所需的 CodeCommit 权限，则可以直接使用该存储库，无需配置。有关详细信息，请参阅 [配置存储库访问权限](argocd-configure-repositories.md)。

 **来自 CodeConnections 的 Git 存储库**：

```
spec:
  source:
    repoURL: https://codeconnections.region.amazonaws.com/git-http/account-id/region/connection-id/owner/repository.git
    targetRevision: main
    path: kubernetes/manifests
```

存储库 URL 格式派生自 CodeConnections 连接 ARN。如果功能角色具有所需的 CodeConnections 权限且已配置连接，则可以直接使用该存储库，无需配置。有关详细信息，请参阅 [配置存储库访问权限](argocd-configure-repositories.md)。

 **Kustomize**：

```
spec:
  source:
    repoURL: https://github.com/example/kustomize-app
    targetRevision: main
    path: overlays/production
    kustomize:
      namePrefix: prod-
```

## 同步策略
<a name="_sync_policies"></a>

控制 Argo CD 如何同步应用程序。

 **手动同步（默认）**：

应用程序需要手动批准才能同步：

```
spec:
  syncPolicy: {}  # No automated sync
```

手动触发同步：

```
kubectl patch application guestbook -n argocd \
  --type merge \
  --patch '{"operation": {"initiatedBy": {"username": "admin"}, "sync": {}}}'
```

 **自动同步**：

检测到 Git 更改时，应用程序会自动同步：

```
spec:
  syncPolicy:
    automated: {}
```

 **自我修复**：

自动还原对集群所作的手动更改：

```
spec:
  syncPolicy:
    automated:
      selfHeal: true
```

启用后，Argo CD 会还原直接对集群所作的任何手动更改，确保 Git 始终是事实来源。

 **修剪**：

自动删除从 Git 中移除的资源：

```
spec:
  syncPolicy:
    automated:
      prune: true
```

**警告**  
修剪将从集群中删除资源。在生产环境中请谨慎使用。

 **组合式自动同步**：

```
spec:
  syncPolicy:
    automated:
      prune: true
      selfHeal: true
    syncOptions:
    - CreateNamespace=true
```

 **重试配置**：

为失败的同步配置重试行为：

```
spec:
  syncPolicy:
    retry:
      limit: 5  # Number of failed sync attempts; unlimited if less than 0
      backoff:
        duration: 5s  # Amount to back off (default unit: seconds, also supports "2m", "1h")
        factor: 2  # Factor to multiply the base duration after each failed retry
        maxDuration: 3m  # Maximum amount of time allowed for the backoff strategy
```

这对于那些必须先创建 CRD 的资源来说尤其有用，或者在处理 kro 实例时也很适用，因为在这些情况下 CRD 可能无法立即获取到。

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

其他同步配置：

 **如果命名空间不存在，请创建一个**：

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

 **跳过缺失资源的试运行**：

在应用依赖于尚未存在的 CRD（例如 kro 实例）的资源时，此功能非常有用：

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

这也可以通过在资源本身上使用标签的方式应用于特定的资源。

 **应用前验证资源**：

```
spec:
  syncPolicy:
    syncOptions:
    - Validate=true
```

 **仅应用不同步项**：

```
spec:
  syncPolicy:
    syncOptions:
    - ApplyOutOfSyncOnly=true
```

## 高级同步功能
<a name="_advanced_sync_features"></a>

Argo CD 支持用于复杂部署的高级同步功能：
+  **同步波次**：使用 `argocd.argoproj.io/sync-wave` 注释控制资源创建顺序
+  **同步钩子**：使用 `argocd.argoproj.io/hook` 注释（PreSync、PostSync、SyncFail）在同步前后运行任务
+  **资源运行状况评测**：针对特定于应用程序的资源进行自定义运行状况检查

有关详细信息，请参阅 Argo CD 文档中的 [Sync Waves](https://argo-cd.readthedocs.io/en/stable/user-guide/sync-waves/) 和 [Resource Hooks](https://argo-cd.readthedocs.io/en/stable/user-guide/resource_hooks/)。

## 忽略差异
<a name="_ignore_differences"></a>

防止 Argo CD 同步由其他控制器管理的特定字段（例如由 HPA 管理的副本）：

```
spec:
  ignoreDifferences:
  - group: apps
    kind: Deployment
    jsonPointers:
    - /spec/replicas
```

有关忽略模式和字段排除项的详细信息，请参阅 Argo CD 文档中的 [Diffing Customization](https://argo-cd.readthedocs.io/en/stable/user-guide/diffing/)。

## 多环境部署
<a name="_multi_environment_deployment"></a>

将同一应用程序部署到多个环境：

 **开发**：

```
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: my-app-dev
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://github.com/example/my-app
    targetRevision: develop
    path: overlays/development
  destination:
    name: dev-cluster
    namespace: my-app
```

 **生产环境**：

```
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: my-app-prod
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://github.com/example/my-app
    targetRevision: main
    path: overlays/production
  destination:
    name: prod-cluster
    namespace: my-app
  syncPolicy:
    automated:
      prune: true
      selfHeal: true
```

## 监控和管理应用程序
<a name="_monitor_and_manage_applications"></a>

 **查看应用程序状态**：

```
kubectl get application my-app -n argocd
```

 **访问 Argo CD 用户界面**：

通过 EKS 控制台打开 Argo CD 用户界面，查看应用程序拓扑、同步状态、资源运行状况和部署历史记录。有关用户界面访问说明，请参阅[使用 Argo CD](working-with-argocd.md)。

 **回滚应用程序**：

可以通过 Argo CD 用户界面、Argo CD CLI，或将应用程序规范中的 `targetRevision` 更新为之前的 Git 提交或标签，回滚到先前版本。

使用 Argo CD CLI：

```
argocd app rollback argocd/my-app <revision-id>
```

**注意**  
使用具有托管功能的 Argo CD CLI 时，请使用命名空间前缀指定应用程序：`namespace/appname`。

有关更多信息，请参阅 Argo CD 文档中的 [argocd 应用程序回滚](https://argo-cd.readthedocs.io/en/stable/user-guide/commands/argocd_app_rollback/)。

## 其他资源
<a name="_additional_resources"></a>
+  [使用 Argo CD 项目](argocd-projects.md)：为多租户环境使用项目组织应用程序
+  [使用 ApplicationSets](argocd-applicationsets.md)：通过模板部署到多个集群
+  [Application Specification](https://argo-cd.readthedocs.io/en/stable/user-guide/application-specification/)：完整的应用程序 API 参考
+  [Sync Options](https://argo-cd.readthedocs.io/en/stable/user-guide/sync-options/)：高级同步配置