Applicationsets

Met ArgoCD Applicationsets kunnen applicaties automatisch door ArgoCD geïnstalleerd worden. Hiervoor is met de installatie van ArgoCD tevens een Applicationset Controller geïnstalleerd die ArgoCD applicaties genereert aan de hand van (nieuwe) ApplicationSet Custom Resources.

Applicationsets maakt gebruik van generators om te bepalen waar de applicaties op geplaatst dienen te worden. Zo bestaat een ‘list‘ uit ‘elements‘ die de clusters definiëren, bijvoorbeeld:

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

Een ‘cluster-generator‘ maakt gebruik van de informatie uit ArgoCD om de cluster(s) te gebruiken die in ArgoCD bekend zijn. Clusters in ArgoCD zijn bekend gemaakt met ‘secrets‘ waarin o.a. de cluster-name staat.

generators: 
- clusters: {} # Automatically use all clusters defined within Argo CD

Hierbij wordt de name in secret gebruikt voor de destination cluster(s):

destination: 
  server: '{{server}}' # 'server' field of the secret

In de cluster-generator kan ‘matchLabels’ gebruikt worden voor een verdere selectie van clusters.

Een ‘git-generator‘ maakt gebruik van directories en bestanden in een git-repository om te bepalen welke applicaties gebruikt dienen te worden.

generators: 
- git: 
    repoURL: https://github.com/argoproj/applicationset.git 
    revision: HEAD 
    directories: 
    - path: examples/git-generator-directory/cluster-addons/*

Hiermee worden alle applicaties uit het path geïnstalleerd en is de destination gebruikt voor de cluster.

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

Met een ‘matrix-generator‘ kan een combinatie van bovenstaande generators gebruikt worden (als child-generators) om daarvan een combinatie te maken voor applicaties en clusters. Bijvoorbeeld:

generators:
# matrix 'parent' generator
- matrix:
    generators:
    # git generator, 'child' #1
    - git:
        repoURL: https://github.com/argoproj/applicationset.git
        revision: HEAD
        directories:
          - path: examples/matrix/cluster-addons/*
    # cluster generator, 'child' #2
    - clusters:
        selector:
          matchLabels:
            argocd.argoproj.io/secret-type: cluster

Er zijn nog meer generators mogelijk, zoals SCM voor Git repositories, meer informatie daarover vind je op de site van ArgoCD.

Voorbeeld voor guestbook applicatie op alle bekende clusters in ArgoCD

apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
  name: guestbook
spec:
  generators:
  - clusters: {} # Automatically use all clusters defined within Argo CD
  template:
    metadata:
      name: '{{name}}-guestbook' # 'name' field of the Secret
    spec:
      project: "default"
      source:
        repoURL: https://github.com/argoproj/argocd-example-apps/
        targetRevision: HEAD
        path: guestbook
      destination: 
        server: '{{server}}' # 'server' field of the secret
        namespace: guestbook

matchLabels en key-values voor template voorbeeld:

spec:
  generators:
  - clusters:
      selector:
        matchLabels:
          type: 'staging'
      # A key-value map for arbitrary parameters
      values:
        revision: HEAD # staging clusters use HEAD branch
  - clusters:
      selector:
        matchLabels:
          type: 'production'
      values:
        # production uses a different revision value, for  'stable' branch
        revision: stable
  template:
    metadata:
      name: '{{name}}-guestbook'
    spec:
      project: "default"
      source:
        repoURL: https://github.com/argoproj/argocd-example-apps/
        # The cluster values field for each generator will be substituted here:
        targetRevision: '{{values.revision}}'
        path: guestbook
      destination:
        server: '{{server}}'
        namespace: guestbook