From ac1eadac45e7372d77f905c698f7e64808c4da8b Mon Sep 17 00:00:00 2001 From: LeaveMyYard Date: Mon, 9 Oct 2023 10:55:22 +0300 Subject: [PATCH] Add readme requirements for used metrics --- README.md | 31 +++++++++++++++++++++++-------- robusta_krr/core/models/config.py | 2 +- robusta_krr/core/runner.py | 3 ++- 3 files changed, 26 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index c06e3546..b7c3ecf2 100644 --- a/README.md +++ b/README.md @@ -87,6 +87,20 @@ Read more about [how KRR works](#how-it-works) and [KRR vs Kubernetes VPA](#diff ## Installation +### Requirements + +KRR requires you to have Prometheus, running either on your cluster or centralized. + +Additionally to that, [kube-state-metrics](https://github.com/kubernetes/kube-state-metrics) needs to be running on your cluster, as KRR is dependant on next metrics: + +- `container_cpu_usage_seconds_total` +- `container_memory_working_set_bytes` +- `kube_replicaset_owner` +- `kube_pod_owner` +- `kube_pod_status_phase` + +_Note: If one of last three metrics is absent KRR will still work, but will result in potentially worse results and raise a warning_ + ### With brew (MacOS/Linux): 1. Add our tap: @@ -193,9 +207,10 @@ krr simple -v ``` Other helpful flags: -* `--cpu-min` Sets the minimum recommended cpu value in millicores -* `--mem-min` Sets the minimum recommended memory value in MB -* `--history_duration` The duration of the prometheus history data to use (in hours) + +- `--cpu-min` Sets the minimum recommended cpu value in millicores +- `--mem-min` Sets the minimum recommended memory value in MB +- `--history_duration` The duration of the prometheus history data to use (in hours) More specific information on Strategy Settings can be found using @@ -209,15 +224,14 @@ krr simple --help With the [free Robusta SaaS platform](https://home.robusta.dev/) you can: -* See why KRR recommends what it does -* Sort and filter recommendations by namespace, priority, and more -* Copy a YAML snippet to fix the problems KRR finds +- See why KRR recommends what it does +- Sort and filter recommendations by namespace, priority, and more +- Copy a YAML snippet to fix the problems KRR finds ![Robusta UI Screen Shot][ui-screenshot]

(back to top)

- ## How it works ### Metrics Gathering @@ -431,9 +445,10 @@ python krr.py simple -p "https://prom-api.coralogix..." --coralogix_token ## Grafana Cloud managed Prometheus -For Grafana Cloud managed Prometheus you need to specify prometheus link, prometheus user, and an access token of your Grafana Cloud stack. The Prometheus link and user for the stack can be found on the Grafana Cloud Portal. An access token with a `metrics:read` scope can also be created using Access Policies on the same portal. +For Grafana Cloud managed Prometheus you need to specify prometheus link, prometheus user, and an access token of your Grafana Cloud stack. The Prometheus link and user for the stack can be found on the Grafana Cloud Portal. An access token with a `metrics:read` scope can also be created using Access Policies on the same portal. Next, run the following command, after setting the values of PROM_URL, PROM_USER, and PROM_TOKEN variables with your Grafana Cloud stack's prometheus link, prometheus user, and access token. + ```sh python krr.py simple -p $PROM_URL --prometheus-auth-header "Bearer ${PROM_USER}:${PROM_TOKEN}" --prometheus-ssl-enabled ``` diff --git a/robusta_krr/core/models/config.py b/robusta_krr/core/models/config.py index 6e7ae304..3d6aabc0 100644 --- a/robusta_krr/core/models/config.py +++ b/robusta_krr/core/models/config.py @@ -138,7 +138,7 @@ def set_config(config: Config) -> None: # NOTE: This class is just a proxy for _config. # Import settings from this module and use it like it is just a config object. -class _Settings(Config): +class _Settings(Config): # Config here is used for type checking def __init__(self) -> None: pass diff --git a/robusta_krr/core/runner.py b/robusta_krr/core/runner.py index f50f55f1..3c496346 100644 --- a/robusta_krr/core/runner.py +++ b/robusta_krr/core/runner.py @@ -145,7 +145,8 @@ async def _calculate_object_recommendations(self, object: K8sObjectData) -> RunR logger.warning( f"Was not able to load any pods for {object} from Prometheus.\n\t" "This could mean that Prometheus is missing some required metrics.\n\t" - "Loaded pods from Kubernetes API instead." + "Loaded pods from Kubernetes API instead.\n\t" + "See more info at https://github.com/robusta-dev/krr#requirements " ) metrics = await prometheus_loader.gather_data(