-
Notifications
You must be signed in to change notification settings - Fork 219
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
min capacity draft #62
Conversation
If I understand it correctly this would only provision capacity up to whatever minimum was defined? If I have an existing provisioner which is already managing 20cpu of compute and I set If we implement headroom using similar code to what you have here and re-using my example from above, by setting |
yeah, our need was to have a min capacity, not a buffer |
Thoughts on building this capability via a separate CRD? I see this usecase as fundamentally different. Static Capacity vs Dynamic Capacity. |
I'd not want to create a new CRD since this
|
This is an interesting idea to as a similar mechanism to "limits". Essentially, we have a ceiling today, but not a floor. What type of capacity would you expect for the floor. How big should the nodes be? Which zones should they be launched in? We'd love to collaborate on this. Can you ping me on slack and we can discuss next steps? |
... so maybe doing |
How does this interact with consolidation / expiry? |
The extra nodes would expire same as all others. |
One thing we discussed in working group was using negative preemption pods to solve this problem. These pods would be included in scale out calculations, but wouldn't themselves trigger scale out unless there were positive preemption pods. Similarly, we wouldn't consolidate nodes with negative preemption pods, but we would terminate a node if it only had negative preemption pods. |
That sounds good to me. |
I also thought about the problem yesterday since we would have something like pre-warming nodes and schedule them so I can say from My initial idea was to use a Kubernetes cronjob, placing a pause container with the fitting requests for CPU and Memory for the workload and have a configurable shutdown of the pause container (this is similar to pre-emption pods) To be able for the perfect fitting, we need the option to specify the CPU and Memory for the fake pods. |
Karpenter knows how much cpu/mem daemonsets use so it could schedule up to the biggest possible pods to fit onto the biggest supported instance type. |
Daemonset are definitely an interesting way to do node overhead! @tzneal |
It is not enough to have Without implementing all these requirements better to stay on overprovisioning dirty hack and manage it outside of Karpenter as for now it's more flexible. |
|
I think this change warrants a design. See https://karpenter.sh/v0.20.0/contributing/design-guide/ |
Hey @grosser, thanks a ton for discussing with us on this PR. Unfortunately I don't think we'll be accepting this PR, due to the amount of design unknowns that come with this. There's a lot of moving parts in the deprovisioning logic where adding static capacity could create some funky circumstances. All in all, if you're willing to help work on this design, please come talk with us in https://kubernetes.slack.com/archives/C04JW2J5J5P, we're more than willing to help get you up to speed on the current state of the project. |
feat: allow setting minimum capacity per provisioner
fix: #749
Description
rough draft of how I think having a min capacity could work
... alternatively this could be done via "min nodes" setting and then computing that times the highest (or average) cpu of the matching instance types, but means more indirection
How was this change tested?
not
By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.