IabSDocker前天更新关注私信 其实关于这个问题已经存在于很久了,三个月前搞了很久都没有搞定,但是最近再浏览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指标是正常的 首先确保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 可以看到metrics-server自己创建的角色是能拿到数据的并且返回了可用内存,但是其他 usageBytes、cpu等指标都显示为0;到这就可以确定kebelet上报节点指标是正常的,并且metrics-server也运行正常并且kubectl top pod都能拿到pod指标。之前到这我就已经疯了,到底是哪出了问题,但是现在更具k8s以及linux发行版对cgroup v2的支持,我发现之前的排查过程漏了许多操作。 解决 1.确定k8s版本 2.确定现Linux发行版默认cgroup 版本 [root@master ~]# mount | grep cgroup 我是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 ~]# 4.验证kubectl top node 是否正常 简单压测一下,可以看到已经可以正常查看数据,并且https://127.0.0.1:10250/stats/summary接口也正常获取节点数据 © 版权声明文章版权归作者所有,未经允许请勿转载。THE ENDDockerKubernetes云原生# kubernetes 喜欢就支持一下吧点赞14赞赏 分享QQ空间微博QQ好友海报分享复制链接收藏