帮助改进此页面
要帮助改进本用户指南,请选择位于每个页面右侧窗格中的在 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-nametargetRevision:chart-versionchart:chart-name
如果功能角色具有所需的 ECR 权限,则可以直接使用该存储库,无需配置。有关详细信息,请参阅 配置存储库访问权限。
来自 CodeCommit 的 Git 存储库:
spec: source: repoURL: https://git-codecommit.region.amazonaws.com/v1/repos/repository-nametargetRevision: 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 Waves
忽略差异
防止 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 应用程序回滚
其他资源
-
使用 Argo CD 项目:为多租户环境使用项目组织应用程序
-
使用 ApplicationSets:通过模板部署到多个集群
-
Application Specification
:完整的应用程序 API 参考 -
Sync Options
:高级同步配置