最近公司的云手机产品遇到一个问题,就是在容器内部获取不到分配的cpu和内存信息,于是找到了lxcfs。什么事lxcfs?
LXCFS is a small FUSE filesystem written with the intention of making Linux containers feel more like a virtual machine. It started as a side-project of LXC but is useable by any runtime.
在容器内使用一些命令如: free, top 等命令其实看到还是物理机的数据,而非容器的数据。这是由于容器并没有做到对 /proc
, /sys
等文件系统的资源视图隔离。即使容器可以通过 cgroup 的方式对资源的使用情况进行限制,但还是会出现上面的情况,结果就会造成在容器内的部分应由不能获取到正确的硬件资源而启动失败。
lxcfs 横空出世就是为了解决这个问题。
lxcfs 是通过文件挂载的方式,把 cgroup 中关于系统的相关信息读取出来,通过 docker 的 volume 挂载给容器内部的 proc 系统。 然后让 docker 内的应用读取 proc 中信息的时候以为就是读取的宿主机的真实的 proc。
安装 lxcfs
wget https://copr-be.cloud.fedoraproject.org/results/ganto/lxc3/epel-7-x86_64/01041891-lxcfs/lxcfs-3.1.2-0.2.el7.x86_64.rpm;
rpm -ivh lxcfs-3.1.2-0.2.el7.x86_64.rpm --force --nodeps
检查安装:
lxcfs -h
Usage:
lxcfs [-f|-d] [-p pidfile] mountpoint
-f running