k8s-resources-cli

module
v0.0.9 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 24, 2024 License: Apache-2.0

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

Directories

Path Synopsis
pkg
api

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL