kubernetes资源监控(二)——Metrics-server部署

一 资源监控

要扩展应用程序并提供可靠的服务,你需要了解应用程序在部署时的行为。 你可以通过检测容器检查 Kubernetes 集群中的应用程序性能, Pods, 服务 和整个集群的特征。 Kubernetes 在每个级别上提供有关应用程序资源使用情况的详细信息。 此信息使你可以评估应用程序的性能,以及在何处可以消除瓶颈以提高整体性能。

在 Kubernetes 中,应用程序监控不依赖单个监控解决方案。 在新集群上,你可以使用资源度量或 完整度量管道来收集监视统计信息。

二 资源度量管道

资源指标管道提供了一组与集群组件,例如 Horizontal Pod Autoscaler 控制器以及 kubectl top 实用程序相关的有限度量。 这些指标是由轻量级的、短期、内存存储的 metrics-server 收集的, 通过 metrics.k8s.io 公开。

度量服务器发现集群中的所有节点,并且查询每个节点的 kubelet 以获取 CPU 和内存使用情况。 Kubelet 充当 Kubernetes 主节点与节点之间的桥梁,管理机器上运行的 Pod 和容器。 kubelet 将每个 Pod 转换为其组成的容器,并在容器运行时通过容器运行时接口 获取各个容器使用情况统计信息。 kubelet 从集成的 cAdvisor 获取此信息,以进行旧式 Docker 集成。 然后,它通过 metrics-server Resource Metrics API 公开聚合的 pod 资源使用情况统计信息。 该 API 在 kubelet 的经过身份验证和只读的端口上的 /metrics/resource/v1beta1 中提供。

三 Metrics-Server部署

Metrics-Server是集群核心监控数据的聚合器,用来替换之前的heapster。

容器相关的 Metrics 主要来自于 kubelet 内置的 cAdvisor 服务,有了Metrics-Server之后,用户就可以通过标准的 Kubernetes API 来访问到这些监控数据。
Metrics API 只可以查询当前的度量数据,并不保存历史数据。
Metrics API URI 为 /apis/metrics.k8s.io/,在 k8s.io/metrics 维护。
必须部署 metrics-server 才能使用该 API,metrics-server 通过调用 Kubelet Summary API 获取数据。

Metrics Server 并不是 kube-apiserver 的一部分,而是通过 Aggregator 这种插件机制,在独立部署的情况下同 kube-apiserver 一起统一对外服务的。

kube-aggregator 其实就是一个根据 URL 选择具体的 API 后端的代理服务器。
kubernetes资源监控(二)——Metrics-server部署

1 镜像导入,上传

[root@server1 ~]# docker load -i metrics-server.tar 
3fa01eaf81a5: Loading layer   70.8MB/70.8MB
eade1f59b7c7: Loading layer  6.656kB/6.656kB
f42d4f3f41f7: Loading layer  18.55MB/18.55MB
e7ad03a7fd89: Loading layer  47.26MB/47.26MB
b17c160cf0a8: Loading layer  2.048kB/2.048kB
0369974182df: Loading layer  47.26MB/47.26MB
Loaded image: reg.westos.org/library/metrics-server:v0.5.0
[root@server1 ~]# docker tag reg.westos.org/library/metrics-server:v0.5.0 reg.westos.org/library/metrics-server:v0.5.0
[root@server1 ~]# docker push reg.westos.org/library/metrics-server:v0.5.0
The push refers to repository [reg.westos.org/library/metrics-server]
0369974182df: Pushed 
b17c160cf0a8: Pushed 
e7ad03a7fd89: Pushed 
f42d4f3f41f7: Pushed 
eade1f59b7c7: Pushed 
3fa01eaf81a5: Pushed 
v0.5.0: digest: sha256:423a707ad740b4966e14c5d66cbc9960874212cacc438a01469e59a6b48074e6 size: 1578

2 Metrics-server部署

[root@server2 metrics-server]# 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

3 处理报错

3.1 部署后查看Metrics-server的Pod日志:

错误1:dial tcp: lookup server2 on 10.96.0.10:53: no such host

