-
Notifications
You must be signed in to change notification settings - Fork 510
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
k8s: increase the kube-api-server QPS from 5/10 to 10/20 #2436
k8s: increase the kube-api-server QPS from 5/10 to 10/20 #2436
Conversation
This changes the default setting for EKS v1.22+ where API Priority & Fairness is available and there is a specific queue for kubelet health.
In testing increasing from 5 QPS to 10 QPS effectively halves the overall time for 100 pods to become ready on a single node from 67.5 to 32.8 seconds while also halving the time for the first pod to become ready from to 22 seconds to 10 second. Any change in the kubelet QPS settings is scaled by the number of nodes in each cluster. This poses a risk that we can overwhelm the kube-api-server by increasing the amount of traffic received from kubelet running on each node. The primary mitigation to this risk is that for K8s v1.20+ the API Priority & Fairness feature is enabled in EKS. This added to Kubernetes the concept of priority levels where requests in different priority levels cannot starve each other. In v1.22+ specifically there is a separate queue for K8s health checks which will prevent increased load from pod churn from interfering with Kubelet health reporting. The increase here is small while realizing most of the benefit, which further decreases negative impact risks. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This changes the default setting for EKS v1.22+
These kubelet configs are also used in non-EKS K8s variants as well, e.g. metal-k8s-*
, vmware-k8s-*
.
I think increasing the defaults still makes sense. I also agree with the assessment that the benefits here outweighs any potential downsides.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Very nice! 🏃🏼
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I really appreciate the focus on metrics and data here. Looks like a nice win.
Thanks! I don't have permissions on this repo to merge, so feel free to merge whenever. |
I'm merging since all tests passed (thanks @tzneal!) |
Issue number:
N/A
Description of changes:
This changes the default setting for EKS v1.22+ where API Priority & Fairness is available and there is a specific queue for kubelet health.
Testing done:
cargo make unit-tests
andTerms of contribution:
By submitting this pull request, I agree that this contribution is dual-licensed under the terms of both the Apache License, version 2.0, and the MIT license.