Skip to content
You are viewing the docs for an unreleased version of Argo CD, click here to go to the latest stable version.

集群引导

本指南适用于已安装 Argo CD 的操作员,他们拥有一个新的集群,并希望在该集群中安装许多应用程序。

要解决这个问题,并没有一个特定的模式,例如,你可以编写一个脚本来创建应用程序,甚至可以手动创建。 不过,Argo CD 的用户倾向于使用应用程序的***模式。

在任意项目中创建应用程序的能力是管理员级别的能力。 只有管理员才有推送访问父应用程序源代码库的权限。 管理员应审查对该源代码库的拉取请求,特别注意每个应用程序中的 "项目 "字段。 可以访问安装 Argo CD 的命名空间的项目实际上拥有管理员级别的权限。

Apps Of Apps Pattern

声明式 指定一个 Argo CD 应用程序,该程序只由其他应用程序组成。

应用程序的应用](.../assets/application-of-applications.png)

Helm 示例

本例展示了如何使用 helm 来实现这一目标。 当然,如果您愿意,也可以使用其他工具。

为此,Git 仓库的典型布局可以是

├── Chart.yaml
├── templates
│   ├── guestbook.yaml
│   ├── helm-dependency.yaml
│   ├── helm-guestbook.yaml
│   └── kustomize-guestbook.yaml
└── values.yaml

Chart.yaml` 是模板。

templates "大致为每个子应用程序包含一个文件:

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: guestbook
  namespace: argocd
  finalizers:
  - resources-finalizer.argocd.argoproj.io
spec:
  destination:
    namespace: argocd
    server: {{ .Values.spec.destination.server }}
  project: default
  source:
    path: guestbook
    repoURL: https://github.com/argoproj/argocd-example-apps
    targetRevision: HEAD

同步策略为自动+剪枝,因此子应用会在配置清单发生变化时自动创建、同步和删除,但你可能希望禁用这一点。 我还添加了Finalizer,它可以确保你的应用被正确删除。

将修订版本固定为特定的 Git 提交 SHA,以确保即使子应用程序的 repo 发生变化,应用程序也只会在父应用程序更改该修订版本时才会发生变化。 或者,也可以将其设置为 HEAD 或分支名称。

由于您可能希望覆盖集群服务器,因此这是一个模板值。

values.yaml 包含默认值:

spec:
  destination:
    server: https://kubernetes.default.svc

接下来,您需要创建并同步父应用程序,例如通过 CLI:

argocd app create apps \
    --dest-namespace argocd \
    --dest-server https://kubernetes.default.svc \
    --repo https://github.com/argoproj/argocd-example-apps.git \
    --path apps  
argocd app sync apps

父应用程序将显示为同步,但子应用程序将不同步:

新应用中的新应用](.../assets/new-app-of-apps.png)

> 注意:您可能需要修改此行为,以便以波浪方式启动集群;有关修改的信息,请参阅 v1.8 升级说明

您可以通过用户界面进行同步,首先根据正确的标签进行筛选:

过滤器应用程序](../assets/filter-apps.png)

然后选择 "不同步 "应用程序并同步:

同步应用程序](.../assets/sync-apps.png)

或通过 CLI:

argocd app sync -l app.kubernetes.io/instance=apps

查看 GitHub 上的示例

级联删除.

如果要确保在删除父应用程序时删除子应用程序及其所有资源,请确保在 "应用程序 "定义中添加适当的 finalizer

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: guestbook
  namespace: argocd
  finalizers:
  - resources-finalizer.argocd.argoproj.io
spec:
 ...