Skip to content
Report Kubernetes cluster and pod resource requests vs usage and generate static HTML
Branch: master
Clone or download
hjacobs Clean up (#87)
* OutputManager to remember written files

* clean up stale files in output dir
Latest commit 94c3754 May 20, 2019
Type Name Latest commit message Commit time
Failed to load latest commit information.
deploy v0.12 May 18, 2019
kube_resource_report Clean up (#87) May 20, 2019
sample-report refactor to Python package (#25) Jul 22, 2018
tests use pykube-ng (#70) Mar 3, 2019
.gitignore Add some tests (#59) Dec 3, 2018
.travis.yml More tests (#60) Dec 3, 2018
Dockerfile allow custom links e.g. to monitoring tools (#67) Mar 2, 2019
LICENSE add README Feb 7, 2018
Makefile Add some tests (#59) Dec 3, 2018
Pipfile use pykube-ng (#70) Mar 3, 2019
Pipfile.lock Application page (#79) May 11, 2019
README.rst v0.10 May 11, 2019 #24 reduce Docker image size Jul 22, 2018
tox.ini Travis CI Jun 3, 2018


Kubernetes Resource Report

Travis CI Build Status Code Coverage Docker pulls

This version only supports node costs for AWS EC2 (all regions, On Demand, Linux)

Script to generate a HTML report of CPU/memory requests vs. usage (collected via Metrics API/Heapster) for one or more Kubernetes clusters.

Want to see how the report looks? Check out the sample HTML report!

What the script does:

  • Discover all clusters (either via ~/.kube/config, via in-cluster serviceAccount, or via custom Cluster Registry REST endpoint)
  • Collect all cluster nodes and their estimated costs (AWS only)
  • Collect all pods and use the application or app label as application ID
  • Get additional information for each app from the application registry (team_id and active field)
  • Group and aggregate resource usage and slack costs per cluster, team and application
  • Allow custom links to existing systems (e.g. link to a monitoring dashboard for each cluster)


The usage requires Pipenv (see below for alternative with Docker):

$ pipenv install && pipenv shell
$ mkdir output
$ python3 -m kube_resource_report output/ # uses clusters defined in ~/.kube/config
$ OAUTH2_ACCESS_TOKENS=read-only=mytok python3 -m kube_resource_report --cluster-registry= output/ # discover clusters via registry
$ OAUTH2_ACCESS_TOKENS=read-only=mytok python3 -m kube_resource_report --cluster-registry= output/ --application-registry= # get team information

The output will be HTML files plus multiple tab-separated files:

Main HTML overview page, links to all other HTML pages.
List of cluster summaries with number of nodes and overall costs.
List of potential savings (CPU/memory slack).
List of ingress host rules (informational).
List of all pods and their CPU/memory requests and usages.

Deploying to Minikube

This will deploy a single pod with kube-resource-report and nginx (to serve the static HTML):

$ minikube start
$ kubectl apply -f deploy/
$ pod=$(kubectl get pod -l application=kube-resource-report -o jsonpath='{.items[]}')
$ kubectl port-forward $pod 8080:80

Now open http://localhost:8080/ in your browser.

Running as Docker container

$ kubectl proxy & # start proxy to your cluster (e.g. Minikube)
$ # run kube-resource-report and generate static HTML to ./output (this trick does not work with Docker for Mac!)
$ docker run -it --user=$(id -u) --net=host -v $(pwd)/output:/output hjacobs/kube-resource-report:0.10 /output

Application Registry

The optional application registry can provide information per application ID, it needs to have a REST API like:

$ curl -H 'Authorization: Bearer <mytok>'<application-id>
"team_id": "<team-id>",
"active": true

See the script in the sample-report folder for an example implementation.

Custom Links

The generated report can be enhanced with custom links to existing systems, e.g. to link to monitoring dashboards or similar. This currently works for clusters, teams, and applications. Custom links can be specified by providing the --links-file option which must point to a YAML file with the links per entity. Example file:

- href: "{name}"
  title: "Grafana dashboard for cluster {name}"
  icon: chart-area
- href: "{id}"
  title: "Grafana dashboard for application {id}"
  icon: chart-area
- href: "{id}"
  title: "Go to detail page of application {id}"
  icon: search
- href: "{id}"
  title: "Search team {id} on people.mycorp"
  icon: search

For available icon names, see the Font Awesome gallery with free icons.

You can’t perform that action at this time.