You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Am writing a doc on scaling controllers and realising there's a footgun in the default unlimited concurrency implemented by controller::Config, unlimited is great until you start having heavy load and THEN it starts breaking (as you hit apiserver limits via throttling, memory limits via OOMs).
Describe the solution you'd like
It is probably better if by default we make this dial use a default based on how much CPU is given to the pod running the controller.
This can be done by doing a multiple of the value received form num_cpus::get for instance (which reads cgroup limits). Maybe a default with a minimum of 2 or 4 would be good? Normally folloing num cores exactly is not great since we usually use way less than that for most controllers.
default 1 concurrency (feels sluggish in most cases)
Documentation, Adoption, Migration Strategy
must be noted in releases and kube.rs docs
Target crate for feature
kube-runtime
The text was updated successfully, but these errors were encountered:
clux
added
runtime
controller runtime related
unstable
feature that unstable feature gating
question
Direction unclear; possibly a bug, possibly could be improved.
and removed
unstable
feature that unstable feature gating
labels
Apr 20, 2024
Would you like to work on this feature?
yes
What problem are you trying to solve?
Am writing a doc on scaling controllers and realising there's a footgun in the default unlimited concurrency implemented by
controller::Config
, unlimited is great until you start having heavy load and THEN it starts breaking (as you hit apiserver limits via throttling, memory limits via OOMs).Describe the solution you'd like
It is probably better if by default we make this dial use a default based on how much CPU is given to the pod running the controller.
This can be done by doing a multiple of the value received form
num_cpus::get
for instance (which reads cgroup limits). Maybe a default with a minimum of 2 or 4 would be good? Normally folloing num cores exactly is not great since we usually use way less than that for most controllers.Solutions from the GO world allow accomplishing the same thing by injecting evars:
https://blog.howardjohn.info/posts/gomaxprocs/
It would be nicer to do this by default.
Describe alternatives you've considered
Documentation, Adoption, Migration Strategy
must be noted in releases and kube.rs docs
Target crate for feature
kube-runtime
The text was updated successfully, but these errors were encountered: