• This repository has been archived on 15/Jul/2024
  • Stars
    star
    588
  • Rank 75,995 (Top 2 %)
  • Language
    Go
  • License
    Apache License 2.0
  • Created over 4 years ago
  • Updated 4 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

The ApplicationSet controller manages multiple Argo CD Applications as a single ApplicationSet unit, supporting deployments to large numbers of clusters, deployments of large monorepos, and enabling secure Application self-service.

Argo CD ApplicationSet Controller

⚠️ This project code has been moved to the main Argo CD repository

This repository is no longer active. ApplicationSet has been merged with Argo CD and will be released along with it. Further development will happen in Argo CD.

The ApplicationSet controller is a Kubernetes controller that adds support for a new custom ApplicationSet CustomResourceDefinition (CRD). This controller/CRD enables both automation and greater flexibility when managing Argo CD Applications across a large number of clusters and within monorepos, plus it makes self-service usage possible on multitenant Kubernetes clusters.

The ApplicationSet controller provides the ability:

  • To deploy Argo CD Applications to multiple Kubernetes clusters at once
  • To deploy multiple Argo CD applications from a single monorepo
  • Allows unprivileged cluster users (those without access to the Argo CD namespace) to deploy Argo CD applications without the need to involve cluster administrators in enabling the destination clusters/namespaces
  • Best of all, all these features are controlled by only a single instance of an ApplicationSet custom resource, which means no more juggling of multiple Argo CD Application resources to target those multiple clusters/repos!

Unlike with an Argo CD Application resource, which deploys resources from a single Git repository to a single destination cluster/namespace, ApplicationSet uses templated automation to create, modify, and manage multiple Argo CD applications at once.

If you are loving Argo CD and want to use ApplicationSet's automation and templating to take your usage to the next level, give the ApplicationSet controller a shot!

Example Spec:

# This is an example of a typical ApplicationSet which uses the cluster generator.
# An ApplicationSet is comprised with two stanzas:
#  - spec.generator - producer of a list of values supplied as arguments to an app template
#  - spec.template - an application template, which has been parameterized
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
  name: guestbook
spec:
  generators:
  - clusters: {} # This is a generator, specifically, a cluster generator.
  template: 
    # This is a template Argo CD Application, but with support for parameter substitution.
    metadata:
      name: '{{name}}-guestbook'
    spec:
      project: "default"
      source:
        repoURL: https://github.com/argoproj/argocd-example-apps/
        targetRevision: HEAD
        path: guestbook
      destination:
        server: '{{server}}'
        namespace: guestbook

The Cluster generator generates parameters, which are substituted into {{parameter name}} values within the template: section of the ApplicationSet resource. In this example, the cluster generates name and server parameters (containing the name and API URL for the target cluster), which are then substituted into the template's {{name}} and {{server}} values, respectively.

The parameter generation via multiple sources (cluster, list, git repos), and the use of those values within Argo CD Application templates, is a powerful combination. Learn more about generators and template, the Cluster generator and various other ApplicationSet generators, and more, from the ApplicationSet documentation.

Documentation

Take a look at our introductory blog post, Introducing the ApplicationSet Controller for Argo CD.

Check out the complete documentation for a complete introduction, how to setup and run the ApplicationSet controller, how it interacts with Argo CD, generators, templates, use cases, and more.

Community

The ApplicationSet controller is a community-driven project. You can reach the Argo CD ApplicationSet community and developers via the following channels:

We'd love to have you join us!

Development builds

Development builds can be installed by running the following command:

kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/applicationset/master/manifests/install.yaml

Commits to the master branch will automatically push new container images to the container registry used by this install, and see this link for automatically updated documentation for these builds. See Development builds for more details.

Development

Learn more about how to setup a development environment, build the ApplicationSet controller, and run the unit/E2E tests.

Our end goal is to provide a formal solution to replace the app-of-apps pattern. You can learn more about the founding principles of the ApplicationSet controller from the original design doc.

This project will initially be maintained separately from Argo CD, in order to allow quick iteration of the spec and implementation, without tying it to Argo CD releases. No promises of backwards compatibility are made, at least until merging into Argo CD proper.

More Repositories

1

argo-cd

Declarative Continuous Deployment for Kubernetes
Go
17,515
star
2

argo-workflows

Workflow Engine for Kubernetes
Go
14,835
star
3

argo-rollouts

Progressive Delivery for Kubernetes
Go
2,676
star
4

argo-events

Event-driven Automation Framework for Kubernetes
Go
2,328
star
5

argo-helm

ArgoProj Helm Charts
Mustache
1,685
star
6

gitops-engine

Democratizing GitOps
Go
1,672
star
7

argocd-example-apps

Example Apps to Demonstrate Argo CD
Jsonnet
1,516
star
8

argoproj

Common project repo for all Argo Projects
Python
595
star
9

notifications-engine

Affordable notifications for Kubernetes
Go
271
star
10

argoproj-deployments

Deployment repository for Argoproj CI/CD
HCL
228
star
11

argo-ui

Argoproj shared React components
TypeScript
220
star
12

argo-ci

Continuous integration and delivery for Kubernetes powered by Argo workflows.
TypeScript
200
star
13

rollouts-demo

Go
182
star
14

pkg

Argo shared libraries between argo projects
Go
36
star
15

data-pipeline

Python
36
star
16

argo-schema-generator

Tool that generates a kustomize schema file for Argo CD, Argo Rollouts, Argo Workflows, and Argo Events
Go
28
star
17

argo-ml-demo

Demonstration of using an Argo workflow for an ML application
Python
28
star
18

argo-site

JavaScript
15
star
19

argo-cd-ui

TypeScript
15
star
20

homebrew-tap

Homebrew Tap for argo
Ruby
14
star
21

argo-cd-hello-world-app

A basic golang app with a travis pipeline that deploys into a k8s cluster using Argo-CD
Makefile
14
star
22

argocon21

JavaScript
8
star
23

argoproj.github.io

Generated from https://github.com/argoproj/argo-site
HTML
5
star
24

ui-lib

TypeScript
5
star
25

argo-cd-hello-world-config

Shell
4
star
26

argo-conformance-program

A standard to ensure interoperability, protect users, and prevent surprises when using commercial offerings with Argo in the name.
4
star
27

community-contrib-docs

3
star
28

argo-events-old

This repo is now obsolete. Please check out https://github.com/argoproj/argo-events
3
star
29

image-processing-demo

Python
3
star
30

kubecon-sandbox

KubeCon Sandbox for demonstrating Argo CD
Shell
3
star
31

.github

3
star
32

kubeflow-ks

Example repo that stores the ksonnet files of Kubeflow v0.3.0
Shell
2
star
33

katacoda-scenarios

Shell
1
star