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