A kubectl
plugin to show the differences between the recommendations of a VerticalPodAutoscaler
and the actual resources requests of the targeted controller's pod(s).
The plugin is compatible with Kubernetes servers starting from version 1.16, which have the autoscaling.k8s.io/v1
API group installed. See the other prerequisites for using VPAs on your cluster.
With Krew
Follow these instructions to install krew
. Then run the following commands:
$ kubectl krew install vpa-recommendation
$ kubectl vpa-recommendation --help
Head to the releases page to download an existing release for your OS/arch, and add the path to the binary to your $PATH
.
To build the plugin yourself from the source, use the following commands:
$ git clone git@github.com:wI2L/kubectl-vpa-recommendation.git
$ cd kubectl-vpa-recommendation
$ make build
It creates a single binary file for the host machine platform/architecture in the dist/
folder. Move it somewhere within your $PATH
, such as $GOPATH/bin
. You can then invoke it directly (kubectl-vpa-recommendation
), or via kubectl
(kubectl vpa-recommendation
).
The columns % CPU DIFF
and % MEMORY DIFF
represents the percentage of increase/decrease for the request in terms of the recommendation.
For example, if a request value is set to 4 CPU (4000m
), and the recommendation is only 1 CPU (1000m
), the difference printed is +300%
. On the contrary, if the request (125m
) is lower than the recommendation (250m
), the difference is then -50%
. As a rule of thumb, you can think of positive values as over commitment and negative values as under commitment.
The following examples were produced from a brand-new Kubernetes cluster created with k3d
. The VerticalPodAutoscaler
resources were automatically created by the goldilocks
operator.
Apart from the flags defined by the genericclioptions
package and some logging flags, the following options are available with the plugin:
--all-namespaces
,-A
: ListVerticalPodAutoscaler
resources in all namespaces--critical-threshold
: Critical threshold of percentage difference for colored output. Default to50
--namespace
,-n
: If present, the namespace scope for the request--no-colors
: Do not use colors to highlight increase/decrease percentage values--no-headers
: Do not print table headers--output
,-o
: Output format. One of:wide
|split
|split-wide
--recommendation-type
: The type of recommendation to use in comparisons. One of:lower-bound
,target
,uncapped-target
,upper-bound
. Default totarget
- see
RecommendedContainerResources
for more details about the fields represented by each value
- see
--show-containers
,-c
: Display containers recommendations for eachVerticalPodAutoscaler
resource--show-kind
,-k
: Show the resource type for the requested object(s) and their target--show-namespace
: Show resource namespace as the first column--sort-columns
: Comma-separated list of column names for sorting the table. Any of:cpu-diff
|cpu-rec
|cpu-req
|mem-diff
|mem-rec
|mem-req
|name
|namespace
|target
. Default tonamespace,name
--sort-order
: The sort order of the table columns. Eitherasc
ordesc
. Default toasc
--warning-threshold
: Warning threshold of percentage difference for colored output. Default to20
To view the full list of available options, use the following command:
$ kubectl vpa-recommendation --help
- Unlike the official VPA recommender, which is fully generic and handle any kind of "scalable" resources, the plugin recognize only some well-known controllers such as:
CronJob
,DaemonSet
,Deployment
,Job
,ReplicaSet
,ReplicationController
,StatefulSet
.
This plugin is licensed under the MIT license. See the LICENSE file.