關於Docker容器CPU,內存資源限制問題

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/






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章