argo-cd icon indicating copy to clipboard operation
argo-cd copied to clipboard

Document minimum and suggested system requirements

Open kostis-codefresh opened this issue 5 years ago • 12 comments

It would be beneficial for operators if the documentation had some overview on minimum/suggested requirements in order to run ArgoCD

The following pages are good candidates for including this information https://argoproj.github.io/argo-cd/getting_started/ https://argoproj.github.io/argo-cd/operator-manual/

kostis-codefresh avatar Aug 17 '20 15:08 kostis-codefresh

@jessesuen @alexmt Our current OpenShift environment requires that we set limits and requests for memory and cpu. Have these been documented anywhere? Also, if not can you suggest requests and limits for cpu and memory as a starting point? Thanks.

trv-smaksym3 avatar Feb 16 '21 21:02 trv-smaksym3

So, could anybody (basing on previous experiences) join the discussion and at least specify them here on GitHub?

tomaszdudek7 avatar Aug 09 '21 10:08 tomaszdudek7

It is not easy to come with a one-size-fits-all recommendation (and that's why we don't deliver resource limits by default), because the requirements vary on a lot of factors.

For the application controller, you need to consider at least the following variables:

  • How many applications are being managed?
  • How many clusters are being managed?
  • How many APIs and resources are there in any of the managed clusters, and how big are those resources?
  • What is the tuning configuration regarding status- and operation-processors, kube parallelism limits, etc?

For the repository server, there are also quite a few variables to consider:

  • How big are your application manifests?
  • What tooling do you use (e.g. Helm, Kustomize, custom plugins, ...)
  • Did you scale out the repository server?
  • Do you allow concurrent processing of manifests?

The list goes on. The most simple one to size would most likely be the API server.

I see the demand in the community for guidance here, maybe some kind of documentation with a starting point would indeed be a good idea.

For example, consider the application controller in my vanilla K8s test cluster with ~115 apps managed on a single cluster:

image

As you can see, the controller consumes not that much memory resources at all, and probably you could easily set the limit to 500Mi or 1Gi. But I've seen installations (e.g. on OCP) that manage far less applications, but have a memory spike at startup of up to 2Gi.

So I hope that gives a hint about how difficult it is to come up with a recommendation that work for some but is not falling on the feet of many people.

jannfis avatar Aug 10 '21 06:08 jannfis

Has there been any progress on this? It is hard to estimate the cost of running Argo CD without knowing minimum resources

u2m4c6 avatar Aug 20 '21 15:08 u2m4c6

Imho it would help to get the minimal requirements for having an ArgoCD setup with 1 simple webapp and another setup with 1 app forcing ArgoCD to use a lot of resources so I can use this as a starting position (especially helpful in cloud setups). From there I can use monitoring to identify if I need more resources with growing app count.

chronicc avatar Aug 27 '21 14:08 chronicc

@kostis-codefresh thanks for the link

@u2m4c6 @chronicc @tomaszdudek7 I've sized and tuned my ArgoCD resources based on my Goldilocks recommendations - you can find my resource settings for my production ArgoCD (which manages a dozen+ apps) at my git repo below as well as my Goldilocks deployment too, which is a handy thing to run for all your k8s apps resource sizing:

https://github.com/harisekhon/kubernetes-configs

HariSekhon avatar Dec 07 '21 12:12 HariSekhon

I was sent here from Slack because I was asking the question about the minimum kubernetes version for particular argocd versions. In particular I have Openshift 3.11 here and try to find out what argo cd version will work. Any hints?

megabreit avatar Feb 01 '22 19:02 megabreit

In case it helps, here are my ArgoCD installation CPU and Memory consumption graphs (~100 Apps, 4 clusters): image image

CCOLLOT avatar Mar 14 '22 10:03 CCOLLOT

I'd very much like to see a couple of tests run with more information so that some accurate estimates can be made:

  • # of applications, with each application containing XYZ resources
  • does anything change if ArgoCD is running in 1 cluster (and hitting the API of others), or if you do other distributed architectures, such as applicationSet on 1 cluster, deploying applications to other clusters (also running ArgoCD)
  • startup time vs letting it idle
  • what happens if you have polling/syncing enabled (and at what frequency)
  • what does the usage look like with users hitting the UI?

Planning on rolling this out soon, so if someone beats me this, that's great! Otherwise I can post numbers in the coming months when we have this rolled out.

ghostsquad avatar Aug 01 '23 18:08 ghostsquad

I would also love to have reasonable defaults that should be enough for a smaller setup. I tried the commeted-out values from the values.yaml (https://github.com/argoproj/argo-helm/blob/main/charts/argo-cd/values.yaml), but it seems that e. g. the repoServer requests/limits are far too low, even for a smaller setup with just ~15 apps in one cluster, no large Git repo to fetch etc.

chris922 avatar Mar 16 '24 11:03 chris922

@chris922 would you mind sharing your average CPU & memory consumption of the whole argocd namespace ? I believe your usecase is the most appropriate for a basic "minimal requirements" suggestion for the hardware requirements of running argocd, i.e. a single cluster serving about 10 apps via argo.

adamency avatar Apr 20 '24 16:04 adamency

@chris922 would you mind sharing your average CPU & memory consumption of the whole argocd namespace ? I believe your usecase is the most appropriate for a basic "minimal requirements" suggestion for the hardware requirements of running argocd, i.e. a single cluster serving about 10 apps via argo.

I can't really share the real consumption here, anyhow my setup grew a bit and now I am managing a bit more than 30 apps with the following config. If someone has any recommendations what can be improved here or is unsuitable, feel free :)

controller:
  resources:
    limits:
      cpu: 1000m
      memory: 1536Mi
    requests:
      cpu: 500m
      memory: 1536Mi

dex:
  resources:
    limits:
      cpu: 50m
      memory: 64Mi
    requests:
      cpu: 10m
      memory: 64Mi

server:
  resources:
    limits:
      cpu: 200m
      memory: 256Mi
    requests:
      cpu: 100m
      memory: 256Mi

repoServer:
  resources:
    limits:
      cpu: 1000m
      memory: 1024Mi
    requests:
      cpu: 200m
      memory: 1024Mi

applicationSet:
  resources:
    limits:
      cpu: 100m
      memory: 128Mi
    requests:
      cpu: 100m
      memory: 128Mi

notifications:
  resources:
    limits:
      cpu: 100m
      memory: 128Mi
    requests:
      cpu: 100m
      memory: 128Mi

chris922 avatar May 08 '24 15:05 chris922