Docker 容器隔离

Docker容器隔离

在容器里执行top指令,会发现,它显示的信息是宿主机的CPU和内存数据,而不是当前容器的数据。造成该问题的原因在于,容器通过Cgroups来为容器进程设置资源限制,但是/proc 文件系统并不知道用户通过Cgroups给这个容器做了什么样的资源限制,/proc 文件系统不了解Cgroups限制的存在。

# 容器
teledb@teledb-XPS-8930:~$ docker run -it -m 256m --memory-swap 256m centos /bin/bash
[root@5dc9ff32e459 /]# top 查看发现并没有获取到正确的资源限制

在这里插入图片描述
宿主机
在这里插入图片描述

解决思路

宿主机上执行top指令,是从/prof/stats 目录下获取数据,所以容器不挂载宿主机的该目录即可。lxcfs可实现该功能,它将宿主机的/var/lib/lxcfs/proc/meminfo文件挂载到Docker容器的/proc/meminfo 位置后,容器中进程读取相应文件内容后,lxcfs的fuse实现会从容器对应的Cgroups中读取正确的内存限制,从而使应用获取正确的资源约束。
https://github.com/lxc/lxcfs

安装

# yum install offline
[ceph@k8s-master lxcfs-4.0.7] sudo yum install -y --downloadonly --downloaddir=/data/tzj/rpm fuse fuse-lib fuse-devel
[ceph@k8s-master lxcfs-4.0.7] sudo yum localinstall /data/tzj/rpm/*.rpm
# make
[ceph@k8s-master lxcfs-4.0.7] cd docker/lxcfs-4.0.7/
[ceph@k8s-master lxcfs-4.0.7] ./configure
[ceph@k8s-master lxcfs-4.0.7] make
[ceph@k8s-master lxcfs-4.0.7] sudo make install
# test
[ceph@k8s-master lxcfs-4.0.7]$ lxcfs -v
4.0.7

隔离测试

[ceph@k8s-master docker] sudo mkdir -p /var/lib/lxcfs
[ceph@k8s-master docker] sudo lxcfs /var/lib/lxcfs
sudo: lxcfs: command not found
# bash -c error too,use root users
[root@k8s-master docker]# lxcfs /var/lib/lxcfs
Running constructor lxcfs_init to reload liblxcfs
mount namespace: 4
hierarchies:
  0: fd:   5: name=systemd
  1: fd:   6: perf_event
  2: fd:   7: memory
  3: fd:   8: cpu,cpuacct
  4: fd:   9: hugetlb
  5: fd:  10: blkio
  6: fd:  11: net_cls,net_prio
  7: fd:  12: cpuset
  8: fd:  13: pids
  9: fd:  14: freezer
 10: fd:  15: devices
Kernel supports swap accounting
api_extensions:
- cgroups
- sys_cpu_online
- proc_cpuinfo
- proc_diskstats
- proc_loadavg
- proc_meminfo
- proc_stat
- proc_swaps
- proc_uptime
- shared_pidns
- cpuview_daemon
- loadavg_daemon
- pidfds

运行一个docker容器

docker run -it centos /bin/bash

在这里插入图片描述
通过lxcfs

docker run -it -m 256m --memory-swap 256m \
      -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 \
      centos /bin/bash

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值