Coder Social home page Coder Social logo

wi2l / kubectl-vpa-recommendation Goto Github PK

View Code? Open in Web Editor NEW
35.0 3.0 3.0 763 KB

kubectl plugin to compare VPA recommendations to actual resources requests

License: MIT License

Makefile 2.16% Go 97.84%
kubectl kubectl-plugin kubectl-plugins vpa verticalpodautoscaler autoscaling

kubectl-vpa-recommendation's Introduction

kubectl vpa-recommendation

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.

Installation

With Krew

Follow these instructions to install krew. Then run the following commands:

$ kubectl krew install vpa-recommendation
$ kubectl vpa-recommendation --help

Manual download

Head to the releases page to download an existing release for your OS/arch, and add the path to the binary to your $PATH.

Build from source

โš ๏ธ The plugin requires Go 1.17+ to build.

To build the plugin yourself from the source, use the following commands:

$ git clone [email protected]: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).

Usage

How to interpret the output?

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.

Demo

The following examples were produced from a brand-new Kubernetes cluster created with k3d. The VerticalPodAutoscaler resources were automatically created by the goldilocks operator.

Single namespace

example1

Wide output (all namespaces)

example2

Options

Apart from the flags defined by the genericclioptions package and some logging flags, the following options are available with the plugin:

  • --all-namespaces, -A: List VerticalPodAutoscaler resources in all namespaces
  • --critical-threshold: Critical threshold of percentage difference for colored output. Default to 50
  • --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 to target
  • --show-containers, -c: Display containers recommendations for each VerticalPodAutoscaler 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 to namespace,name
  • --sort-order: The sort order of the table columns. Either asc or desc. Default to asc
  • --warning-threshold: Warning threshold of percentage difference for colored output. Default to 20

To view the full list of available options, use the following command:

$ kubectl vpa-recommendation --help

Limitations

  • 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.

License

This plugin is licensed under the MIT license. See the LICENSE file.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.