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

帮助改进此页面

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

创建应用程序

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

先决条件

创建基础应用程序

定义从 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

源配置

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 值文件

来自 ECR 的 Helm 图表

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

如果功能角色具有所需的 ECR 权限,则可以直接使用该存储库,无需配置。有关详细信息,请参阅 配置存储库访问权限

来自 CodeCommit 的 Git 存储库

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

如果功能角色具有所需的 CodeCommit 权限,则可以直接使用该存储库,无需配置。有关详细信息,请参阅 配置存储库访问权限

来自 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 权限且已配置连接,则可以直接使用该存储库,无需配置。有关详细信息,请参阅 配置存储库访问权限

Kustomize

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

同步策略

控制 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 可能无法立即获取到。

同步选项

其他同步配置:

如果命名空间不存在,请创建一个

spec: syncPolicy: syncOptions: - CreateNamespace=true

跳过缺失资源的试运行

在应用依赖于尚未存在的 CRD(例如 kro 实例)的资源时,此功能非常有用:

spec: syncPolicy: syncOptions: - SkipDryRunOnMissingResource=true

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

应用前验证资源

spec: syncPolicy: syncOptions: - Validate=true

仅应用不同步项

spec: syncPolicy: syncOptions: - ApplyOutOfSyncOnly=true

高级同步功能

Argo CD 支持用于复杂部署的高级同步功能:

  • 同步波次:使用 argocd.argoproj.io/sync-wave 注释控制资源创建顺序

  • 同步钩子:使用 argocd.argoproj.io/hook 注释(PreSync、PostSync、SyncFail)在同步前后运行任务

  • 资源运行状况评测:针对特定于应用程序的资源进行自定义运行状况检查

有关详细信息,请参阅 Argo CD 文档中的 Sync WavesResource Hooks

忽略差异

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

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

有关忽略模式和字段排除项的详细信息,请参阅 Argo CD 文档中的 Diffing Customization

多环境部署

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

开发

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

监控和管理应用程序

查看应用程序状态

kubectl get application my-app -n argocd

访问 Argo CD 用户界面

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

回滚应用程序

可以通过 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 应用程序回滚

其他资源