利用LXCFS增强docker容器隔离性和资源可见性

作者:卫珍佑 于 2020年05月20日 发布在分类/ Dokcer

遇到的问题:

由于docker本身的隔离性不够彻底,虽然 Docker原生的资源查询接口(docker stats)可以正确地识别分配的资源,但是容器内部proc文件系统中可以看到Host宿主机上的proc信息。而linux系统本身自带的topfree等命令就是通过读取proc下的文件计算资源使用情况。因此,原生docker容器中的topfree命令失去了它的作用。

解决方法:

   容器的显示问题,在很早期的版本中就有人提出过,而 Docker官方可能是出于某些原因的考虑,并没有试图修复这些显示问题。目前来说,解决显示问题还没办法很好地在 Docker中进行集成,仍然需要在 Docker之外做一些修改,本文的解决方案主要依赖于 lxcfs项目,简单来说就是可以在容器里提供一个虚拟的 proc文件系统。

操作步骤:

1,下载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

2,安装lxcfs

yum -y install lxcfs-3.1.2-0.2.el7.x86_64.rpm

4,启动lxcfs

systemctl enable lxcfs

systemctl start lxcfs

5, 调整docker-compose.yaml

#注意yml文件格式一定要规范,否则报错
cat << EOF | tee docker-compose.yml 
version: '2'
services:
  supplier-provider-ba:
    image: {DockerFileName}
    network_mode: host
    labels:
      io.rancher.container.pull_image: always
    ports:
      - 8611:8611/tcp  
    cpu_shares: 1
    mem_limit: 2147483648
    cap_add:
      - SYS_PTRACE
    volumes:
      - /var/lib/lxcfs/proc/cpuinfo:/proc/cpuinfo:rw
      - /var/lib/lxcfs/proc/diskstats:/proc/diskstats:rw
      - /var/lib/lxcfs/proc/meminfo:/proc/meminfo:rw
      - /var/lib/lxcfs/proc/stat:/proc/stat:rw
      - /var/lib/lxcfs/proc/swaps:/proc/swaps:rw
      - /var/lib/lxcfs/proc/uptime:/proc/uptime:rw
EOF

###之后重新发布服务,就可以解决容器内free查看的内存为宿主机内存的问题

注意:
不能直接把/var/lib/lxcfs/proc目录挂载到容器内的/proc目录下,因为容器内的/proc目录下本身是有内容的,是系统的进程信息等等,如果直接把/var/lib/lxcfs/proc目录挂载到容器内的/proc目录下,会覆盖容器内/proc目录下的内容,而/proc目录下记录的是容器的进程信息等等内容,是不能被覆盖的,所以不能直接把/var/lib/lxcfs/proc目录挂载到容器内的/proc目录下。



分享到朋友圈 分享到微信
发表评论
验证码