# Argo Workflows Chart This is a **community maintained** chart. It is used to set up argo and its needed dependencies through one command. This is used in conjunction with [helm](https://github.com/kubernetes/helm). If you want your deployment of this helm chart to most closely match the [argo CLI](https://github.com/argoproj/argo-workflows), you should deploy it in the `kube-system` namespace. ## Pre-Requisites ### Custom resource definitions Some users would prefer to install the CRDs _outside_ of the chart. You can disable the CRD installation of this chart by using `--set crds.install=false` when installing the chart. Helm cannot upgrade custom resource definitions in the `/crds` folder [by design](https://helm.sh/docs/chart_best_practices/custom_resource_definitions/#some-caveats-and-explanations). Starting with 3.4.0 (chart version 0.19.0), the CRDs have been moved to `/templates` to address this design decision. If you are using Argo Workflows chart version prior to 3.4.0 (chart version 0.19.0) or have elected to manage the Argo Workflows CRDs outside of the chart, please use `kubectl` to upgrade CRDs manually from [templates/crds](templates/crds/) folder or via the manifests from the upstream project repo: ```bash kubectl apply -k "https://github.com/argoproj/argo-workflows/manifests/base/crds/full?ref=" # Eg. version v3.3.9 kubectl apply -k "https://github.com/argoproj/argo-workflows/manifests/base/crds/full?ref=v3.3.9" ``` ### ServiceAccount for Workflow Spec In order for each Workflow run, you create ServiceAccount via `values.yaml` like below. ```yaml workflow: serviceAccount: create: true name: "argo-workflow" rbac: create: true controller: workflowNamespaces: - default - foo - bar ``` Set ServiceAccount on Workflow. ```yaml apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: hello-world- spec: entrypoint: whalesay serviceAccountName: argo-workflow # Set ServiceAccount templates: - name: whalesay container: image: docker/whalesay command: [ cowsay ] args: [ "hello world" ] ``` ## Installing the Chart To install the chart with the release name `my-release`: ```console $ helm repo add argo https://argoproj.github.io/argo-helm "argo" has been added to your repositories $ helm install my-release argo/argo-workflows NAME: my-release ... ``` ## Changelog For full list of changes, please check ArtifactHub [changelog]. ## Usage Notes ### Workflow controller This chart defaults to setting the `controller.instanceID.enabled` to `false` now, which means the deployed controller will act upon any workflow deployed to the cluster. If you would like to limit the behavior and deploy multiple workflow controllers, please use the `controller.instanceID.enabled` attribute along with one of its configuration options to set the `instanceID` of the workflow controller to be properly scoped for your needs. ### Workflow server authentication By default, the chart requires some kind of authentication mechanism. This adopts the [default behaviour from the Argo project](https://github.com/argoproj/argo-workflows/pull/5211) itself. However, for local development purposes, or cases where your gateway authentication is covered by some other means, you can set the authentication mode for the Argo server by setting the `server.extraArgs: [--auth-mode=server]`. There are a few additional comments in the values.yaml file itself, including commented-out settings to disable authentication on the server UI itself using the same `--auth-mode=server` setting. ## Values The `values.yaml` contains items used to tweak a deployment of this chart. Fields to note: - `controller.instanceID.enabled`: If set to true, the Argo Controller will **ONLY** monitor Workflow submissions with a `--instanceid` attribute - `controller.instanceID.useReleaseName`: If set to true then chart set controller instance id to release name - `controller.instanceID.explicitID`: Allows customization of an instance id for the workflow controller to monitor - `singleNamespace`: When true, restricts the workflow controller to operate in just the single namespace (that one of the Helm release). - `controller.workflowNamespaces`: This is a list of namespaces where the workflow controller will manage workflows. Only valid when `singleNamespace` is false. ### General parameters | Key | Type | Default | Description | |-----|------|---------|-------------| {{- range .Values }} {{- if not (or (hasPrefix "workflow" .Key) (hasPrefix "controller" .Key) (hasPrefix "executor" .Key) (hasPrefix "server" .Key) (hasPrefix "artifactRepository" .Key) (hasPrefix "customArtifact" .Key) (hasPrefix "use" .Key) (hasPrefix "mainContainer" .Key) ) }} | {{ .Key }} | {{ .Type }} | {{ if .Default }}{{ .Default }}{{ else }}{{ .AutoDefault }}{{ end }} | {{ if .Description }}{{ .Description }}{{ else }}{{ .AutoDescription }}{{ end }} | {{- end }} {{- end }} ### Workflow | Key | Type | Default | Description | |-----|------|---------|-------------| {{- range .Values }} {{- if hasPrefix "workflow" .Key }} | {{ .Key }} | {{ .Type }} | {{ if .Default }}{{ .Default }}{{ else }}{{ .AutoDefault }}{{ end }} | {{ if .Description }}{{ .Description }}{{ else }}{{ .AutoDescription }}{{ end }} | {{- end }} {{- end }} ### Workflow Controller | Key | Type | Default | Description | |-----|------|---------|-------------| {{- range .Values }} {{- if hasPrefix "controller" .Key }} | {{ .Key }} | {{ .Type }} | {{ if .Default }}{{ .Default }}{{ else }}{{ .AutoDefault }}{{ end }} | {{ if .Description }}{{ .Description }}{{ else }}{{ .AutoDescription }}{{ end }} | {{- end }} {{- end }} ### Workflow Main Container | Key | Type | Default | Description | |-----|------|---------|-------------| {{- range .Values }} {{- if hasPrefix "mainContainer" .Key }} | {{ .Key }} | {{ .Type }} | {{ if .Default }}{{ .Default }}{{ else }}{{ .AutoDefault }}{{ end }} | {{ if .Description }}{{ .Description }}{{ else }}{{ .AutoDescription }}{{ end }} | {{- end }} {{- end }} ### Workflow Executor | Key | Type | Default | Description | |-----|------|---------|-------------| {{- range .Values }} {{- if hasPrefix "executor" .Key }} | {{ .Key }} | {{ .Type }} | {{ if .Default }}{{ .Default }}{{ else }}{{ .AutoDefault }}{{ end }} | {{ if .Description }}{{ .Description }}{{ else }}{{ .AutoDescription }}{{ end }} | {{- end }} {{- end }} ### Workflow Server | Key | Type | Default | Description | |-----|------|---------|-------------| {{- range .Values }} {{- if hasPrefix "server" .Key }} | {{ .Key }} | {{ .Type }} | {{ if .Default }}{{ .Default }}{{ else }}{{ .AutoDefault }}{{ end }} | {{ if .Description }}{{ .Description }}{{ else }}{{ .AutoDescription }}{{ end }} | {{- end }} {{- end }} ### Artifact Repository | Key | Type | Default | Description | |-----|------|---------|-------------| {{- range .Values }} {{- if or (hasPrefix "artifactRepository" .Key) (hasPrefix "use" .Key) (hasPrefix "customArtifact" .Key) }} | {{ .Key }} | {{ .Type }} | {{ if .Default }}{{ .Default }}{{ else }}{{ .AutoDefault }}{{ end }} | {{ if .Description }}{{ .Description }}{{ else }}{{ .AutoDescription }}{{ end }} | {{- end }} {{- end }} ## Breaking changes from the deprecated `argo` chart 1. the `installCRD` value has been removed. CRDs are now only installed from the conventional crds/ directory 1. the CRDs were updated to `apiextensions.k8s.io/v1` 1. the container image registry/project/tag format was changed to be more in line with the more common ```yaml image: registry: quay.io repository: argoproj/argocli tag: v3.0.1 ``` this also makes it easier for automatic update tooling (eg. renovate bot) to detect and update images. 1. switched to quay.io as the default registry for all images 1. removed any included usage of Minio 1. aligned the configuration of serviceAccounts with the argo-cd chart, ie: what used to be `server.createServiceAccount` is now `server.serviceAccount.create` 1. moved the field previously known as `telemetryServicePort` inside the `telemetryConfig` as `telemetryConfig.servicePort` - same for `metricsConfig` [affinity]: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/ [links]: https://argoproj.github.io/argo-workflows/links/ [Node selector]: https://kubernetes.io/docs/user-guide/node-selection/ [Pod Disruption Budget]: https://kubernetes.io/docs/tasks/run-application/configure-pdb/ [probe]: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#container-probes [Tolerations]: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/ [TopologySpreadConstraints]: https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/ [values.yaml]: values.yaml [changelog]: https://artifacthub.io/packages/helm/argo/argo-workflows?modal=changelog