CGroups
CGroups
我们可以管理每个命名空间的资源分配,以便限制一组进程可以使用的总
- PID(进程标识符)命名空间:这可确保一个命名空间内的进程不知道其他命名空间中的进程。
- 网络命名空间:隔离网络接口控制器,iptables,路由表和其他低级网络工具。
- 挂载命名空间:已挂载文件系统,因此命名空间的文件系统范围仅限于已挂载的目录。
- 用户名空间:将命名空间内的用户限制为仅限该命名空间,并避免跨命名空间的用户
ID 冲突。
cgroup-bin
通过工具sudo apt-get install cgroup-bin
root@host:/home/vagrant# cgcreate -a vagrant -g cpu:cg1
root@host:/home/vagrant# ls /sys/fs/cgroup/cpu/cg1/
cgroup.clone_children cpu.cfs_period_us cpu.shares cpuacct.stat cpuacct.usage_all cpuacct.usage_percpu_sys cpuacct.usage_sys notify_on_release
cgroup.procs cpu.cfs_quota_us cpu.stat cpuacct.usage cpuacct.usage_percpu cpuacct.usage_percpu_user cpuacct.usage_user tasks
我们先在默认的分组里面运行一个死循环程序
# loop.py
while True: pass
设置
root@host:/home/vagrant# echo 50000 > /sys/fs/cgroup/cpu/cg1/cpu.cfs_quota_us
root@host:/home/vagrant# cgexec -g cpu:cg1 /bin/bash
root@host:/home/vagrant# docker run -i -t --cpu-period=100000 --cpu-quota=50000 --memory=512000000 alpine /bin/ash
Capabilities
我们在启动容器时会时常看到这样的参数 --cap-add=NET_ADMIN
,这是用到了
对于
vagrant@host:~$ ls -ls /bin/ping
60 -rwsr-xr-x 1 root root 61240 Nov 10 2016 /bin/ping
vagrant@host:~$ cp /bin/ping anotherping
vagrant@host:~$ ls -ls anotherping
60 -rwxr-xr-x 1 vagrant vagrant 61240 May 19 10:18 anotherping
vagrant@host:~$ ./anotherping -c1 yue.uu.163.com
ping: socket: Operation not permitted
vagrant@host:~$ sudo setcap cap_net_raw+ep ./anotherping
vagrant@host:~$ ./anotherping -c1 yue.uu.163.com
PING yue.uu.163.com (59.111.137.252) 56(84) bytes of data.
64 bytes from 59.111.137.252 (59.111.137.252): icmp_seq=1 ttl=63 time=53.9 ms
--- yue.uu.163.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 53.919/53.919/53.919/0.000 ms