SlideShare ist ein Scribd-Unternehmen logo
1 von 29
深入 Docker 的资源管理
李雨来
Docker
• 资源的隔离
– Linux Namespaces
• 资源使用的限制( QoS )
– cgroups
• 资源使用的监控
– cgroups
Docker 资源的隔离
Docker 的资源隔离
• Linux Namespaces
– CLONE_NEWNS (2.4.19)
– CLONE_NEWUTS (2.6.19)
– CLONE_NEWIPC (2.6.19)
– CLONE_NEWPID (2.6.24)
– CLONE_NEWNET (2.6.24)
– CLONE_NEWUSER (3.8)
Docker 的资源隔离
• /proc/$PID/ns/
– ipc
– mnt
– net
– pid
– user
– uts
Docker 的资源隔离
• Namespaces 相关系统调用
– clone
– unshare
– setns
• Namespaces 相关命令行工具
– ip netns
– unshare
Docker 的资源隔离
• 通过对 clone 系统调用,在一组新的
Namespace 下运行的进程
通过 Namespaces 可以干点什么
?
Docker 网络的改造
• 为 Docker 容器添加网卡
• 用法: network.sh docker-test veth0 192.168.1.10/24
Docker 网络的改造
• Linux Net Namespace: /proc/$PID/ns/net
• ip link add 命令创建 veth 网卡
• ip netns 命令通过检测 /var/run/netns 路径
调整 netns 的配置
• 使用 ovs-vsctl (或者 brctl )来设置新网卡
的网络
Docker 网络的改造
Docker 网络的改造
Docker 资源的 QoS
Docker 的资源的 QoS
• Linux cgroups
• Docker 的 cgroups 模型
– libcontainer : /sys/fs/cgroup/<subsystem>/docker/<cont
ainerID>
– Linux Container:
/sys/fs/cgroup/<subsystem>/lxc/<containerID>
• Kernel 启动参数
– cgroup_enable=memory swapaccount=1
Docker 的资源 QoS
• CPU 的 QoS
– cpuset.cpus
– cpu.shares
• 内存的 QoS
– memory.memsw.limit_in_bytes
– memory.limit_in_bytes
swap = memory.memsw.limit_in_bytes – memory.limit_in_bytes
内存, Swap 和 OOM 的纠葛
内存, Swap 和 OOM 的纠葛
• 内存, Swap 和 OOM 的触发
– 当内存不够用时, Kernel 会换出内存的 page 到
swap
– 如果 swap 和内存都满了,触发 OOM
• OOM 怎么工作
– 寻找占用内存最大的进程(子进程的内存占用
量会累计到父进程的内存占用量)
– 杀掉内存占用最多的进程
内存, Swap 和 OOM 的纠葛
• 想想看,如果你跑得是 php-fpm 如果 OOM 了…
内存, Swap 和 OOM 的纠葛
• 如果你不想死得很快,请保证你的
Container 中给 swap 留足空间!
Docker 的资源 QoS
• 磁盘 IO 的 QoS
– blkio.throttle.read_bps_device
– blkio.throttle.write_bps_device
– blkio.throttle.read_iops_device
– blkio.throttle.write_iops_device
• echo "<major>:<minor> <limit>" > throttle.write_iops_device
Docker 的资源 QoS
• 关于磁盘的 major 和 minor 号
– cat /proc/partitions
– ls –l /dev/
• 使用设备的 major 和 minor ,不是分区的
major 和 minor
Docker 的资源 QoS
• 网络带宽的 QoS
– OpenVSwitch
– Linux Bridge
• OpenVSwitch
– ovs-vsctl set interface veth1 ingress_policing_rate=1000
• ebtables + tc
– ebtables -A FORWARD -i veth1 -j mark --mark-set 0x1 --mark-target
ACCEPT
– qdics, class, filter
– tc filter add dev eth0 parent 1:0 protocol ip handle 1 fw flowid 1:1
Docker 的资源 QoS
• 磁盘容量的限制
– LVM 创建卷,挂载之后通过 --volume 参数让
Container 访问
– 使用 btrfs ,并设置 quota
• btrfs qgroup limit –e 100G
/var/lib/docker/btrfs/subvolumes/CONTAINER_ID
Docker 资源的监控
Docker 的监控
• CPU : cpuacct.usage
• 内存:
– memory.usage_in_bytes
– memory.memsw.usage_in_bytes
• 磁盘 IO :
– blkio.throttle.io_serviced
– blkio.throttle.io_service_bytes
• 带宽:
– /sys/class/net/<ethname>/statistics/
Out of Docker
Out of Docker
• Bocker
– https://github.com/p8952/bocker
• Dockerlite
– https://github.com/docker/dockerlite
深入Docker的资源管理

