-
Notifications
You must be signed in to change notification settings - Fork 4.1k
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
VPA: Implement in-place updates support #7673
base: master
Are you sure you want to change the base?
Conversation
Hi @maxcao13. Thanks for your PR. I'm waiting for a kubernetes member to verify that this patch is reasonable to test. If it is, they should reply with Once the patch is verified, the new status will be reflected by the I understand the commands that are listed here. Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository. |
This PR may require API review. If so, when the changes are ready, complete the pre-review checklist and request an API review. Status of requested reviews is tracked in the API Review project. |
/ok-to-test |
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 is just my first review after going through all the changes. I will go over it multiple times, but these are my initial comments for now.
vertical-pod-autoscaler/pkg/utils/annotations/vpa_inplace_update.go
Outdated
Show resolved
Hide resolved
vertical-pod-autoscaler/pkg/apis/autoscaling.k8s.io/v1/types.go
Outdated
Show resolved
Hide resolved
vertical-pod-autoscaler/pkg/updater/eviction/pods_eviction_restriction.go
Outdated
Show resolved
Hide resolved
vertical-pod-autoscaler/pkg/updater/eviction/pods_eviction_restriction.go
Show resolved
Hide resolved
vertical-pod-autoscaler/pkg/updater/priority/update_priority_calculator.go
Outdated
Show resolved
Hide resolved
vertical-pod-autoscaler/pkg/updater/priority/update_priority_calculator.go
Outdated
Show resolved
Hide resolved
vertical-pod-autoscaler/pkg/updater/priority/update_priority_calculator.go
Outdated
Show resolved
Hide resolved
vertical-pod-autoscaler/pkg/updater/priority/update_priority_calculator.go
Outdated
Show resolved
Hide resolved
vertical-pod-autoscaler/pkg/updater/priority/update_priority_calculator.go
Outdated
Show resolved
Hide resolved
6ea7337
to
53d4006
Compare
Appreciate the review! I will respond to the other comments tomorrow, just wanted to get the easy stuff out of the way and less cluttered. |
Sure, take your time |
vertical-pod-autoscaler/pkg/updater/eviction/pods_eviction_restriction.go
Outdated
Show resolved
Hide resolved
This is an important note/question. It may just be me being confused about the AEP details, but AFAIK there is no way for a user to guarantee that a resize request will be disruptonless. We can only guarantee that a resize will be disruptful (by configuring container resize restart policy). So how can we dictate the resizing type based on the conditions in the AEP? e.g. in the AEP it states
Since the conditions are different, how can we actually make sure the first set of actions will actually be disruption free? I think this problem requires the need for a third resizePolicy |
This will be affected by KEP-1287 update in 1.33: kubernetes/enhancements#5089
|
2fa0144
to
e739fd9
Compare
const ( | ||
// VpaInPlaceUpdatedLabel is a label used by the vpa inplace updated annotation. | ||
VpaInPlaceUpdatedLabel = "vpaInPlaceUpdated" | ||
) |
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.
Is this a label or an annotation?
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 copied the style from here:
autoscaler/vertical-pod-autoscaler/pkg/utils/annotations/vpa_observed_containers.go
Line 29 in 54fe60e
VpaObservedContainersLabel = "vpaObservedContainers" |
label
since it was written 6 years ago, but it probably makes more sense to be VpaInPlaceUpdatedAnnotationKey
or something.
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.
There are quite a few TODO comments. Is this PR ready for merge?
00f6db4
to
c35d9ca
Compare
Because of kubernetes#7813, this commit reverts a lot of the changes that introducted logic that involved actuating in-place updates based on the containerResizePolicy. Signed-off-by: Max Cao <[email protected]>
Signed-off-by: Max Cao <[email protected]>
c35d9ca
to
2a777c8
Compare
2a777c8
to
b8648eb
Compare
This is probably ready for review now. Note:
/retitle VPA: Implement in-place updates support tagging reviewers: Thanks everyone! EDIT March 12:
|
Fantastic work, Max! I'll try to set aside some time this weekend to review it. |
2b47412
to
348b5ee
Compare
Allows feature gates to be added to the updater binary with the `--feature-gates=` arg. Signed-off-by: Max Cao <[email protected]>
Updates updater unit tests. Also bump k8s.io/component-base to 0.32.2 in order to import k8s.io/component-base/featuregate/testing package. Also introduce a clock to the updater object in order to easily mock it during tests. Signed-off-by: Max Cao <[email protected]>
Reverts the change that takes containerStatuses resources in to account when calculating update priority. This change, along with along VPA to use containerStatuses when calculating recommendations themselves, should instead be included in a future enhancement and potentially feature-gated. Signed-off-by: Max Cao <[email protected]>
Modified the deploy-for-e2e-locally.sh script to patch the updater deployment with using a FEATURE_GATES env var. This commit does not change CI yet. Signed-off-by: Max Cao <[email protected]>
Adds logic to vpa admission webhook to deny requests creating VPAs with InPlaceOrRecreate update mode without enabling feature gate. Also adds admission e2e logic to wait for the vpa-webhook to be registered before starting the test. Signed-off-by: Max Cao <[email protected]>
348b5ee
to
8044ed7
Compare
Latest force push just renames the feature gate to |
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.
Couple quick questions, need to take more time to dive into things deeply again.
- "" | ||
resources: | ||
- pods/resize | ||
- pods |
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.
curious why we still need patch
on the pod itself, isn't pods/resize
sufficient?
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.
It should be sufficient for resizing, but in order to patch the annotations onto the pod itself, I need that rule as well. Previously, when the admission-controller does it's own annotation (vpaObservedContainers
), it can just include the annotation in the webhook pod mangling, but the updater can't do that on its own.
Whether we want to use this new annotation or not is a different story though. It's purely for cosmetic reasons as noted in this comment: #7673 (comment), but the vpaObservedContainers
annotation is actually used in GetUpdatePriority
. Curious what people think.
kind: Cluster | ||
apiVersion: kind.x-k8s.io/v1alpha4 | ||
featureGates: | ||
InPlacePodVerticalScaling: true |
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.
should we update with the new name?
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.
That feature gate is for the unfortunately named KEP-1287 API to work, not our VPA one
After conversing with @raywainman,, I'm going to split this PR up into separate PRs like this: -> New Feature flags functionality: #7932 and then merge them into this new feature branch: https://github.com/kubernetes/autoscaler/tree/in-place-updates This is to make reviewing easier and make better incremental progress. Anyone is still welcome to review this PR until that migration is done, but we won't merge this anymore. I'll link the new PRs in this comment as they are created, and in the PR description as well. At the end, we will merge that feature branch in to main. |
/hold |
What type of PR is this?
Depends on: #7813
Depends on: #7896
Depends on: #7901
/kind feature
/kind api-change
NOTE: This PR is being broken into smaller reviewable pieces and then merged into a feature branch.
See below for the list that will be updated as PRs are created:
InPlaceOrRecreate
feature gate #7932What this PR does / why we need it:
This PR is an attempt to implement VPA in-place vertical scaling according to AEP-4016. It uses the VPA updater to actuate recommendations by sending
resize
patch requests to pods which allows in-place resize as enabled by theInPlacePodVerticalScaling
feature flag in k8s 1.27.0 alpha and above (or by eventual graduation).It includes some e2e tests currently according to the AEP, but I am sure we will probably need more.
Also introduces
feature-gates
to VPA, and includes the first feature-gateInPlaceOrRecreate
which allows the use ofInPlaceOrRecreate
update mode.This PR is a continuation of #6652 started by @jkyros with a cleaner git commit history.
Which issue(s) this PR fixes:
Fixes #4016
Special notes for your reviewer:
Notable general areas of concern:
See this comment about the potential need for a thirdcontainerResize
policy that currently does not exist in the k8s api.Needs more attention on how disruptive/disruption-free updates (should affect)/(are affected) byPodDisruptionBudgets
.For now, there are many many TODOs literred throughout the code which need attention from reviewers/maintainers. A lot is because of design decisions I probably shouldn't make on my own. I resolved some of John's TODOs but he still has relevant comments that need to be addressed as well. I am using the TODOs as the "special notes for your reviewer" section, if people would like a comment somewhere which lays them all out nicely, I'm more than happy to make one.Does this PR introduce a user-facing change?
Additional documentation e.g., KEPs (Kubernetes Enhancement Proposals), usage docs, etc.: