设为首页 收藏本站
查看: 869|回复: 0

[经验分享] Docker容器对CPU资源隔离的几种方式

[复制链接]

尚未签到

发表于 2018-5-29 08:52:49 | 显示全部楼层 |阅读模式
摘要:了解Docker的同学应该知道,Docker的一个很大的特性就是可以对各种资源做隔离以及限制,这些资源包括CPU、内存、网络、硬盘,关于内存、网络、硬盘的资源限制都比较好理解,无非就是分多少用多少,比如给这个容器分1G内存,那就最多能用1G的内存,但是对于CPU的限制就不是那么好理解了,而且配置起来相对来说也更复杂一些。
了解Docker的同学应该知道,Docker的一个很大的特性就是可以对各种资源做隔离以及限制,这些资源包括CPU、内存、网络、硬盘,关于内存、网络、硬盘的资源限制都比较好理解,无非就是分多少用多少,比如给这个容器分1G内存,那就最多能用1G的内存,但是对于CPU的限制就不是那么好理解了,而且配置起来相对来说也更复杂一些。
首先要知道的是Docker的资源隔离是基于Cgroups的, 前面的文章 里提到的coolshell的科普文章 《Docker基础技术:Linux CGroup》 里有做一些基本的介绍和使用方法,想要深入了解的话可以看下 redhat上的文档 ,因为今天主要是说对CPU资源的隔离,所以可以深入看下 关于CPU的这一章 。
从 Docker的官方文档 里可以看到,在通过Docker run这条命令启动一个容器时可以通过--cpu-shares --cpu-period以及--cpu-quota这三个参数来控制容器对CPU的使用,但是并没有做太详细的介绍以及示例,所以理解起来稍微有些困难。比如--cpu-shares和其他两个参数一起用会有什么效果?
我们一个个来看,先看--cpu-shares,默认情况下所有容器的share(简单理解成是权重吧)是相同的,也就是所有容器有相同的权重,在所有容器一起竞争资源时,最终得到的资源是相同的。这个share是一个相对的值,那么这个值的意义就不能单纯的通过一个容器的share值来看,而是多个在一起对比,比如A和B两个容器,A配置的是1024,B配置的是512,那么A最大可以使用的CPU资源是B的两倍。还有一点要注意的是这种配置是有弹性的,如果A容器一直闲着,那B容器是可以使用空闲资源的。
再来看--cpu-period和--cpu-quota,为啥把这两个参数放一起呢?因为这两个参数是相互配合的,在redhat的那篇文档里讲的很清楚,--cpu-period和--cpu-quota的这种配置叫 Ceiling Enforcement Tunable Parameters ,--cpu-shares的这种配置叫 Relative Shares Tunable Parameters 。--cpu-period是用来指定容器对CPU的使用要在多长时间内做一次重新分配,而--cpu-quota是用来指定在这个周期内,最多可以有多少时间用来跑这个容器。跟--cpu-shares不同的是这种配置是指定一个绝对值,而且没有弹性在里面,容器对CPU资源的使用绝对不会超过配置的值。
比如说A容器配置的--cpu-period=100000 --cpu-quota=50000,那么A容器就可以最多使用50%个CPU资源,如果配置的--cpu-quota=200000,那就可以使用200%个CPU资源。
如果这两种配置方式一起使用呢?我简单测试了下,应该是取两个配置的交集,目前还没做具体的测试,等做了具体的测试再把相关的数据在这里记录一下,不过配置这么复杂也没太大必要。
那么有什么样的应用场景呢?简单举个例子,加入对外提供A和B两个服务,但是A的优先级比B要高,假如只用--cpu-shares来配置,从实际经验来看,B服务占用资源太高时是会对A有一定的影响的,但是具体原因我还没去深入了解,但是如果通过--cpu-period和--cpu-quota来配置,就能起到绝对的控制,做到无论B怎么样,都不会影响到A。
对了,我这里特意没提到CFS这个概念,因为有点复杂,一上来就说这个东西会让人有点懵,但是理解了上面的那些东西后再看CFS就可以加深对上面那些概念的理解。CFS是Linux内核2.6.23版本开始采用的进程调度器,可以翻译为完全公平调度器,它的基本原理是这样的:设定一个周期,目标是让每个进程在这个周期内至少有机会运行一次,然后根据进程的数量,大家平分这个调度周期内的CPU使用权,如果有配置进程的优先级,在分割调度周期的时候要加权。
  本文出自来自: http://dockone.io/article/1102

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-482380-1-1.html 上篇帖子: docker 1.12.0 私有仓库https问题 下篇帖子: 用Docker构建LNMP环境(上)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表