Running Kubernetes Resource Recommender (KRR) in a container

Running KRR in a container can be easier than installing it and its Python dependencies locally.

Docker

docker run --tty --rm --network host -v ~/.kube/config:/root/.kube/config:ro us-central1-docker.pkg.dev/genuine-flight-317411/devel/krr:latest python krr.py

Host networking is used to allow KRR to connect to Prometheus on localhost via kubectl port-forward

Bash alias

This command can, of course, also be added as a Bash alias.

alias krr='docker run --tty --rm --network host -v ~/.kube/config:/root/.kube/config:ro us-central1-docker.pkg.dev/genuine-flight-317411/devel/krr:latest python krr.py'

K9s plugin

It can also be used within K9s by modifying the community plugin example as shown in the following diff.

@@ -19,7 +19,7 @@
       - -c
       - |
         LABELS=$(kubectl get $RESOURCE_NAME $NAME -n $NAMESPACE  --context $CONTEXT  --show-labels | awk '{print $NF}' | awk '{if(NR>1)print}')
-        krr simple --cluster $CONTEXT --selector $LABELS
+        docker run --tty --rm -v ~/.kube/config:/root/.kube/config:ro --network host us-central1-docker.pkg.dev/genuine-flight-317411/devel/krr:latest python krr.py simple --cluster $CONTEXT --selector $LABELS -p http://localhost:9090
         echo "Press 'q' to exit"
         while : ; do
         read -n 1 k <&1
@@ -38,7 +38,7 @@
     args:
       - -c
       - |
-        krr simple --cluster $CONTEXT -n $RESOURCE_NAME
+        docker run --tty --rm -v "~/.kube/config:/root/.kube/config:ro" --network host us-central1-docker.pkg.dev/genuine-flight-317411/devel/krr:latest python krr.py simple --cluster $CONTEXT -n $RESOURCE_NAME -p http://localhost:9090
         echo "Press 'q' to exit"
         while : ; do
         read -n 1 k <&1