Linux利用CGroup實現了對容器資源的限制,但是在容器內部還是默認掛載宿主機 /proc 目錄下的資源信息文件,如:meminfo,cpuinfo,stat,uptiem等。當進入Containers執行free,df,top等命令的時候,這時候默認讀取的是 /proc 目錄內的資源信息文件內容,而這些資源信息文件使用的是宿主機的,所以我們看到的是宿主機的使用信息。
LXCFS簡介
LXCFS是一個開源的FUSE(用戶態文件系統),用來支持LXC容器,也支持Docker容器,社區中常用此工具來實現容器中的資源可見性。
LXCFS原理
以內存資源爲列:通過將宿主機的 /var/lib/lxcfs/meminfo 文件掛載到容器內的/proc/meminfo,然後LXCFS會從容器的CGroup中讀取正確的內存限制,然後應用到 /var/lib/lxcfs/meminfo ,這時候容器內部從而就得到了正確的內存信息。
說明:/var/lib/lxcfs/meminfo 是服務啓動的時候默認指定的目錄
具體使用方法
安裝LXCFS
wget https://copr-be.cloud.fedoraproject.org/results/ganto/lxd/epel-7-x86_64/00486278-lxcfs/lxcfs-2.0.5-3.el7.centos.x86_64.rpm yum install lxcfs-2.0.5-3.el7.centos.x86_64.rpm
啓動LXCFS
systemctl start lxcfs systemctl enable lxcfs
啓動一個容器測試
docker run -it -m 256m --cpuset-cpus "0,1,2" \ -v /var/lib/lxcfs/proc/cpuinfo:/proc/cpuinfo:rw \ -v /var/lib/lxcfs/proc/diskstats:/proc/diskstats:rw \ -v /var/lib/lxcfs/proc/meminfo:/proc/meminfo:rw \ -v /var/lib/lxcfs/proc/stat:/proc/stat:rw \ -v /var/lib/lxcfs/proc/swaps:/proc/swaps:rw \ -v /var/lib/lxcfs/proc/uptime:/proc/uptime:rw \ ubuntu:16.04 /bin/bash
說明:-m 選項用來限制內存,--cpuset-cpus 選項用來限制使用使用CPU的核數,並指定 0,1,2,三核。
查看內存
root@32f05068ffa3:/# free -m total used free shared buff/cache available Mem: 256 6 249 23 0 249 Swap: 256 0 256
查看CPUs,實際宿主機爲8核
root@32f05068ffa3:/# top top - 09:52:34 up 0 min, 0 users, load average: 0.21, 0.70, 0.86 Tasks: 2 total, 1 running, 1 sleeping, 0 stopped, 0 zombie %Cpu0 : 1.7 us, 0.7 sy, 0.0 ni, 97.3 id, 0.0 wa, 0.0 hi, 0.3 si, 0.0 st %Cpu1 : 0.7 us, 0.7 sy, 0.0 ni, 98.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st %Cpu2 : 3.7 us, 0.7 sy, 0.0 ni, 95.6 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 262144 total, 255112 free, 7032 used, 0 buff/cache KiB Swap: 262144 total, 262144 free, 0 used. 255112 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1 root 20 0 18224 1976 1508 S 0.0 0.8 0:00.04 bash 13 root 20 0 36648 1704 1252 R 0.0 0.7 0:00.00 top
基於Kubernetes實戰
參考資料
https://www.lijiaocn.com/%E6%8A%80%E5%B7%A7/2019/01/09/kubernetes-lxcfs-docker-container.html
https://yq.aliyun.com/articles/566208/