Metrics server deployment for Kubernetes
The metric server is one of the components in the core metrics pipeline of Kubernetes monitoring architecture. The metric server collects metrics from Kubelets and exposes them through the Kubernetes Apiserver via its metric API. These metrics are then read by tools like kubectl top, the horizontal and vertical pod autoscaler (HPA and VPA). The metric server only stores the very latest values of the metrics that are used for the core metrics pipeline (e.g. CPU, memory) and is not for forwarding metrics and third party targets.
Deploying the metrics server to your cluster is fairly easy. In order to deploy metrics-server in your cluster run the following command from the top-level directory of this repository:
kubectl apply -f deploy/kubernetes/
That’s it!
Fixing “no metrics known for node” error for kubernetes metrics server
As for me, in some cases the metrics server is unable to scrape metrics from the kubelet due to dns issues. If you encounter the following error in the logs of the metrics server
unable to fetch node metrics for node no metrics known for node
you want to add the following additional flags to the deploy/kubernetes/metrics-server-deployment.yaml
file:
containers:
- name: metrics-server
image: gcr.azk8s.cn/google_containers/metrics-server-amd64:v0.3.6
args:
- --cert-dir=/tmp
- --secure-port=4443
# fix "no metrics known for node" error
# first you need to ensure that the kubernetes node hostname can be resolved normally in the cluster dns (coredns)
# refs: https://github.com/kubernetes-sigs/metrics-server/issues/143
- --kubelet-preferred-address-types=InternalDNS,InternalIP,ExternalDNS,ExternalIP,Hostname
- --kubelet-insecure-tls