Weitere ähnliche Inhalte

Was ist angesagt?

Track2 -刘继伟--openstack in gamewave
Track2 -刘继伟--openstack in gamewaveTrack2 -刘继伟--openstack in gamewave
Track2 -刘继伟--openstack in gamewave
OpenCity Community
 

Was ist angesagt? (20)

Openstack swift, how does it work?
Openstack swift, how does it work?Openstack swift, how does it work?
Openstack swift, how does it work?
 
Docker實務
Docker實務Docker實務
Docker實務
 
Track2 -刘继伟--openstack in gamewave
Track2 -刘继伟--openstack in gamewaveTrack2 -刘继伟--openstack in gamewave
Track2 -刘继伟--openstack in gamewave
 
Docker基礎
Docker基礎Docker基礎
Docker基礎
 
Azure Container Service 使用 DC / OS 管理 docker 容器
Azure Container Service 使用 DC / OS 管理 docker 容器Azure Container Service 使用 DC / OS 管理 docker 容器
Azure Container Service 使用 DC / OS 管理 docker 容器
 
Docker
DockerDocker
Docker
 
Deployment with Capistrano
Deployment with CapistranoDeployment with Capistrano
Deployment with Capistrano
 
應用Ceph技術打造軟體定義儲存新局
應用Ceph技術打造軟體定義儲存新局應用Ceph技術打造軟體定義儲存新局
應用Ceph技術打造軟體定義儲存新局
 
基于OpenResty的百万级长连接推送
基于OpenResty的百万级长连接推送基于OpenResty的百万级长连接推送
基于OpenResty的百万级长连接推送
 
Design realization and application of RBD NBD - Wang Li
Design realization and application of RBD NBD - Wang LiDesign realization and application of RBD NBD - Wang Li
Design realization and application of RBD NBD - Wang Li
 
Docker Compose
Docker ComposeDocker Compose
Docker Compose
 
Mesos intro
Mesos introMesos intro
Mesos intro
 
cdn的那些事儿
cdn的那些事儿cdn的那些事儿
cdn的那些事儿
 
Large-Scale Cluster Mangement & Kubernetes Under The Hood
Large-Scale Cluster Mangement & Kubernetes Under The HoodLarge-Scale Cluster Mangement & Kubernetes Under The Hood
Large-Scale Cluster Mangement & Kubernetes Under The Hood
 
Docker集群管理 工具篇
Docker集群管理 工具篇Docker集群管理 工具篇
Docker集群管理 工具篇
 
Cinder isaci 实现原理详解
Cinder isaci 实现原理详解Cinder isaci 实现原理详解
Cinder isaci 实现原理详解
 
微服務自己動手做
微服務自己動手做微服務自己動手做
微服務自己動手做
 
Mysql fast share
Mysql fast shareMysql fast share
Mysql fast share
 
Docker - 30秒生出100台伺服器
Docker - 30秒生出100台伺服器Docker - 30秒生出100台伺服器
Docker - 30秒生出100台伺服器
 
Docker open stack
Docker open stackDocker open stack
Docker open stack
 

Ähnlich wie 深入Docker的资源管理

Zh tw introduction_to_hadoop and hdfs
Zh tw introduction_to_hadoop and hdfsZh tw introduction_to_hadoop and hdfs
Zh tw introduction_to_hadoop and hdfs
TrendProgContest13
 
MySQL自动切换设计与实现
MySQL自动切换设计与实现MySQL自动切换设计与实现
MySQL自动切换设计与实现
orczhou
 
Java线上应用问题排查方法和工具(空望)
Java线上应用问题排查方法和工具(空望)Java线上应用问题排查方法和工具(空望)
Java线上应用问题排查方法和工具(空望)
ykdsg
 
1, shell intro
1, shell intro1, shell intro
1, shell intro
ted-xu
 
Jvm memory
Jvm memoryJvm memory
Jvm memory
benewu
 
优酷 Web网站架构案例分析
优酷   Web网站架构案例分析优酷   Web网站架构案例分析
优酷 Web网站架构案例分析
George Ang
 
Youku arch qcon2009_beijing
Youku arch qcon2009_beijingYouku arch qcon2009_beijing
Youku arch qcon2009_beijing
drewz lin
 
