This is a short note on how to install metrics-server using Helm on my k8s cluster.

$ kubectl version
Client Version: v1.29.3
Kustomize Version: v5.0.4-0.20230601165947-6ce0bf390ce3
Server Version: v1.29.3

$ helm version --short
v3.14.4+g81c902a

Before we can install the chart, we will need to add the metrics-server repo to Helm.

$ helm repo add metrics-server https://kubernetes-sigs.github.io/metrics-server/

Update the repo:

$ helm repo update
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "metrics-server" chart repository
Update Complete. ⎈Happy Helming!⎈

I also need to make a small customization to the chart’s default value since my k8s cluster uses self-signed certificates.

But first, run the following command to get the default values:

$ helm show values metrics-server/metrics-server > /tmp/metrics-server.values.yml

Then make change to the /tmp/metrics-server.values.yml file to add the --kubelet-insecure-tls to the args:

args:
  - --kubelet-insecure-tls

Now, we’re ready to install the chart. I decided to install it into its own namespace called metrics-server:

$ helm install metrics-server metrics-server/metrics-server --create-namespace --namespace metrics-server --values /tmp/metrics-server.values.yml
NAME: metrics-server
LAST DEPLOYED: Tue Apr 23 10:32:28 2024
NAMESPACE: metrics-server
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
***********************************************************************
* Metrics Server                                                      *
***********************************************************************
  Chart version: 3.12.1
  App version:   0.7.1
  Image tag:     registry.k8s.io/metrics-server/metrics-server:v0.7.1
***********************************************************************

A short moment later, let’s verify if the deployment was successful.

$ kubectl get pods -n metrics-server
NAME                              READY   STATUS    RESTARTS   AGE
metrics-server-8549dcfdd6-nrgls   1/1     Running   0          37s

$ kubectl top node
NAME       CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%
kmaster    137m         6%     1182Mi          70%
kworker1   41m          4%     664Mi           57%
kworker2   23m          2%     669Mi           57%

Reference: