之前的文章利用LXCFS和PodPreset提升容器资源可见性已经对LXFS的一定的了解,也是目前比较通用的解决方案,将容器中相应的文件通过fuse劫持read调用,在打开时显示为容器信息,从而统一解决各种系统状态诊断工具的问题。

比如:把宿主机的 /var/lib/lxcfs/proc/memoinfo 文件挂载到Docker容器的/proc/meminfo位置后。容器中进程读取相应文件内容时,LXCFS的FUSE实现会从容器对应的Cgroup中读取正确的内存限制。从而使得应用获得正确的资源约束设定。
考虑到lxfs的部署需要一定成本,利用容器和DaemonSet方式来运行 lxcfs FUSE文件系统。而topic(top in container)的思路则是改造top命令,去适配容器,读取容器中反映真实运行情况的系统文件,从而展示正确的容器运行信息,对于用户而言成本更低。
如下,在一个1c 1Gi的容器中运行stress --cpu 2,通过topic和top查看容器的运行状态:
topic:
top:
可以看到,topic比较好的解决了容器运行信息的问题:
- topic查看的load average是2.03,而top查看到的是1.31(实为宿主机的load average)
- topic查看到的CPU使用率,其us为99.8%,而top查看到的是13.2%(实为宿主机的us信息)
- topic查看到的Mem是1Gi,而top查看到的是16Gi(实为宿主机的内存信息)
- topic查看到的user数是11,而top查看到的user数是1(实为宿主机的当前登录用户数)
- topic查看到的容器运行时间为2days 10:35,而top查看到的是20days 1:57(实为宿主机的运行时间)
- topic和top的进程相关信息显示基本一致。