Docker安全机制及对资源的管理限制

设置docker的安全机制

容器权限

设置特权级运行的容器:–privileged=true 有的时候我们需要容器具备更多的权限
比如操作内核模块,控制 swap交换分区,挂载 USB 磁盘,修改 MAC 地址等。

[root@foundation7 test]# docker  run -it --name vm1 ubuntu
root@f34342f7343d:/# ip addr

这里写图片描述

[root@foundation7 test]# docker run  -it --name vm2 --privileged=true ubuntu
root@2d9ed055a7ec:/# ip addr

这里写图片描述
对容器进行压测

[root@foundation7 ~]# docker  run --rm -it --name vm1 -m 100M --memory-swap 100M stress --vm 1 --vm-bytes 100M
# 提供给vm1100M的内存,内存加交换分区的大小为100M,则能处理的最大压测也是100M

这里写图片描述
这里写图片描述

[root@foundation7 ~]# docker  run --rm -it --name vm1 -m 100M stress --vm 1 --vm-bytes 150M
# 设置内存和swap分区都为100M,则最大压侧为200M

这里写图片描述
这里写图片描述
限制容器cpu占用率

[root@foundation7 ~]# docker run  --rm -it --cpu-shares 512 stress -c 1
[root@foundation7 ~]# docker run  --rm -it --cpu-shares 1024 stress -c 1
1024的优先级大,但在cpu核数充足的时候,cpu可以同时满足这两个压测,无法体现优先级

这里写图片描述
通过lscpu查看cpu核数再进行压测

[root@foundation7 ~]# ls cpu

这里写图片描述

[root@foundation7 ~]# docker run  --rm -it --cpu-shares 512 stress -c 4
[root@foundation7 ~]# docker run  --rm -it --cpu-shares 1024 stress -c 4

这里写图片描述
对写入速率进行限制

[root@foundation7 ~]# docker run --rm -it --privileged=true --device-write-bps /dev/sda:10M ubuntu
root@b13f489c0849:/# dd if=/dev/zero of=file1 bs=1M count=100 oflag=direct

这里写图片描述

Cgroup对Docker进行权限限制

1.安装cgroup管理工具

[root@server1 ~]# yum  install libcgroup.x86_64 -y
[root@server1 ~]# /etc/init.d/cgconfig start

这里写图片描述
2.对内存的限制
这里写图片描述

[root@server1 memory]# vim  /etc/cgconfig.conf
group x1 {
    memory {
        memory.limit_in_bytes = 209715200; 
        # 指定内存大小为200M
        memory.memsw.limit_in_bytes = 209715200;  
        # 内存和交换分区的大小之和,即交换分区的大小为0
        }
}
[root@server1 memory]# /etc/init.d/cgconfig restart

使用x1控制时,可以看出最多耗费的内存不能超过200M
这里写图片描述
3.对cpu的限制
系统对cpu的限制

[root@server1 ~]# cd /cgroup/cpu
[root@server1 cpu]# cat  cpu.shares 
1024

可以对进程调度程序所处理的进程组设置CPU时间分配的比重

[root@server1 cpu]# vim  /etc/cgconfig.conf
group x2 {
        cpu {
                cpu.share = 100;
                }
}
[root@server1 shm]# /etc/init.d/cgconfig restart
[root@server1 shm]# cgexec -g cpu:x2 dd if=/dev/zero  of=/dev/null  &
[1] 3404

这里写图片描述

4.对块设备I/O速率限制

vim /etc/cgconfig.conf
group x3 {
        blkio {
                blkio.throttle.read_bps_device = "252:0 1000000";
                # 252:0指的是/dev/vda
                }
}
[root@server1 shm]# /etc/init.d/cgconfig restart
[root@server1 shm]#yum install -y iotop   ##查看io进程的实时状态
[root@server1 shm]# cgexec -g  blkio:x3 dd if=/dev/vda of=/dev/null &
[1] 4070

速度维持在1000k左右
这里写图片描述
5.freezer子系统

[root@server1 cgroup]# vim  /etc/cgconfig.conf 
group x4 {
        freezer {}
}
[root@server1 cgroup]# /etc/init.d/cgconfig restart
Stopping cgconfig service:                                 [  OK  ]
Starting cgconfig service:                                 [  OK  ]
[root@server1 x4]# cat freezer.state 
THAWED
[root@server1 x4]# dd  if=/dev/zero of=/dev/null &
[1] 4652

CPU资源将被消耗殆尽

这里写图片描述
此进程可能和其他进程共同占用某种资源,将其kill则会将资源释放,影响别的进程
此时将其冰冻观察是否有上述情况
这里写图片描述
这里写图片描述

猜你喜欢

转载自blog.csdn.net/weixin_41476978/article/details/81940198