Kubernetes 部署 Metrics-Server

Deploying Kubernetes Metrics-Server

Posted by alovn on December 6, 2020

Metrics Server 是 Kubernetes 的容器资源指标来源, 它可以采集到节点和 Pod 的内存、磁盘、CPU、网络使用率等信息。

Metrics Server 从 Kubelet 收集资源指标,可通过 Metrics API 在 Kubernetes apiserver 访问,指标数据还可供 Pod 自动扩缩容使用。通过 kubectl top 命令可以查询集群资源利用信息。如果你试着运行 kubectl top, 可能会收到以下提示:

1
2
$ kubectl top node
error: Metrics API not available

Kubernetes 并没有内置安装它,而是作为 Kubernetes 集群的附加组件,需要我们自己安装,通过以下方式安装并运行 Metrics Server:

1
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.4.1/components.yaml

注意依赖的镜像是(如果下载不到可以用其它的镜像源替代):

1
k8s.gcr.io/metrics-server/metrics-server:v0.4.1

不过 apply 后发现 Pod 并没有启动起来, 看来有坑,查下原因:

1
2
3
4
5
$ kubectl logs metrics-server-5d5c49f488-xqp2b -n kube-system

server.go:132] unable to fully scrape metrics: [unable to fully scrape metrics from node s1003.lab.org: 
unable to fetch metrics from node s1003.lab.org: Get "https://172.16.10.13:10250/stats/summary?only_cpu_and_memory=true": 
x509: cannot validate certificate for 172.16.10.13 because it doesn't contain any IP SANs]

10250是节点上kubelet的端口,应该是metrics-server从节点上kubelet收集数据时遇到证书的问题,再看下yaml声明文件里 metrics-server 启动 的参数 –cert-dir=/tmp,可见并没有证书。通过查看源码 https://github.com/kubernetes-sigs/metrics-server/blob/master/cmd/metrics-server/app/options/options.go 发现可以通过设置参数 kubelet-insecure-tls 允许不安全的https方式访问。那么就可以下载yaml声明文件并增加启动参数解决:

1
- --kubelet-insecure-tls //启用不安全的https

更新后重新部署:

1
2
3
kubectl apply -f components.yaml
//验证一下
kubectl get pods -n kube-system -o wide

确认安装完成 metrics-server 并正常运行后,可以查看集群的信息:

1
2
kubectl top node
kubectl top pod

参考文档

Kubernetes Metrics-Server

metrics-server options