k8s metrics-server (kubectl top node) 查询到节点指标信息均为0

k8s metrics-server (kubectl top node) 查询到节点指标信息均为0

其实关于这个问题已经存在于很久了,三个月前搞了很久都没有搞定,但是最近再浏览github时偶然间看到了k8s官方CHANGELOG,其中有一条他是这样说的(大致翻译润色了一下),官方给定的完全支持cgroup v2的Kubernetes版本稳定版本为v1.25

Kubernetes 对 cgroup v2 的 基本支持 直到 v1.22+ 才开始正式加入,v1.24+ 才逐渐稳定。关于 cgroup v2

看到这再结合 Linux 发行版对 cgroup v2 的支持 我貌似看到了曙光。

之前遇到的问题

在使用 kubectl top node 时节点指标返回均为0,但是查看pod指标是正常的

屏幕截图 2025-05-07 150716

屏幕截图 2025-05-07 151026

首先确保metrics-server有权限去kubelet拿取数据

[root@master ~]# kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep metrics-server | awk '{print $1}') | grep "token:"
[root@master ~]# #curl -k -H "Authorization: Bearer <你的token>" https://127.0.0.1:10250/stats/summary

屏幕截图 2025-05-07 152026

可以看到metrics-server自己创建的角色是能拿到数据的并且返回了可用内存,但是其他 usageBytescpu等指标都显示为0;到这就可以确定kebelet上报节点指标是正常的,并且metrics-server也运行正常并且kubectl top pod都能拿到pod指标。之前到这我就已经疯了,到底是哪出了问题,但是现在更具k8s以及linux发行版对cgroup v2的支持,我发现之前的排查过程漏了许多操作。

解决

1.确定k8s版本

屏幕截图 2025-05-07 153523

2.确定现Linux发行版默认cgroup 版本

[root@master ~]# mount | grep cgroup

屏幕截图 2025-05-07 153908

我是ubuntu 22.04 ARM版本,所以默认cgroup版本为v2

确认这几个版本并更具 Kubernetes 关于 cgroup v2 这篇文章,现在就是就就是将ubuntu 22.04默认cgroup 版本更改为v1

3.修改默认cgroup版本

需要每个节点都操作哦,我这是1:1复刻的测试环境,所以没有走k8s节点维护流程,生产环境建议严格按照k8s节点维护流程挨个修改,切忌不要一次性全部修改完后再全部重启
# 编辑 grub 文件
⎈[root@master ~]# vim /etc/default/grub
# 找到“GRUB_CMDLINE_LINUX”这一行并添加以下内容
systemd.unified_cgroup_hierarchy=0

# 更新 grub 配置
⎈[root@master ~]# update-grub

# 重启系统
⎈[root@master ~]# reboot

# 重启后确认
⎈[root@master ~]# mount | grep cgroup
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,size=4096k,nr_inodes=1024,mode=755,inode64)
cgroup2 on /sys/fs/cgroup/unified type cgroup2 (rw,nosuid,nodev,noexec,relatime,nsdelegate)
cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,name=systemd)
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpu,cpuacct)
cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices)
cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,perf_event)
cgroup on /sys/fs/cgroup/rdma type cgroup (rw,nosuid,nodev,noexec,relatime,rdma)
cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset)
cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,blkio)
cgroup on /sys/fs/cgroup/misc type cgroup (rw,nosuid,nodev,noexec,relatime,misc)
cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (rw,nosuid,nodev,noexec,relatime,net_cls,net_prio)
cgroup on /sys/fs/cgroup/pids type cgroup (rw,nosuid,nodev,noexec,relatime,pids)
cgroup on /sys/fs/cgroup/hugetlb type cgroup (rw,nosuid,nodev,noexec,relatime,hugetlb)
cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer)
cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,memory)
⎈[root@master ~]#

屏幕截图 2025-05-07 155201

4.验证kubectl top node 是否正常

简单压测一下,可以看到已经可以正常查看数据,并且https://127.0.0.1:10250/stats/summary接口也正常获取节点数据

屏幕截图 2025-05-07 160042

屏幕截图 2025-05-07 160220

 

© 版权声明
THE END
喜欢就支持一下吧
点赞14赞赏 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容