Open kostis-codefresh opened 4 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.
So, could anybody (basing on previous experiences) join the discussion and at least specify them here on GitHub?
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:
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.
Has there been any progress on this? It is hard to estimate the cost of running Argo CD without knowing minimum resources
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.
@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:
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?
In case it helps, here are my ArgoCD installation CPU and Memory consumption graphs (~100 Apps, 4 clusters):
I'd very much like to see a couple of tests run with more information so that some accurate estimates can be made:
applicationSet
on 1 cluster, deploying applications to other clusters (also running ArgoCD)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.
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 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 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
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.
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?
Manifests have some default configuration for resources which I assume is a default recommended one. Is this not the case?
It was not the case when this issue was created. Did you change it? And why is the k8s version still not discussed?
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.
@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.
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/