Key value store
Key value storeKey value store
Key value store
xuanhan863
 

Ähnlich wie 深入Docker的资源管理 (20)

淘宝主备数据库自动切换
淘宝主备数据库自动切换淘宝主备数据库自动切换
淘宝主备数据库自动切换
 
Hantuo openstack
Hantuo openstackHantuo openstack
Hantuo openstack
 
Docker introduce and vs kernel virtual machine
Docker introduce and vs kernel virtual machineDocker introduce and vs kernel virtual machine
Docker introduce and vs kernel virtual machine
 
Zh tw introduction_to_hadoop and hdfs
Zh tw introduction_to_hadoop and hdfsZh tw introduction_to_hadoop and hdfs
Zh tw introduction_to_hadoop and hdfs
 
MySQL自动切换设计与实现
MySQL自动切换设计与实现MySQL自动切换设计与实现
MySQL自动切换设计与实现
 
主库自动切换 V2.0
主库自动切换 V2.0主库自动切换 V2.0
主库自动切换 V2.0
 
Java线上应用问题排查方法和工具(空望)
Java线上应用问题排查方法和工具(空望)Java线上应用问题排查方法和工具(空望)
Java线上应用问题排查方法和工具(空望)
 
1, shell intro
1, shell intro1, shell intro
1, shell intro
 
4, files & folders
4, files & folders4, files & folders
4, files & folders
 
Rootkit 101
Rootkit 101Rootkit 101
Rootkit 101
 
Jvm memory
Jvm memoryJvm memory
Jvm memory
 
Linux基础
Linux基础Linux基础
Linux基础
 
优酷 Web网站架构案例分析
优酷   Web网站架构案例分析优酷   Web网站架构案例分析
优酷 Web网站架构案例分析
 
Youku arch qcon2009_beijing
Youku arch qcon2009_beijingYouku arch qcon2009_beijing
Youku arch qcon2009_beijing
 
Key value store
Key value storeKey value store
Key value store
 
SRE 讀書會 Round 4 #37 - DNS 時快時慢,我該怎麼辦
SRE 讀書會 Round 4 #37 - DNS 時快時慢,我該怎麼辦SRE 讀書會 Round 4 #37 - DNS 時快時慢,我該怎麼辦
SRE 讀書會 Round 4 #37 - DNS 時快時慢,我該怎麼辦
 
Linux内存管理
Linux内存管理Linux内存管理
Linux内存管理
 
Linux内存管理
Linux内存管理Linux内存管理
Linux内存管理
 
Docker tutorial
Docker tutorialDocker tutorial
Docker tutorial
 
開發流程與工具介紹
開發流程與工具介紹開發流程與工具介紹
開發流程與工具介紹
 

Mehr von SpeedyCloud

Mehr von SpeedyCloud (8)

教育交互直播的技术难点与架构探索 @ 见云沙龙
教育交互直播的技术难点与架构探索 @ 见云沙龙教育交互直播的技术难点与架构探索 @ 见云沙龙
教育交互直播的技术难点与架构探索 @ 见云沙龙
 
选型指南:Cdn系统中dns的设计与研发
选型指南:Cdn系统中dns的设计与研发选型指南:Cdn系统中dns的设计与研发
选型指南:Cdn系统中dns的设计与研发
 
浅析Python多线程与多进程的使用
浅析Python多线程与多进程的使用浅析Python多线程与多进程的使用
浅析Python多线程与多进程的使用
 
How to Use Multi-thread & Multi-process in Python
How to Use Multi-thread & Multi-process in PythonHow to Use Multi-thread & Multi-process in Python
How to Use Multi-thread & Multi-process in Python
 
运维?KVM & OpenVZ & Docker
运维?KVM & OpenVZ & Docker运维?KVM & OpenVZ & Docker
运维?KVM & OpenVZ & Docker
 
Resource Management of Docker
Resource Management of DockerResource Management of Docker
Resource Management of Docker
 
The Evolution of SpeedyCloud Resources Scheduling System
The Evolution of  SpeedyCloud Resources Scheduling SystemThe Evolution of  SpeedyCloud Resources Scheduling System
The Evolution of SpeedyCloud Resources Scheduling System
 
SpeedyCloud 云计算平台资源调度系统要点解析
SpeedyCloud 云计算平台资源调度系统要点解析SpeedyCloud 云计算平台资源调度系统要点解析
SpeedyCloud 云计算平台资源调度系统要点解析
 

