argoproj / argo-cd

Declarative Continuous Deployment for Kubernetes
https://argo-cd.readthedocs.io
Apache License 2.0
18.04k stars 5.51k forks source link

Document minimum and suggested system requirements #4110

Open kostis-codefresh opened 4 years ago

kostis-codefresh commented 4 years ago

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/

trv-smaksym3 commented 3 years ago

@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.

tomaszdudek7 commented 3 years ago

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

jannfis commented 3 years ago

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:

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

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.

u2m4c6 commented 3 years ago

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

chronicc commented 3 years ago

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.

HariSekhon commented 2 years ago

@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

megabreit commented 2 years ago

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?

CCOLLOT commented 2 years ago

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

ghostsquad commented 1 year ago

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

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.

chris922 commented 8 months ago

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.

adamency commented 7 months ago

@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.

chris922 commented 6 months ago

@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
andrii-korotkov-verkada commented 1 week ago

Since it depends a lot on the specific workload, like number of clusters and apps, I think the general approach is "monitor usage, tune resources to be enough, have alerts on exceeding resources or approaching that". I don't think a doc is necessary here. Please, let me know if you disagree.

megabreit commented 1 week ago

We saw some recommendations for resource consumption. Great. Better than nothing, but a minimum recommendations does not depend one any workload. So it could and should be documented. But I'm still missing some info about minimum and/or recommended k8s (or Openshift) versions. Which ist even more important, imho. Anyone?

andrii-korotkov-verkada commented 1 week ago

Manifests have some default configuration for resources which I assume is a default recommended one. Is this not the case?

megabreit commented 1 week ago

It was not the case when this issue was created. Did you change it? And why is the k8s version still not discussed?

andrii-korotkov-verkada commented 1 week ago

Ah, they actually do not, my bad. They were coming from custom overlays in setup I saw. I'll try to raise a PR to add those.

andrii-korotkov-verkada commented 1 week ago

@jannfis, @crenshaw-dev, what do you think about using requests from the @chris922's comment above as a baseline, updating our specs? I'm not sure about setting limits, but requests seem reasonable to me.