Techyou labs
真正的爱应该超越生命的长度,心灵的宽度,灵魂的深度
常用标签

Docker容器由于Linux内核namespace本身还不够完善的现状(例如,没有cgroup namespace,user namespace也是在kernel高版本才开始支持, /dev设备不隔离等),因此docker容器在隔离性方面也存在一些缺陷。例如,在容器内部proc文件系统中可以看到Host宿主机上的proc信息(如:meminfo, cpuinfo,stat, uptime等)。开源项目LXCFS,尝试通过用户态文件系统实现docker容器内的虚拟proc文件系统,增强docker容器的隔离性,减少给用户带来的不便。

LXCFS介绍

LXCFS是一个开源的FUSE用户态文件系统,起初是为了更好的在Ubuntu上使用LXC容器而设计开发。LXCFS基于C语言开发,代码托管在github上,目前较多使用在LXC容器中。主要由Ubuntu的工程师提供维护和开发。

LXCFS主要提供两个基本功能点:

a cgroupfs compatible view for unprivileged containers
a set of cgroup-aware files:


├── cgroup
│   ├── blkio
│   ├── cpu,cpuacct
│   ├── cpuset
│   ├── devices
│   ├── freezer
│   ├── hugetlb
│   ├── memory
│   ├── name=systemd
│   ├── net_cls,net_prio
│   ├── perf_event
│   ├── pids
│   └── rdma
└── proc
    ├── cpuinfo
    ├── diskstats
    ├── meminfo
    ├── stat
    ├── swaps
    └── uptime

即在容器内部提供一个虚拟的proc文件系统和容器自身的cgroup的目录树。

LXCFS安装

for ubuntu


sudo add-apt-repository ppa:ubuntu-lxc/lxcfs-stable -y
sudo apt-get update
sudo apt-get install lxcfs -y

其他版本请参考管网自行编译安装

LXCFS与docker结合

创建LXCFS挂载点(如果apt-get安装,则已自动创建并挂载)


sudo mkdir -p /var/lib/lxcfs
sudo ./lxcfs -s -f -o allow_other /var/lib/lxcfs/

启动docker容器,挂载lxcfs


root@gz-node1:~# docker run -it --rm --name ubuntu --memory=512m --cpuset-cpus=0,1 -v /var/lib/lxcfs/proc/uptime:/proc/uptime:rw -v /var/lib/lxcfs/proc/cpuinfo:/proc/cpuinfo:rw -v /var/lib/lxcfs/proc/stat:/proc/stat -v /var/lib/lxcfs/proc/meminfo:/proc/meminfo -v /var/lib/lxcfs/cgroup/:/cgroup/:rw  ubuntu:16.04 free -m
WARNING: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap.
              total        used        free      shared  buff/cache   available
Mem:            512           1         510          31           0         510
Swap:             0           0           0

参考:

暂无评论

添加新评论