深入Docker的资源管理

  • 1.
  • 3. Docker • 资源的隔离 – Linux Namespaces • 资源使用的限制( QoS ) – cgroups • 资源使用的监控 – cgroups
  • 5. Docker 的资源隔离 • Linux Namespaces – CLONE_NEWNS (2.4.19) – CLONE_NEWUTS (2.6.19) – CLONE_NEWIPC (2.6.19) – CLONE_NEWPID (2.6.24) – CLONE_NEWNET (2.6.24) – CLONE_NEWUSER (3.8)
  • 6. Docker 的资源隔离 • /proc/$PID/ns/ – ipc – mnt – net – pid – user – uts
  • 7. Docker 的资源隔离 • Namespaces 相关系统调用 – clone – unshare – setns • Namespaces 相关命令行工具 – ip netns – unshare
  • 8. Docker 的资源隔离 • 通过对 clone 系统调用,在一组新的 Namespace 下运行的进程
  • 10. Docker 网络的改造 • 为 Docker 容器添加网卡 • 用法: network.sh docker-test veth0 192.168.1.10/24
  • 11. Docker 网络的改造 • Linux Net Namespace: /proc/$PID/ns/net • ip link add 命令创建 veth 网卡 • ip netns 命令通过检测 /var/run/netns 路径 调整 netns 的配置 • 使用 ovs-vsctl (或者 brctl )来设置新网卡 的网络
  • 15. Docker 的资源的 QoS • Linux cgroups • Docker 的 cgroups 模型 – libcontainer : /sys/fs/cgroup/<subsystem>/docker/<cont ainerID> – Linux Container: /sys/fs/cgroup/<subsystem>/lxc/<containerID> • Kernel 启动参数 – cgroup_enable=memory swapaccount=1
  • 16. Docker 的资源 QoS • CPU 的 QoS – cpuset.cpus – cpu.shares • 内存的 QoS – memory.memsw.limit_in_bytes – memory.limit_in_bytes swap = memory.memsw.limit_in_bytes – memory.limit_in_bytes
  • 17. 内存, Swap 和 OOM 的纠葛
  • 18. 内存, Swap 和 OOM 的纠葛 • 内存, Swap 和 OOM 的触发 – 当内存不够用时, Kernel 会换出内存的 page 到 swap – 如果 swap 和内存都满了,触发 OOM • OOM 怎么工作 – 寻找占用内存最大的进程(子进程的内存占用 量会累计到父进程的内存占用量) – 杀掉内存占用最多的进程
  • 19. 内存, Swap 和 OOM 的纠葛 • 想想看,如果你跑得是 php-fpm 如果 OOM 了…
  • 20. 内存, Swap 和 OOM 的纠葛 • 如果你不想死得很快,请保证你的 Container 中给 swap 留足空间!
  • 21. Docker 的资源 QoS • 磁盘 IO 的 QoS – blkio.throttle.read_bps_device – blkio.throttle.write_bps_device – blkio.throttle.read_iops_device – blkio.throttle.write_iops_device • echo "<major>:<minor> <limit>" > throttle.write_iops_device
  • 22. Docker 的资源 QoS • 关于磁盘的 major 和 minor 号 – cat /proc/partitions – ls –l /dev/ • 使用设备的 major 和 minor ,不是分区的 major 和 minor
  • 23. Docker 的资源 QoS • 网络带宽的 QoS – OpenVSwitch – Linux Bridge • OpenVSwitch – ovs-vsctl set interface veth1 ingress_policing_rate=1000 • ebtables + tc – ebtables -A FORWARD -i veth1 -j mark --mark-set 0x1 --mark-target ACCEPT – qdics, class, filter – tc filter add dev eth0 parent 1:0 protocol ip handle 1 fw flowid 1:1
  • 24. Docker 的资源 QoS • 磁盘容量的限制 – LVM 创建卷,挂载之后通过 --volume 参数让 Container 访问 – 使用 btrfs ,并设置 quota • btrfs qgroup limit –e 100G /var/lib/docker/btrfs/subvolumes/CONTAINER_ID
  • 26. Docker 的监控 • CPU : cpuacct.usage • 内存: – memory.usage_in_bytes – memory.memsw.usage_in_bytes • 磁盘 IO : – blkio.throttle.io_serviced – blkio.throttle.io_service_bytes • 带宽: – /sys/class/net/<ethname>/statistics/
  • 28. Out of Docker • Bocker – https://github.com/p8952/bocker • Dockerlite – https://github.com/docker/dockerlite