如何在Kubernetes中安装metrics-server以获取Node节点、Pod容器资源监控指标?

时间:2024-10-04 07:05:25

关注「WeiyiGeek」公众号

设为「特别关注」每天带你玩转网络安全运维、应用开发、物联网IOT学习!


本章目录:Kubernetes中安装metrics-server以获取客户端资源监控指标


原文地址: /2022/


0x01 Kubernetes中安装metrics-server以获取客户端资源监控指标

描述: 通常在集群安装完成后,我们需要对其设置持久卷、网络存储等插件, 除此之外我们还需安装metrics-server以便于获取Node与Pod相关资源消耗等信息,否则你在执行kubectl top命令时会提示error: Metrics API not available, 所以本小节将针对Metrics-server的安装进行讲解。

项目地址: /kubernetes-sigs/metrics-server

Q: 什么是metrics-server?

Metrics Server 是 Kubernetes 内置自动缩放管道的可扩展、高效的容器资源指标来源。
Metrics Server 从 Kubelets 收集资源指标,并通过 Metrics API 在 Kubernetes apiserver 中公开它们,供 Horizontal Pod Autoscaler 和 Vertical Pod Autoscaler 使用。

简单的说: Metrics Server 是集群解析监控数据的聚合器,安装后用户可以通过标准的API(/apis/metrics.)来访问监控数据,此处值得注意的是Metrics-Server并非kube-apiserver的一部分,而是通过Aggregator这种插件机制,在独立部署的情况下同kube-apiserver一起统一对外服务的,当进行api请求时kube-aggregator统一接口会分析访问api具体的类型,帮我们负载到具体的api上。

  1. GET /apis/metrics./V1beta1
  2. |
  3. Kube-aggregator
  4. | | |
  5. Kube-apiserver Metrics-server another-add-onapiserver

Metrics Server 特点:

  • 适用于大多数集群的单一部署(请参阅要求)

  • 快速自动缩放,每 15 秒收集一次指标。

  • 资源效率,集群中每个节点使用 1 mili 的 CPU 核心和 2 MB 的内存。

  • 可扩展支持多达 5,000 个节点集群。

Metrics Server 功能:( 水平扩展必备)

  • 基于CPU/内存的水平自动缩放

  • 自动调整/建议容器所需的资源

Metrics Server 访问流程图

温馨提示: 我们可以通过 kubectl top 命令来访问 Metrics API 获取资源监控相关数据。
温馨提示: 注意 Metrics API 只可以查询当前度量数据,并不保存历史数据。

安装使用
步骤 Server 可以直接从 YAML 清单安装,也可以通过官方 Helm 图表安装。

  1. # 下载 YAML 清单
  2. wget https:///kubernetes-sigs/metrics-server/releases/latest/download/
  3. # 提前下载相应的镜像加快部署
  4. grep "image:"
  5. # image: /metrics-server/metrics-server:v0.6.1
  6. # 由于其镜像国内无法访问此处我们采用阿里云镜像源
  7. sed -i 's#/metrics-server#/google_containers#g'
  8. # 部署资源清单
  9. kubectl apply -f
  10. # serviceaccount/metrics-server created
  11. ......
  12. # ./. created

步骤 Server 默认是安装在kube-system名称空间下,我们可以查看其deployment、Pod运行以及SVC情况。

  1. # 1.部署清单状态查看
  2. kubectl get deploy,pod,svc -n kube-system -l k8s-app=metrics-server
  3. # NAME READY UP-TO-DATE AVAILABLE AGE
  4. # /metrics-server 1/1 1 0 91s
  5. # NAME READY STATUS RESTARTS AGE
  6. # pod/metrics-server-6ffc8966f5-cf2qh 1/1 Running 0 91s
  7. # NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
  8. # service/metrics-server ClusterIP 10.96.28.153 <none> 443/TCP 91s
  9. # 2.注册到K8S集群中的 metrics. API 查看
  10. kubectl get . | grep "metrics"
  11. # . kube-system/metrics-server True 14h

步骤 03.查看各个节点以及Pod的资源指标(CPU/MEM)

  1. $ kubectl top node
  2. NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
  3. master-223 102m 2% 1147Mi 61%
  4. master-224 119m 2% 2188Mi 57%
  5. master-225 139m 3% 3773Mi 48%
  6. node-1 54m 1% 921Mi 49%
  7. node-2 61m 1% 824Mi 44%
  8. # 默认名称空间中Pod的资源信息
  9. $ kubectl top pod
  10. NAME CPU(cores) MEMORY(bytes)
  11. hello-nginx-7f4ff84cb-mjw79 0m 6Mi
  12. nginx-web-0 0m 6Mi
  13. nginx-web-1 0m 5Mi

问题解决:

问题1.部署 metrics-server 资源清单后 Pod 状态为 0/1 并报出annot validate certificate for 10.10.107.223 because it doesn't contain any IP SANs"错误问题解决。

  • 错误信息:

  1. $ kubectl describe pod -n kube-system metrics-server-6ffc8966f5-cf2qh
  2. # Warning Unhealthy 8s (x17 over 2m27s) kubelet Readiness probe failed: HTTP probe failed with statuscode: 500
  3. $ kubectl logs -f --tail 50 -n kube-system metrics-server-6ffc8966f5-cf2qh
  4. # E0520 11:13:17.379944 1 scraper.go:140] "Failed to scrape node" err="Get \"https://10.10.107.226:10250/metrics/resource\": x509: cannot validate certificate for 10.10.107.226 because it doesn't contain any IP SANs" node="node-1"
  5. # E0520 11:13:17.382948 1 scraper.go:140] "Failed to scrape node" err="Get \"https://10.10.107.223:10250/metrics/resource\": x509: cannot validate certificate for 10.10.107.223 because it doesn't contain any IP SANs" node="master-223"
  • 问题原因: 由于 metrics-server 未获得TLS Bootstrap 签发证书的导致访问各节点资源时报错。

  • 解决办法: 启用 TLS BootStrap 证书签发

  1. # 1.分别在 Master 与 Node 节点中启用TLS BootStrap 证书签发,在 kubelet 的 yaml 配置中追加入如下K/V.
  2. # 方式1.Kubeadm 搭建的集群
  3. $ vim /var/lib/kubelet/
  4. ...
  5. serverTLSBootstrap: true
  6. # 方式2.二进制搭建的集群(注意此路径根据你的进行配置), 此处我们定义的路径为 /etc/kubernetes/cfg/
  7. $ tee -a /etc/kubernetes/cfg/ <<'EOF'
  8. serverTLSBootstrap: true
  9. EOF
  10. # 2.最后分别重启各个节点kubelet服务即可
  11. systemctl daemon-reload && systemctl restart
  12. # 3.查看节点的证书签发请求
  13. kubectl get csr
  14. # NAME AGE SIGNERNAME REQUESTOR REQUESTEDDURATION CONDITION
  15. # csr-2m5d6 2m27s /kubelet-serving system:node:master-223 <none> Pending
  16. # csr-ff7vb 19m /kubelet-serving system:node:master-225 <none> Pending
  17. # csr-gg8gq 86s /kubelet-serving system:node:master-224 <none> Pending
  18. # csr-56k9s 55s /kubelet-serving system:node:node-1 <none> Pending
  19. # csr-dmghl 3s /kubelet-serving system:node:node-2 <none> Pending
  20. # 4.手动允许节点证书签发请求
  21. kubectl certificate approve csr-2m5d6
  22. kubectl certificate approve csr-56k9s
  23. kubectl certificate approve csr-ff7vb
  24. kubectl certificate approve csr-gg8gq
  25. # ./csr-gg8gq approved
  26. # 5.查看签发的 certificate 特征
  27. kubectl get csr csr-dmghl
  28. # NAME AGE SIGNERNAME REQUESTOR REQUESTEDDURATION CONDITION
  29. # csr-dmghl 10m /kubelet-serving system:node:node-2 <none> Approved,Issued

本文至此完毕,更多技术文章,尽情期待下一章节!


原文地址: /2022/


 往期相关文章

1.还不会部署高可用的kubernetes集群?看我手把手教你使用二进制部署v1.23.6的K8S集群实践(上)

2.还不会部署高可用的kubernetes集群?看我手把手教你使用二进制部署v1.23.6的K8S集群实践(下)

Jenkins Pipeline 流水线如何根据代仓库的 webhook 自动触发拉取提交的分支代码并构建?

如何在 Kubernetes 中进行 ingress-nginx 配置优化以及HTTP请求速率限制

如何配置Kubernetes仪表板dashboard支持http方式并使用ingress-nginx代理访问实践

在k8s集群中Kubernetes仪表板dashboard使用RABC机制限制指定用户针对指定名称空间中的资源进行管理实践

Let'sEncrypt快速颁发及自动续签泛域名证书实践指南


欢迎各位志同道合的朋友一起学习交流,如文章有误请在下方留下您宝贵的经验知识,个人邮箱地址【master#】或者个人公众号【WeiyiGeek】联系我。

更多文章来源于【WeiyiGeek Blog 个人博客 - 为了能到远方,脚下的每一步都不能少 】

个人主页: 【 】

博客地址: 【  】


专栏书写不易,如果您觉得这个专栏还不错的,请给这篇专栏 【点个赞、投个币、收个藏、关个注,转个发,留个言】(人间六大情),这将对我的肯定,谢谢!

  • echo  "【点个赞】,动动你那粗壮的拇指或者芊芊玉手,亲!"

  • printf("%s", "【投个币】,万水千山总是情,投个硬币行不行,亲!")

  • ("【收个藏】,阅后即焚不吃灰,亲!")  

  • ("【转个发】,让更多的志同道合的朋友一起学习交流,亲!")

  • ("【关个注】,后续浏览查看不迷路哟,亲!")

  • cout << "【留个言】,文章写得好不好、有没有错误,一定要留言哟,亲! " << endl;

更多网络安全、系统运维、应用开发、全栈文章,尽在【个人博客 - 】站点,谢谢支持!

    帅哥、美女、大佬们点个【赞+在看】吧! ????

↓????↓ 点击【"阅读原文"】,即可获取更多知识!