这是因为没有内网的DNS服务器,所以metrics-server无法解析节点名字。可以直接修改coredns的configmap,讲各个节点的主机名加入到hosts中,这样所有Pod都可以从CoreDNS中解析各个节点的名字。加入解析

kubernetes资源监控(二)——Metrics-server部署

3.2 报错2:x509: certificate signed by unknown authority

Metric Server 支持一个参数 --kubelet-insecure-tls,可以跳过这一检查,然而官方也明确说了,这种方式不推荐生产使用。

启用TLS Bootstrap 证书签发

在所有节点签发证书

[root@server2 metrics-server]# vim /var/lib/kubelet/config.yaml 
[root@server2 metrics-server]# systemctl  restart kubelet.service 
[root@server2 metrics-server]# kubectl certificate approve csr-7t9q8
certificatesigningrequest.certificates.k8s.io/csr-7t9q8 approved
[root@server2 metrics-server]# kubectl certificate approve csr-rvgc4
certificatesigningrequest.certificates.k8s.io/csr-rvgc4 approved
[root@server2 metrics-server]# kubectl certificate approve csr-qgdn8
certificatesigningrequest.certificates.k8s.io/csr-qgdn8 approved
[root@server2 metrics-server]# kubectl certificate approve csr-t4p9j csr-tp6hm csr-tsmfw csr-v6wg6 
certificatesigningrequest.certificates.k8s.io/csr-t4p9j approved
certificatesigningrequest.certificates.k8s.io/csr-tp6hm approved
certificatesigningrequest.certificates.k8s.io/csr-tsmfw approved
certificatesigningrequest.certificates.k8s.io/csr-v6wg6 approved


4 查看状态

[root@server2 metrics-server]# kubectl -n kube-system get pod
NAME                              READY   STATUS    RESTARTS   AGE
coredns-7777df944c-fjqpt          1/1     Running   1          2d7h
coredns-7777df944c-hkr6d          1/1     Running   1          2d7h
etcd-server2                      1/1     Running   1          2d7h
kube-apiserver-server2            1/1     Running   1          2d7h
kube-controller-manager-server2   1/1     Running   1          2d7h
kube-flannel-ds-c8rh9             1/1     Running   1          2d3h
kube-flannel-ds-dkrqb             1/1     Running   1          2d3h
kube-flannel-ds-plvgj             1/1     Running   1          2d3h
kube-proxy-2kx7v                  1/1     Running   1          2d3h
kube-proxy-8n2dh                  1/1     Running   1          2d7h
kube-proxy-vsxxj                  1/1     Running   1          2d3h
kube-scheduler-server2            1/1     Running   1          2d7h
metrics-server-5567648887-42hjf   1/1     Running   0          17m
[root@server2 metrics-server]# kubectl get --raw "/apis/metrics.k8s.io/v1beta1/nodes/server2"
{"kind":"NodeMetrics","apiVersion":"metrics.k8s.io/v1beta1","metadata":{"name":"server2","creationTimestamp":"2021-08-03T10:50:44Z","labels":{"beta.kubernetes.io/arch":"amd64","beta.kubernetes.io/os":"linux","kubernetes.io/arch":"amd64","kubernetes.io/hostname":"server2","kubernetes.io/os":"linux","node-role.kubernetes.io/control-plane":"","node-role.kubernetes.io/master":"","node.kubernetes.io/exclude-from-external-load-balancers":""}},"timestamp":"2021-08-03T10:50:03Z","window":"1m0s","usage":{"cpu":"195602383n","memory":"1101112Ki"}}
[root@server2 metrics-server]# kubectl top node 
W0803 06:51:10.886728    3789 top_node.go:119] Using json format to get metrics. Next release will switch to protocol-buffers, switch early by passing --use-protocol-buffers flag
NAME      CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%   
server2   186m         9%     1075Mi          61%       
server3   44m          2%     511Mi           29%       
server4   54m          2%     562Mi           32%     
上一篇:Keras loss/metrics类中的reduction type


下一篇:Qt设置文字长度错过宽度时后面出现省略号