如何查看各节点的资源使用情况? 如何监控kubernetes集群资源?自kubernetes 1.8开始,资源使用指标(如容器 CPU 和内存使用率)通过 Metrics API 在 Kubernetes 中获取。在我使用1.16的时候kubernetes集群资源监控heaspter已经被废弃了,现在采用 metrics-server 来代替,metrics-server 是集群范围资源使用数据的聚合器,实现了Resource Metrics API,通过从 kubelet 公开的 Summary API 中采集指标信息。
heaspter弃用时间线
这是Heapster弃用的(建议的)时间表。对时间轴所做的任何更改都将在此处反映。请注意,这是官方Heapster信息库的时间表。鼓励各个发行版在弃用Heapster时效仿,但可以继续自己支持。
Kubernetes Release | Action | Policy/Support |
---|---|---|
Kubernetes 1.11 | 开始弃用 | 没有添加新功能或接收器。可能会进行错误修复。 |
Kubernetes 1.12 | 设置删除 | 删除了通过Kubernetes安装脚本安装Heapster的可选选项。 |
Kubernetes 1.13 | Removal | 没有新的bug修复。移至kubernetes退休的组织。 |
Metrics-server
metrics-server是kubernetes监控体系中的核心组件之一,它负责从kubelet收集资源指标,然后对这些指标监控数据进行聚合(依赖kube-aggregator),并在Kubernetes Apiserver中通过Metrics API(/apis/metrics.k8s.io/
)公开暴露它们,但是metrics-server只存储最新的指标数据(CPU/Memory)。但是并不会将指标转发给第三方目标。如果使用Metrics-server需要对集群做一些特殊的配置,但是这些配置不是集群安装时候默认配置好的,所以你的集群需要满足这些要求:
- 你的kube-apiserver要能访问到metrics-server
- 需要kube-apiserver启用聚合层
- 组件要有kubectl的认证配置并且绑定到Metrics-server
- Pod / Node指标需要由Summary API通过Kubelet公开
在kube-apiserver中启用聚合层,需要修改Kube-apiserver的一些配置选项,可以参考官方启用聚合层文档:
--requestheader-client-ca-file=<path to aggregator CA cert>
--requestheader-allowed-names=front-proxy-client
--requestheader-extra-headers-prefix=X-Remote-Extra-
--requestheader-group-headers=X-Remote-Group
--requestheader-username-headers=X-Remote-User
--proxy-client-cert-file=<path to aggregator proxy cert>
--proxy-client-key-file=<path to aggregator proxy key>
Kubernetes集群中有些组件依赖资源指标API(metric API)的功能,比如kubectl top
、HPA和VPA。如果没有资源指标API接口,这些组件无法运行。
部署Metrics-server
首先准备需要的文件
# mkdir ./metrics-server
# cd $_
# for file in aggregated-metrics-reader.yaml auth-delegator.yaml auth-reader.yaml metrics-apiservice.yaml metrics-server-deployment.yaml metrics-server-service.yaml resource-reader.yaml; do wget https://raw.githubusercontent.com/kubernetes-sigs/metrics-server/master/deploy/kubernetes/$file;done
修改metrics-server-deployment.yaml
清单文件
containers:
- name: metrics-server
image: registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server-amd64:v0.3.6
command:
- /metrics-server
- --v=4 # 打印详细日志为了debug,你也可以调成2
- --kubelet-insecure-tls
- --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
imagePullPolicy: Always
应用修改后的metrics-server配置清单
# kubectl apply -f .
查看metrics-server是否安装成功
# kubectl get pods -n kube-system
# kubectl top nodes
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
dev-k8s-01.kubemaster.top 306m 7% 4406Mi 57%
dev-k8s-02.kubemaster.top 158m 1% 6034Mi 38%
dev-k8s-03.kubemaster.top 160m 2% 5377Mi 34%
dev-k8s-04.kubemaster.top 102m 2% 1579Mi 20%
dev-k8s-05.kubemaster.top 63m 1% 1804Mi 22%
# kubectl top pods -n kube-system
这样我们就完成了metrics-server的安装。当你安装了metrics-server并且查看容器已经运行的时候,你使用kubectl top nodes
出现
error: metrics not available yet
或者出现以下情况的时候,你需要在等待一会,或者将--v
调成4查看日志信息。
kubectl top pods -n kube-system
W0325 23:14:22.797456 38581 top_pod.go:266] Metrics not available for pod kube-system/coredns-5644d7b6d9-96xm6, age: 3145h55m0.797446s
常见的issue,参考: