Categorygithub.com/maksim-paskal/k8s-resources-cli

# README

Kubernetes resource advisor

This tool helps you to find the right resources for your Kubernetes pods.

Install prometheus

To test this tool you need to install prometheus.

helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update

helm upgrade prometheus prometheus-community/prometheus \
--install \
--namespace=prometheus \
--create-namespace \
--set nodeExporter.enabled=false \
--set alertmanager.enabled=false \
--set pushgateway.enabled=false \
--set kube-state-metrics.resources.requests.cpu=10m \
--set kube-state-metrics.resources.requests.memory=50Mi \
--set configmapReload.prometheus.enabled=false \
--set server.strategy.type=Recreate \
--set server.resources.requests.cpu=100m \
--set server.resources.requests.memory=1Gi \
--set server.global.scrape_interval=15s \
--set server.retention=3d

# prometheus will be available on this ip
kubectl -n prometheus get svc prometheus-server -o go-template='{{ .spec.clusterIP }}'

Install latest k8s-resources-cli

Go to https://github.com/maksim-paskal/k8s-resources-cli/releases/latest and install binnary to your operating system.

MacOS

brew install maksim-paskal/tap/k8s-resources-cli

Linux

# for example install v0.0.6 on linux amd64
sudo curl -L -o /usr/local/bin/k8s-resources-cli https://github.com/maksim-paskal/k8s-resources-cli/releases/download/v0.0.6/k8s-resources-cli_0.0.6_linux_amd64

# make it executable
sudo chmod +x /usr/local/bin/k8s-resources-cli

Calculate pod resources to all pods in cluster

k8s-resources-cli \
-kubeconfig=$HOME/.kube/config \
-prometheus.retention=3d \
-strategy=aggressive \
-prometheus.url=http://$(kubectl -n prometheus get svc prometheus-server -o go-template='{{ .spec.clusterIP }}')

For pod resources requests recommendations are used at the 50th percentile of resources. For pod resources limits recommendations it depends on chosen strategy it can be aggressive - this strategy will try to find container resources limits with 99th percentile of resource usage and conservative strategy - it will try to find container resources limits with maximum resource usage.

Example output:

PodName                                 |ContainerName          |MemoryRequest    |MemoryLimit      |CPURequest |CPULimit
---------------------------------------------------------------------------------------------------------------------------
coredns-5b6f598c6b-nht4q                |coredns                |70Mi / 30.90Mi   |170Mi / 32.21Mi  |100m / 5m  |0 / 8m
fluentd-gcw28                           |fluentd                |200Mi / 183.85Mi |200Mi / 190.61Mi |100m / 8m  |100m / 76m
local-path-provisioner-84bb864455-m7vjn |local-path-provisioner |0 / 14.30Mi      |0 / 14.90Mi      |0 / 1m     |0 / 1m
metrics-server-ff9dbcb6c-hfbrx          |metrics-server         |70Mi / 30.98Mi   |0 / 31.82Mi      |100m / 8m  |0 / 11m

columns show current container resources memory and cpu usage and / recommended values based on strategy.

Examples of usage

Detect resources usage of containers in namespace
k8s-resources-cli \
-kubeconfig=$HOME/.kube/config \
-prometheus.retention=3d \
-strategy=aggressive \
-prometheus.url=http://$(kubectl -n prometheus get svc prometheus-server -o go-template='{{ .spec.clusterIP }}') \
-namespace=kube-system
Detect resources usage of containers that are running on some node
k8s-resources-cli \
-kubeconfig=$HOME/.kube/config \
-prometheus.retention=3d \
-strategy=aggressive \
-prometheus.url=http://$(kubectl -n prometheus get svc prometheus-server -o go-template='{{ .spec.clusterIP }}') \
-filter=.NodeName==somenode
Detect resources usage of containers in namespace with pod labels
k8s-resources-cli \
-kubeconfig=$HOME/.kube/config \
-prometheus.retention=3d \
-strategy=aggressive \
-prometheus.url=http://$(kubectl -n prometheus get svc prometheus-server -o go-template='{{ .spec.clusterIP }}') \
-namespace=kube-system \
-podLabelSelector=k8s-app=kube-dns
Detect resources usage of containers in some external kubernetes cluster
k8s-resources-cli \
-kubeconfig=$HOME/.kube/external-cluster-config \
-prometheus.retention=3d \
-strategy=aggressive \
-prometheus.url=https://external-cluster-prometheus.domain.com \
-prometheus.user=basic-auth-user \
-prometheus.password=basic-auth-password \
-namespace=kube-system

# Packages

Copyright [email protected] Licensed under the Apache License, Version 2.0 (the "License") you may not use this file except in compliance with the License.
No description provided by the author