argo-helm/charts/argo-cd
Thomas O'Neill 1e3a4afd05
feat(argo-cd): Support AWS ALB Ingress with gRPC (#806)
* Support AWS ALB Ingress with GRPC

Signed-off-by: Thomas O'Neill <toneill818@gmail.com>
Signed-off-by: Thomas O'Neill <toneill@new-innov.com>

* Bump chart version

Signed-off-by: Marco Kilchhofer <marco@kilchhofer.info>

* Apply suggestions from code review

Signed-off-by: Marco Kilchhofer <marco@kilchhofer.info>

* Use single if statement

Signed-off-by: Thomas O'Neill <toneill@new-innov.com>

* Append -grpc to the service labels for ALB GRPC service

Signed-off-by: Thomas O'Neill <toneill@new-innov.com>

Co-authored-by: Thomas O'Neill <toneill@new-innov.com>
Co-authored-by: Marco Kilchhofer <mkilchhofer@users.noreply.github.com>
Co-authored-by: Marco Kilchhofer <marco@kilchhofer.info>
2021-07-20 12:40:54 +01:00
..
crds chore(argo-cd): Cleanup old CRD hooks (#777) 2021-06-07 10:51:52 +02:00
templates feat(argo-cd): Support AWS ALB Ingress with gRPC (#806) 2021-07-20 12:40:54 +01:00
.helmignore fix(argo-cd): only exclude *.tgz in the top-level chart dir (#633) 2021-03-31 08:44:02 -04:00
Chart.lock chore(argo-cd): upgrade redis-ha version to 4.12.14 (#710) 2021-05-09 22:05:51 +02:00
Chart.yaml feat(argo-cd): Support AWS ALB Ingress with gRPC (#806) 2021-07-20 12:40:54 +01:00
README.md feat(argo-cd): Support AWS ALB Ingress with gRPC (#806) 2021-07-20 12:40:54 +01:00
values.yaml feat(argo-cd): Support AWS ALB Ingress with gRPC (#806) 2021-07-20 12:40:54 +01:00

README.md

Argo CD Chart

A Helm chart for ArgoCD, a declarative, GitOps continuous delivery tool for Kubernetes.

Source code can be found here

Additional Information

This is a community maintained chart. This chart installs argo-cd, a declarative, GitOps continuous delivery tool for Kubernetes.

The default installation is intended to be similar to the provided ArgoCD releases.

This chart currently installs the non-HA version of ArgoCD.

Synchronizing Changes from Original Repository

In the original ArgoCD repository an manifests/install.yaml is generated using kustomize. It's the basis for the installation as described in the docs.

When installing ArgoCD using this helm chart the user should have a similar experience and configuration rolled out. Hence, it makes sense to try to achieve a similar output of rendered .yaml resources when calling helm template using the default settings in values.yaml.

To update the templates and default settings in values.yaml it may come in handy to look up the diff of the manifests/install.yaml between two versions accordingly. This can either be done directly via github and look for manifests/install.yaml:

https://github.com/argoproj/argo-cd/compare/v1.8.7...v2.0.0#files_bucket

Or you clone the repository and do a local git-diff:

git clone https://github.com/argoproj/argo-cd.git
cd argo-cd
git diff v1.8.7 v2.0.0 -- manifests/install.yaml

Changes in the CustomResourceDefinition resources shall be fixed easily by copying 1:1 from the manifests/crds folder into this charts/argo-cd/crds folder.

Upgrading

3.8.1

This bugfix version potentially introduces a rename (and recreation) of one or more ServiceAccounts. It only happens when you use one of these customization:

# Case 1) - only happens when you do not specify a custom name (repoServer.serviceAccount.name)
repoServer:
  serviceAccount:
    create: true

# Case 2)
controller:
  serviceAccount:
    name: "" # or <nil>

# Case 3)
dex:
  serviceAccount:
    name: "" # or <nil>

# Case 4)
server:
  serviceAccount:
    name: "" # or <nil>

Please check if you are affected by one of these cases before you upgrade, especially when you use cloud IAM roles for service accounts. (eg. IRSA on AWS or Workload Identity for GKE)

3.2.*

With this minor version we introduced the evaluation for the ingress manifest (depending on the capabilities version), See Pull Request. Issue 703 reported that the capabilities evaluation is not handled correctly when deploying the chart via an ArgoCD instance, especially deploying on clusters running a cluster version prior to 1.19 (which misses Ingress on apiVersion networking.k8s.io/v1).

If you are running a cluster version prior to 1.19 you can avoid this issue by directly installing chart version 3.6.0 and setting kubeVersionOverride like:

kubeVersionOverride: "1.18.0"

Then you should no longer encounter this issue.

3.0.0 and above

Helm apiVersion switched to v2. Requires Helm 3.0.0 or above to install. Read More on how to migrate your release from Helm 2 to Helm 3.

2.14.7 and above

The matchLabels key in the ArgoCD Application Controller is no longer hard-coded. Note that labels are immutable so caution should be exercised when making changes to this resource.

2.10.x to 2.11.0

The application controller is now available as a StatefulSet when the controller.enableStatefulSet flag is set to true. Depending on your Helm deployment this may be a downtime or breaking change if enabled when using HA and will become the default in 3.x.

1.8.7 to 2.x.x

controller.extraArgs, repoServer.extraArgs and server.extraArgs are now arrays of strings instead of a map

What was

server:
  extraArgs:
    insecure: ""

is now

server:
  extraArgs:
  - --insecure

Prerequisites

  • Kubernetes 1.7+
  • Helm v3.0.0+

Installing the Chart

To install the chart with the release name my-release:

$ helm repo add argo https://argoproj.github.io/argo-helm
"argo" has been added to your repositories

$ helm install --name my-release argo/argo-cd
NAME: my-release
...

Chart Values

Parameter Description Default
global.image.imagePullPolicy If defined, a imagePullPolicy applied to all ArgoCD deployments. "IfNotPresent"
global.image.repository If defined, a repository applied to all ArgoCD deployments. "argoproj/argocd"
global.image.tag If defined, a tag applied to all ArgoCD deployments. "v2.0.4"
global.securityContext Toggle and define securityContext See values.yaml
global.imagePullSecrets If defined, uses a Secret to pull an image from a private Docker registry or repository. []
global.hostAliases Mapping between IP and hostnames that will be injected as entries in the pod's hosts files []
global.networkPolicy.create Create NetworkPolicy objects for all components false
global.networkPolicy.defaultDenyIngress Default deny all ingress traffic false
kubeVersionOverride Override the Kubernetes version, which is used to evaluate certain manifests ""
nameOverride Provide a name in place of argocd "argocd"
fullnameOverride String to fully override "argo-cd.fullname" ""
apiVersionOverrides.certmanager String to override apiVersion of certmanager resources rendered by this helm chart ""
apiVersionOverrides.ingress String to override apiVersion of ingresses rendered by this helm chart ""
configs.clusterCredentials Provide one or multiple external cluster credentials [] (See values.yaml)
configs.gpgKeysAnnotations GnuPG key ring annotations {}
configs.gpgKeys GnuPG keys to add to the key ring {} (See values.yaml)
configs.knownHostsAnnotations Known Hosts configmap annotations {}
configs.knownHosts.data.ssh_known_hosts Known Hosts See values.yaml
configs.secret.annotations Annotations for argocd-secret {}
configs.secret.argocdServerAdminPassword Bcrypt hashed admin password null
configs.secret.argocdServerAdminPasswordMtime Admin password modification time date "2006-01-02T15:04:05Z" now if configs.secret.argocdServerAdminPassword is set
configs.secret.bitbucketSecret BitBucket incoming webhook secret ""
configs.secret.createSecret Create the argocd-secret. true
configs.secret.githubSecret GitHub incoming webhook secret ""
configs.secret.gitlabSecret GitLab incoming webhook secret ""
configs.tlsCertsAnnotations TLS certificate configmap annotations {}
configs.tlsCerts.data."argocd.example.com" TLS certificate See values.yaml
configs.secret.extra add additional secrets to be added to argocd-secret {}
configs.styles Define custom CSS styles for your argo instance (Read More). This Settings will automatically mount the provided css and reference it in the argo configuration. "" (See values.yaml)
openshift.enabled enables using arbitrary uid for argo repo server false

ArgoCD Controller

Parameter Description Default
controller.affinity Assign custom affinity rules to the deployment {}
controller.args.operationProcessors define the controller --operation-processors "10"
controller.args.appResyncPeriod define the controller --app-resync "180"
controller.args.selfHealTimeout define the controller --self-heal-timeout-seconds "5"
controller.args.statusProcessors define the controller --status-processors "20"
controller.clusterAdminAccess.enabled Enable RBAC for local cluster deployments. true
controller.containerPort Controller listening port. 8082
controller.extraArgs Additional arguments for the controller. A list of flags []
controller.enableStatefulSet Enable deploying the controller as a StatefulSet instead of a Deployment. Used for HA installations. false
controller.env Environment variables for the controller. []
controller.envFrom envFrom to pass to the controller. [] (See values.yaml)
controller.image.repository Repository to use for the controller global.image.repository
controller.image.imagePullPolicy Image pull policy for the controller global.image.imagePullPolicy
controller.image.tag Tag to use for the controller global.image.tag
controller.livenessProbe.failureThreshold Kubernetes probe configuration 3
controller.livenessProbe.initialDelaySeconds Kubernetes probe configuration 10
controller.livenessProbe.periodSeconds Kubernetes probe configuration 10
controller.livenessProbe.successThreshold Kubernetes probe configuration 1
controller.livenessProbe.timeoutSeconds Kubernetes probe configuration 1
controller.logLevel Controller log level "info"
controller.metrics.enabled Deploy metrics service false
controller.metrics.service.annotations Metrics service annotations {}
controller.metrics.service.labels Metrics service labels {}
controller.metrics.service.servicePort Metrics service port 8082
controller.metrics.serviceMonitor.enabled Enable a prometheus ServiceMonitor. false
controller.metrics.serviceMonitor.selector Prometheus ServiceMonitor selector. {}
controller.name Controller name string. "application-controller"
controller.nodeSelector Node selector {}
controller.podAnnotations Annotations for the controller pods {}
controller.podLabels Labels for the controller pods {}
controller.priorityClassName Priority class for the controller pods ""
controller.readinessProbe.failureThreshold Kubernetes probe configuration 3
controller.readinessProbe.initialDelaySeconds Kubernetes probe configuration 10
controller.readinessProbe.periodSeconds Kubernetes probe configuration 10
controller.readinessProbe.successThreshold Kubernetes probe configuration 1
controller.readinessProbe.timeoutSeconds Kubernetes probe configuration 1
controller.replicas The number of controller pods to run 1
controller.resources Resource limits and requests for the controller pods. {}
controller.service.annotations Controller service annotations. {}
controller.service.labels Controller service labels. {}
controller.service.port Controller service port. 8082
controller.serviceAccount.annotations Controller service account annotations {}
controller.serviceAccount.automountServiceAccountToken Automount API credentials for the Service Account true
controller.serviceAccount.create Create a service account for the controller true
controller.serviceAccount.name Service account name. "argocd-application-controller"
controller.tolerations Tolerations for use with node taints []
controller.volumeMounts Controller volume mounts []
controller.volumes Controller volumes []

Argo Repo Server

Property Description Default
repoServer.affinity Assign custom affinity rules to the deployment {}
repoServer.autoscaling.enabled Enable Horizontal Pod Autoscaler (HPA) for the repo server false
repoServer.autoscaling.minReplicas Minimum number of replicas for the repo server HPA 1
repoServer.autoscaling.maxReplicas Maximum number of replicas for the repo server HPA 5
repoServer.autoscaling.targetCPUUtilizationPercentage Average CPU utilization percentage for the repo server HPA 50
repoServer.autoscaling.targetMemoryUtilizationPercentage Average memory utilization percentage for the repo server HPA 50
repoServer.containerPort Repo server port 8081
repoServer.extraArgs Additional arguments for the repo server. A list of flags. []
repoServer.env Environment variables for the repo server. []
repoServer.envFrom envFrom to pass to the repo server. [] (See values.yaml)
repoServer.image.repository Repository to use for the repo server global.image.repository
repoServer.image.imagePullPolicy Image pull policy for the repo server global.image.imagePullPolicy
repoServer.image.tag Tag to use for the repo server global.image.tag
repoServer.livenessProbe.failureThreshold Kubernetes probe configuration 3
repoServer.livenessProbe.initialDelaySeconds Kubernetes probe configuration 10
repoServer.livenessProbe.periodSeconds Kubernetes probe configuration 10
repoServer.livenessProbe.successThreshold Kubernetes probe configuration 1
repoServer.livenessProbe.timeoutSeconds Kubernetes probe configuration 1
repoServer.logLevel Log level "info"
repoServer.metrics.enabled Deploy metrics service false
repoServer.metrics.service.annotations Metrics service annotations {}
repoServer.metrics.service.labels Metrics service labels {}
repoServer.metrics.service.servicePort Metrics service port 8082
repoServer.metrics.serviceMonitor.enabled Enable a prometheus ServiceMonitor. false
repoServer.metrics.serviceMonitor.selector Prometheus ServiceMonitor selector. {}
repoServer.name Repo server name "repo-server"
repoServer.nodeSelector Node selector {}
repoServer.podAnnotations Annotations for the repo server pods {}
repoServer.podLabels Labels for the repo server pods {}
repoServer.priorityClassName Priority class for the repo server ""
repoServer.readinessProbe.failureThreshold Kubernetes probe configuration 3
repoServer.readinessProbe.initialDelaySeconds Kubernetes probe configuration 10
repoServer.readinessProbe.periodSeconds Kubernetes probe configuration 10
repoServer.readinessProbe.successThreshold Kubernetes probe configuration 1
repoServer.readinessProbe.timeoutSeconds Kubernetes probe configuration 1
repoServer.replicas The number of repo server pods to run 1
repoServer.resources Resource limits and requests for the repo server pods. {}
repoServer.service.annotations Repo server service annotations. {}
repoServer.service.automountServiceAccountToken Automount API credentials for the Service Account true
repoServer.service.labels Repo server service labels. {}
repoServer.service.port Repo server service port. 8081
repoServer.serviceAccount.annotations Repo server service account annotations {}
repoServer.serviceAccount.create Create repo server service account false
repoServer.serviceAccount.name Repo server service account name "argocd-repo-server"
repoServer.tolerations Tolerations for use with node taints []
repoServer.volumeMounts Repo server volume mounts []
repoServer.volumes Repo server volumes []

Argo Server

Parameter Description Default
server.affinity Assign custom affinity rules to the deployment {}
server.autoscaling.enabled Enable Horizontal Pod Autoscaler (HPA) for the server false
server.autoscaling.minReplicas Minimum number of replicas for the server HPA 1
server.autoscaling.maxReplicas Maximum number of replicas for the server HPA 5
server.autoscaling.targetCPUUtilizationPercentage Average CPU utilization percentage for the server HPA 50
server.autoscaling.targetMemoryUtilizationPercentage Average memory utilization percentage for the server HPA 50
server.GKEbackendConfig.enabled Enable BackendConfig custom resource for Google Kubernetes Engine. false
server.GKEbackendConfig.spec BackendConfigSpec {}
server.certificate.additionalHosts Certificate manager additional hosts []
server.certificate.domain Certificate manager domain "argocd.example.com"
server.certificate.enabled Enables a certificate manager certificate. false
server.certificate.issuer Certificate manager issuer {}
server.clusterAdminAccess.enabled Enable RBAC for local cluster deployments. true
server.configAnnotations ArgoCD configuration configmap annotations {}
server.config General Argo CD configuration See values.yaml
server.containerPort Server container port. 8080
server.extraArgs Additional arguments for the server. A list of flags. []
server.env Environment variables for the server. []
server.envFrom envFrom to pass to the server. [] (See values.yaml)
server.image.repository Repository to use for the server global.image.repository
server.image.imagePullPolicy Image pull policy for the server global.image.imagePullPolicy
server.image.tag Tag to use for the server global.image.tag
server.ingress.annotations Additional ingress annotations {}
server.ingress.enabled Enable an ingress resource for the server false
server.ingress.hosts List of ingress hosts []
server.ingress.labels Additional ingress labels. {}
server.ingress.ingressClassName Defines which ingress controller will implement the resource ""
server.ingress.tls Ingress TLS configuration. []
server.ingress.https Uses server.service.servicePortHttps instead server.service.servicePortHttp false
server.ingressGrpc.annotations Additional ingress annotations for dedicated gRPC-ingress {}
server.ingressGrpc.enabled Enable an ingress resource for the server for dedicated gRPC-ingress false
server.ingressGrpc.hosts List of ingress hosts for dedicated gRPC-ingress []
server.ingressGrpc.labels Additional ingress labels for dedicated gRPC-ingress {}
server.ingressGrpc.ingressClassName Defines which ingress controller will implement the resource gRPC-ingress ""
server.ingressGrpc.tls Ingress TLS configuration for dedicated gRPC-ingress []
server.ingressGrpc.isAWSALB Setup up GRPC ingress to work with an AWS ALB false
server.route.enabled Enable a OpenShift route for the server false
server.route.hostname Hostname of OpenShift route ""
server.lifecycle PostStart and PreStop hooks configuration {}
server.livenessProbe.failureThreshold Kubernetes probe configuration 3
server.livenessProbe.initialDelaySeconds Kubernetes probe configuration 10
server.livenessProbe.periodSeconds Kubernetes probe configuration 10
server.livenessProbe.successThreshold Kubernetes probe configuration 1
server.livenessProbe.timeoutSeconds Kubernetes probe configuration 1
server.logLevel Log level "info"
server.metrics.enabled Deploy metrics service false
server.metrics.service.annotations Metrics service annotations {}
server.metrics.service.labels Metrics service labels {}
server.metrics.service.servicePort Metrics service port 8082
server.metrics.serviceMonitor.enabled Enable a prometheus ServiceMonitor. false
server.metrics.serviceMonitor.selector Prometheus ServiceMonitor selector. {}
server.name Argo CD server name "server"
server.nodeSelector Node selector {}
server.podAnnotations Annotations for the server pods {}
server.podLabels Labels for the server pods {}
server.priorityClassName Priority class for the server ""
server.rbacConfigAnnotations RBAC configmap annotations {}
server.rbacConfig Argo CD RBAC policy {}
server.readinessProbe.failureThreshold Kubernetes probe configuration 3
server.readinessProbe.initialDelaySeconds Kubernetes probe configuration 10
server.readinessProbe.periodSeconds Kubernetes probe configuration 10
server.readinessProbe.successThreshold Kubernetes probe configuration 1
server.readinessProbe.timeoutSeconds Kubernetes probe configuration 1
server.replicas The number of server pods to run 1
server.resources Resource limits and requests for the server {}
server.service.annotations Server service annotations {}
server.service.labels Server service labels {}
server.service.servicePortHttp Server service http port 80
server.service.servicePortHttps Server service https port 443
server.service.servicePortHttpName Server service http port name, can be used to route traffic via istio http
server.service.servicePortHttpsName Server service https port name, can be used to route traffic via istio https
server.service.nodePortHttp Server service http port for NodePort service type 30080
server.service.servicePortHttps Server service http port for NodePort service type 30443
server.service.loadBalancerSourceRanges Source IP ranges to allow access to service from. []
server.service.externalIPs Server service external IPs. []
server.service.type Server service type "ClusterIP"
server.serviceAccount.annotations Server service account annotations {}
server.serviceAccount.automountServiceAccountToken Automount API credentials for the Service Account true
server.serviceAccount.create Create server service account true
server.serviceAccount.name Server service account name "argocd-server"
server.tolerations Tolerations for use with node taints []
server.volumeMounts Server volume mounts []
server.volumes Server volumes []

Dex

Property Description Default
dex.affinity Assign custom affinity rules to the deployment {}
dex.containerPortGrpc GRPC container port 5557
dex.containerPortHttp HTTP container port 5556
dex.enabled Enable dex true
dex.image.imagePullPolicy Dex imagePullPolicy "IfNotPresent"
dex.image.repository Dex image repository "quay.io/dexidp/dex"
dex.image.tag Dex image tag "v2.14.0"
dex.initImage.repository Argo CD init image repository. global.image.repository
dex.initImage.imagePullPolicy Argo CD init image imagePullPolicy global.image.imagePullPolicy
dex.initImage.tag Argo CD init image tag global.image.tag
dex.metrics.enabled Deploy metrics service false
dex.metrics.service.annotations Metrics service annotations {}
dex.metrics.service.labels Metrics service labels {}
dex.metrics.serviceMonitor.enabled Enable a prometheus ServiceMonitor. false
dex.metrics.serviceMonitor.selector Prometheus ServiceMonitor selector. {}
dex.name Dex name "dex-server"
dex.env Environment variables for the Dex server. []
dex.envFrom envFrom to pass to the Dex server. [] (See values.yaml)
dex.nodeSelector Node selector {}
dex.podAnnotations Annotations for the Dex server pods {}
dex.podLabels Labels for the Dex server pods {}
dex.priorityClassName Priority class for dex ""
dex.resources Resource limits and requests for dex {}
dex.serviceAccount.automountServiceAccountToken Automount API credentials for the Service Account true
dex.serviceAccount.create Create dex service account true
dex.serviceAccount.name Dex service account name "argocd-dex-server"
dex.servicePortGrpc Server GRPC port 5557
dex.servicePortHttp Server HTTP port 5556
dex.tolerations Tolerations for use with node taints []
dex.volumeMounts Dex volume mounts "/shared"
dex.volumes Dex volumes {}

Redis

When Redis is completely disabled from the chart (redis.enabled=false) and an external Redis instance wants to be used or when Redis HA subcart is enabled (redis.enabled=true and redis-ha.enabled=true) but HA proxy is disabled redis-ha.haproxy.enabled=false Redis flags need to be specified through xxx.extraArgs

Parameter Description Default
redis.affinity Assign custom affinity rules to the deployment {}
redis.containerPort Redis container port 6379
redis.enabled Enable redis true
redis.image.imagePullPolicy Redis imagePullPolicy "IfNotPresent"
redis.image.repository Redis repository "redis"
redis.image.tag Redis tag "6.2.1-alpine"
redis.extraArgs Additional arguments for the redis-server. A list of flags. []
redis.name Redis name "redis"
redis.env Environment variables for the Redis server. []
redis.envFrom envFrom to pass to the Redis server. [] (See values.yaml)
redis.nodeSelector Node selector {}
redis.podAnnotations Annotations for the Redis server pods {}
redis.podLabels Labels for the Redis server pods {}
redis.priorityClassName Priority class for redis ""
redis.resources Resource limits and requests for redis {}
redis.securityContext Redis Pod Security Context See values.yaml
redis.servicePort Redis service port 6379
redis.tolerations Tolerations for use with node taints []
redis-ha Configures Redis HA subchart The properties below have been changed from the subchart defaults
redis-ha.enabled Enables the Redis HA subchart and disables the custom Redis single node deployment false
redis-ha.exporter.enabled If true, the prometheus exporter sidecar is enabled true
redis-ha.persistentVolume.enabled Configures persistency on Redis nodes false
redis-ha.redis.masterGroupName Redis convention for naming the cluster group: must match ^[\\w-\\.]+$ and can be templated argocd
redis-ha.redis.config Any valid redis config options in this section will be applied to each server (see redis-ha chart) ``
redis-ha.redis.config.save Will save the DB if both the given number of seconds and the given number of write operations against the DB occurred. "" is disabled ""
redis-ha.haproxy.enabled Enabled HAProxy LoadBalancing/Proxy true
redis-ha.haproxy.metrics.enabled HAProxy enable prometheus metric scraping true
redis-ha.image.tag Redis tag "6.2.1-alpine"

Using AWS ALB Ingress Controller With GRPC

If you are using an AWS ALB Ingress controller, you will need to set server.ingressGrpc.isAWSALB to true. This will create a second service with the annotation alb.ingress.kubernetes.io/backend-protocol-version: HTTP2 and modify the server ingress to add a condition annotation to route GRPC traffic to the new service.

Example:

server:
  ingress:
    enabled: true
    annotations: 
      alb.ingress.kubernetes.io/backend-protocol: HTTPS
      alb.ingress.kubernetes.io/listen-ports: '[{"HTTPS":443}]'
      alb.ingress.kubernetes.io/scheme: internal
      alb.ingress.kubernetes.io/target-type: ip
  ingressGrpc:
    enabled: true
    isAWSALB: true