Kubernetes 边缘节点抓不到监控指标?试试这个方法!
KubeSphere v3.1.0 通过集成 KubeEdge,将节点和资源的管理延伸到了边缘,也是 KubeSphere 正式支持边缘计算的第一个版本。
笔者也第一时间搭建和试用了边缘节点相关的功能,但是在边缘节点纳管之后遇到了一些监控的小问题,在排查过程中也顺带了解了一下 KubeSphere 对于边缘节点的监控原理,发出来和大家分享,方便其他的开发者能够更快的排查问题或进行二次开发。
环境版本和构成
通过 KubeKey 安装,参数如下,其余组件版本默认未改动。
Kubernetes : v1.19.8
KubeSphere : v3.1.0
主机名称 | 角色 |
---|---|
k8s-worker-03 | worker |
k8s-worker-02 | master |
k8s-worker-01 | master,etcd |
问题现象
通过生成的 keadm 命令行将边缘节点加入集群,并在边缘节点上部署 POD,该 POD 的监控信息不能显示。
监控原理
定位和解决问题之前,肯定是要先搞懂工作原理。
1. KubeEdge
KubeEdge 的 Edgecore 组件对 Kubelet 进行了轻量化改造,Edgecore 和 Cloudcore(云端)也不在同一个 Cluster 网络中,通过 k8s 默认的方式进行 metrics 获取肯定是行不通的(logs 和 exec 原理相同)。
当前 KubeEdge 的实现方法是 kube-apiserver 上的 iptables 转发给云端的 Cloudcore,Cloudcore 通过和 Edgecore 之间的 WebSocket 通道向边缘端进行消息和数据传递。
KubeEdge 官方的使用手册和文档:https://kubeedge.io/en/docs/advanced/metrics/
为了便于大家理解,作者画了一张图,整体的流程请参考如下:
2. Metrics-server
原生的 K8S 中就是通过 Metrics-server 这个官方组件进行节点和 POD 的 CPU/Memory 等数据的监控。
简而言之,Metrics-server 通过 Pull 的方式去每个节点上拉取监控数据,放在自身的内存中,提供 K8S 的 API 供 kubectl top 这样的 client 来查询。
Metrics-server 的详细设计,可以参考 github 的官方说明:https://github.com/kubernetes-sigs/metrics-server
Metrcis-server 的启动参数中,有一个参数要特别说明一下:"kubelet-use-node-status-port"。
在 KubeEdge 的官方文档中,也提到了启动 Metrics-server 时要指定该参数,至于原因文档中并未提及,这里简单说明一下。这个参数的意思是:“调用 kubelet 服务时,用该 Node 上报的 port,而不是默认的 port”。我们知道 kubelet 的 metrcis 接口默认是监听在 10250 端口的,而 KubeEdge 的 edgecore 将 metrics 接口默认监听在 10350 端口,如果不加这个参数,metrice-server 就会通过类似"edgenodeIP:10250/stat/summary"这样的请求去获取监控数据,结果肯定获取失败的。
我们通过 KubeSphere 环境的 yaml 文件,也能清晰地看到这一点配置:
3. KubeSphere
上面讲到了,Metrics-server 已经从 KubeEdge 那里获取到了边缘节点的监控数据,那么 KubeSphere 只要从 Metrics-server 提供的 K8S API 中即可获取到边缘节点的实时监控数据用来在前端进行展示。
稍微翻了一下 KubeSphere 的代码,和我们的预想是一致的,KubeSphere 通过 metrics-server 拿到了当前版本展示的监控数据。
4. EdgeWatcher
从上述第 1 点 KubeEdge 的工作原理来看,是需要在 kube-apiserver 所在的节点上进行 iptables 转发规则设置的(将所有 10350 的请求都转发给 Cloudcore 的 10003 端口进行处理)。
那么每一个边缘节点加入集群的时候不可能由运维人员手动进行 iptables 的规则设置,所以 KubeSphere 就自研了 EdgeWatcher 这样一个组件。这个组件的目的应该是有以下几点:
- 提供 kubeedge group API(添加边缘节点时前端调用该 group API)
- 边缘节点加入集群时,设置 IPtables 规则(logs exec metrics 都需要)
- 验证边缘节点指定的 IP 是否可用,IP 需要全局唯一
EdgeWatcher 暂未开源,作者从社区转载了下面这张 EdgeWatcher 的工作原理图,供大家参考:
关于边缘节点 IP 需要全局唯一的问题,作者还是有很多想说的,后续有时间再开一篇,和大家一起探讨。
5. 总体概览
其实通过对上述监控组件的了解,我们也基本能勾勒出 KubeSphere v3.1 在基于 KubeEdge 的边缘集成中,所作的努力和工作。下面是作者简单画的一张整体组件架构的图,供大家参考:
问题定位
既然原理都搞清楚了,下面就简单说一下定位的过程和思路。
1. Metrics-server
首先我们判断 metrics-server 有没有正常提供服务,能不能获取到边缘数据。
从下面的命令结果可以看出,边缘节点(k8s-agent)的监控数据和非边缘节点的 POD 的监控数据都是没有问题的。
只有边缘节点上的 POD 的监控数据获取不到。
2. KubeEdge
再来看 KubeEdge 提供的 10350 端口的 metrics 服务,有没有问题。
我们可以看到,KubeEdge 的 edgecore 提供的 10350 端口的服务也是没有问题的,可以从中获取到边缘节点和边缘 POD(nginx-xxx)的监控数据。
3. 总结
从上面的分析可以得出以下结论:
- Metrcis-server 没问题
- KubeEdge 的 edgecore 在边缘节点的服务没问题
- cloudcore 和 edgecore 之间的通路没有问题(通过查看 edgecore 的日志,可以看到 stat/summary 的调用,但是 POD 的监控数据调用则没有)
最后再去确认其他可以获取边缘 POD 节点的信息,发现只有 docker 版本的差别,出问题的是 v18.09.1,而正常的节点版本如下:
至此,基本能断定是 docker 版本过低造成的,至于是哪个接口和 metrics-server 不能兼容,就不花太多时间去调查分析,有经验的开发者可以留言共享一下。
结论
基于这个问题,我们对 Docker 版本进行了测试,最终确认在 Kubesphere v3.1、 metrics-server 版本(v0.4.2)、 KubeEdge v1.6.1 的场景下,Docker 版本要大于等于 v19.3.0 才能支持边缘 POD 的监控。KubeEdge 官方最新版本 v1.7.1 已经发布,从 v1.6.2 的 Changelog 来看,该问题已经被修复了。造成该 pod metrics 丢失的原因,应该是 edgecore 使用的 K8s 版本过低导致的。详情可参考官方 KubeEdge v1.6.2的 Changelog。
后记
虽然问题不是很大,但是通过这个小问题能把边缘监控的脉络搞清楚,是比问题本身更有意义的。
通过这样的分析和总结,问题定位和二次开发的效率才会更高,希望我们社区的开发者一起把 KubeSphere 做得更好更完善。
本文由博客一文多发平台 OpenWrite 发布!
Kubernetes 边缘节点抓不到监控指标?试试这个方法!的更多相关文章
- pull push 监控指标
Prometheus 原理介绍 - 知乎 https://zhuanlan.zhihu.com/p/70090800 Prometheus由Go语言编写而成,采用Pull方式获取监控信息,并提供了多维 ...
- CDN边缘节点容器调度实践(下)
5月27日,OSC 源创会在上海成功举办.又拍云系统开发高级工程师黄励博在大会分享了<CDN 边缘节点容器调度的实践>.主要介绍又拍云自主开发的边缘节点容器调度方案,从 0 到 1 ,实现 ...
- 边缘节点服务ENS重磅升级 阿里云首次定义“边缘云计算”概念层层深入
随着5G.物联网时代的到来以及云计算应用的逐渐增加,传统集中式的云计算技术已经无法满足终端侧“大连接,低时延,大带宽”的需求.结合边缘计算的概念,云计算将必然发展到下一个技术阶段,也就是将云计算的能力 ...
- 国内首个全域边缘节点服务发布,阿里云助力企业把握5G机遇
7月24日,阿里云峰会开发者大会在上海世博中心举办.作为2019年首场最受瞩目的云计算开发者大会,阿里云携一众云计算技术大牛与开发者面对面,探讨各自领域的技术干货与前沿趋势.同时,也发布了多项重大重磅 ...
- 【转载】apache kafka系列之-监控指标
原文地址:http://blog.csdn.net/lizhitao/article/details/24581907 1.监控目标 1.当系统可能或处于亚健康状态时及时提醒,预防故障发生 2.报警提 ...
- apache kafka系列之-监控指标
apache kafka中国社区QQ群:162272557 1.监控目标 1.当系统可能或处于亚健康状态时及时提醒,预防故障发生 2.报警提示 a.短信方式 b.邮件 2.监控内容 2.1 机器监控 ...
- CDN边缘节点容器调度实践(上)
又拍云容器云是基于 Docker 的分布式计算资源网,节点分散在全国各地及海外,提供电信.联通.移动和多线网络,融合微服务.DevOps 理念,满足精益开发.运维一体化,大幅降低分布式计算资源构建复杂 ...
- Hadoop记录- zookeeper 监控指标
目前zookeeper获取监控指标已知的有两种方式: 1.通过zookeeper自带的 four letter words command 获取各种各样的监控指标 2.通过JMX Client连接zo ...
- Hadoop记录-Hadoop集群重要监控指标
通用监控指标 对于每个RPC服务应该监控 RpcProcessingTimeAvgTime(PRC处理的平均时间) 通常hdfs在异常任务突发大量访问时,这个参数会突然变得很大,导致其他用户访问hdf ...
- 三、安装并配置Kubernetes Node节点
1. 安装并配置Kubernetes Node节点 1.1 安装Kubernetes Node节点所需服务 yum -y install kubernetes 通过yum安装kubernetes服 ...
随机推荐
- 【转载】 vscode如何在最新版本中配置c/c++语言环境中的launch.json和tasks.json?
作者:来知晓链接:https://www.zhihu.com/question/336266287/answer/2144611720来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载 ...
- 树莓派3b+ 安装windows10 arm版本的方法及使用体验
首先,我再网上找到了一个很详细的为树莓派3b安装windows10 arm的教程,实际操作下来发现并不可行. 最后找到了可行的教程: 第3章 将Windows10镜像写入TF卡:https://zhu ...
- 安装wsl的必备操作——开启CPU虚拟化——WslRegisterDistribution failed with error_ 0x8007019e 0x800701b 0x80370102 请启用虚拟机平台
参考: https://www.cnblogs.com/smdtxz/p/16837946.html https://www.cnblogs.com/wenonly/p/17206040.html h ...
- 【入门教程】5分钟教你快速学会集成Java springboot ~
介绍 Apache DolphinScheduler是一个分布式易扩展的开源分布式调度系统,支持海量数据处理,具有任务流程调度.任务流程编排.任务监控告警.工作流引擎等功能. 本文将介绍如何将Apac ...
- 飞书Webhook触发操作指南,实现事件驱动型工作流自动化
本文提供了利用数据触发Feishu Webhook的具体操作指南,包括Webhook的设置以及编写触发代码的方法,为读者提供了实践参考,希望能帮助解决你目前遇到的问题. 描述 用于使用数据触发 Fei ...
- element-UI tree树形控件 修改小三角图标
.el-tree /deep/ .el-tree-node__expand-icon.expanded{ -webkit-transform: rotate(0deg); transform: rot ...
- 关于mysql配置文件中jdbc url 的记录
版本不同 url不同 大同小异 基本就是不同参数配置的区别 maven 仓库地址 https://mvnrepository.com/artifact/mysql/mysql-connector-ja ...
- 使用SiliconCloud尝试GraphRag——以《三国演义》为例(手把手教程,适合小白)
使用OpenAI模型体验GraphRag--以<边城>为例 在使用SiliconCloud之前,先使用OpenAI的模型看看GraphRag的效果. GraphRAG是一种基于AI的内容理 ...
- java如何保证一个方法只能执行一次
我们经常会遇到一些情况需要某一个方法或者操作只执行一次,比如说配置信息加载,如果配置信息需要动态刷新,这个不在适用范围.下面列举几种方式 第一种 如果是web容器,可以使用servlet或者Liste ...
- 获取微信小程序页面路径
2024/07/12 1.步骤 2.注意事项 3.参考 1.步骤 微信公众号关联小程序时需要用到小程序的页面路径,获取步骤如下:' 登录微信公众平台--工具--生成小程序码--获取更多页面路径--填写 ...