ApplicationSet

介绍

ApplicationSet controller 是一个 Kubernetes controller,支持 ApplicationSet CustomResourceDefinition (CRD)。该 controller/CRD 使得在大量集群和 monorepos 中管理 Argo CD Applications 更加自动化和灵活,同时也使多租户 Kubernetes 集群上的自助使用成为可能。

ApplicationSet 的使用场景

  • 部署多个相似的应用:当需要部署多个配置相似的应用时,可以使用 ApplicationSet 来减少重复配置。例如,可以使用 ApplicationSet 部署多个使用相同模板但服务名称和端口号不同的微服务。
  • 多集群部署:当需要在多个 Kubernetes 集群中部署相同应用时,可以使用 ApplicationSet 简化配置。例如,可以使用 ApplicationSet 定义一个应用,并在多个集群中部署,每个集群使用不同的参数。
  • 动态生成应用:当需要基于某些条件动态生成应用时,可以利用 ApplicationSet。例如,可以基于 Git 仓库中的分支或标签动态生成不同的应用实例。

ApplicationSet 示例

apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
  name: guestbook
spec:
  goTemplate: true
  goTemplateOptions: ["missingkey=error"]
  generators:
  - list:
      elements:
      - cluster: engineering-dev
        url: https://1.2.3.4
      - cluster: engineering-prod
        url: https://2.4.6.8
      - cluster: finance-preprod
        url: https://9.8.7.6
  template:
    metadata:
      name: '{{.cluster}}-guestbook'
    spec:
      project: my-project
      source:
        repoURL: https://github.com/infra-team/cluster-deployments.git
        targetRevision: HEAD
        path: guestbook/{{.cluster}}
      destination:
        server: '{{.url}}'
        namespace: guestbook

参考资料