- The goal of HVPA is to re-use the upstream components HPA and VPA as much as possible for scaling components horizontally and vertically respectively.
- HPA for recommendation and scaling horizontally.
- VPA for recommendation for scaling vertically.
- Where there are gaps in using HPA and VPA simultaneously to scale a given component, introduce functionality to fill those gaps.
- HPA and VPA are recommended to be mixed only in case HPA is used for custom/external metrics as mentioned here. But in some scenarios it might make sense to use them both even for CPU and memory (e.g.
kube-apiserveror ingress etc.) - VPA updates the pods directly (via webhooks) which may confuse HPA (especially, when used for the same scaling metrics) as it may not see the changes in the upstream
targetRefs.
- HPA and VPA are recommended to be mixed only in case HPA is used for custom/external metrics as mentioned here. But in some scenarios it might make sense to use them both even for CPU and memory (e.g.
- Where there is functionality missing in either HPA or VPA, introduce them to provide more flexibility during horizontal and vertical scaling. Especially, for the components that experience disruption during scaling.
- Horizontally and vertically silmultaneously
- Support for configurable (at the resource level) threshold levels to trigger VPA (and possibly HPA) updates to minimize unnecessary scaling of components. Especially, if scaling is disruptive
- Support for configurable (at the resource level) stabilisation time window in both the directions (up/down) to stabilize scaling of components. Especially, if scaling is disruptive
- Support for configurable maintenance window for scaling (especially, scaling in/down) for components that do not scale well smoothly (mainly,
etcd, but to a lesser extentkube-apiserveras well forWATCHrequests). This could be as an alternative or complementary to the stabilisation window mentioned above - Custom resource support for VPA updates.
- At the beginning, this would be with some well-defined annotations to describe which part of the CRD to update the resource requests.
- But eventually, we can think of proposing a
Resourcesubresource (per container) along the lines ofScalesubresource.
- It is not a goal of HVPA to duplicate the functionality of the upstream components like HPA and VPA.
See the design documentation in the ./docs/ here.
🚧 Work in progress
[DEPRECATED] See here.
[DEPRECATED] See here.