Kubernetes Metrics Server
Metrics Server 是 Kubernetes 内置自动缩放管道的可扩展、高效的容器资源指标来源。
Metrics Server 从 Kubelets 收集资源指标,并通过 Metrics API 在 Kubernetes apiserver 中公开它们,供 Horizontal Pod Autoscaler 和 Vertical Pod Autoscaler 使用。 Metrics API 也可以通过 kubectl top 访问,从而更容易调试自动缩放管道。
Metrics Server 不适用于非自动缩放目的。例如,不要使用它来将指标转发给监控解决方案,或作为监控解决方案指标的来源。在这种情况下,请直接从 Kubelet /metrics/resource 端点收集指标。
Metrics Server 提供:
- 适用于大多数集群的单一部署(请参阅要求)
- 快速自动缩放,每 15 秒收集一次指标。
- 资源效率,集群中每个节点使用 1 mili 的 CPU 核心和 2 MB 的内存。
- 可扩展支持多达 5,000 个节点集群。
安装 Metrics Server
下载 yaml 文件
$ wget https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
通过将 --kubelet-insecure-tls
传递给 Metrics Server 来禁用证书验证
kind: Deployment
spec:
spec:
containers:
- args:
- --kubelet-insecure-tls
...
修改 deployment 的镜像为国内镜像
安装
$ kubectl apply -f components.yaml
serviceaccount/metrics-server created
clusterrole.rbac.authorization.k8s.io/system:aggregated-metrics-reader created
clusterrole.rbac.authorization.k8s.io/system:metrics-server created
rolebinding.rbac.authorization.k8s.io/metrics-server-auth-reader created
clusterrolebinding.rbac.authorization.k8s.io/metrics-server:system:auth-delegator created
clusterrolebinding.rbac.authorization.k8s.io/system:metrics-server created
service/metrics-server created
deployment.apps/metrics-server created
apiservice.apiregistration.k8s.io/v1beta1.metrics.k8s.io created
查看运行状态
$ kubectl get pod -n kube-system
NAME READY STATUS RESTARTS AGE
calico-kube-controllers-7fcddf9954-vtl7g 1/1 Running 0 5d8h
calico-node-f4qw9 1/1 Running 0 5d8h
calico-node-qs2lc 1/1 Running 0 5d8h
calico-node-tsslv 1/1 Running 0 5d8h
coredns-6d8c4cb4d-cgm4f 1/1 Running 0 5d8h
coredns-6d8c4cb4d-mzzq6 1/1 Running 0 5d8h
etcd-m1 1/1 Running 1 5d8h
kube-apiserver-m1 1/1 Running 1 5d8h
kube-controller-manager-m1 1/1 Running 1 5d8h
kube-proxy-bf6ns 1/1 Running 0 5d8h
kube-proxy-rsrkp 1/1 Running 0 5d8h
kube-proxy-vbv49 1/1 Running 0 5d8h
kube-scheduler-m1 1/1 Running 1 5d8h
metrics-server-8f99c487b-8qgpg 1/1 Running 0 41s
查看 metrics-server 或资源指标 API (metrics.k8s.io
) 是否已经运行
$ kubectl get apiservices | grep metrics
v1beta1.metrics.k8s.io kube-system/metrics-server True 52s
获取指标数据
获取 Pod 及 node 指标数据
$ kubectl top pod
NAME CPU(cores) MEMORY(bytes)
nginx 0m 3Mi
$ kubectl top node
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
m1 206m 4% 2884Mi 33%
w1 135m 3% 1893Mi 21%
w2 115m 2% 1582Mi 18%