Docker Swarm:经济高效的容器调度
本文探讨了几种容器调度策略,并以内存约束为例,讨论了如何利用Docker Swarm,通过资源约束实现容器的合理调度。其中,对容器资源的约束,包括硬约束和软约束,硬约束是指内存资源的实际限制条件,而软约束则是当服务器实际内存资源有足余时,容器可自由使用,一旦内存资源有所紧缺,则约束开始生效。硬约束和软约束的结合使用,可以在减少资源浪费的同时保证服务的稳定性。
我们每天在数百台服务器上运行成百上千个容器,面临的最大一个挑战是怎样高效地调度容器。容器的调度是指在一组服务器上处理容器分配的问题,以保证服务能平稳运行。由于这些需要调度的容器是客户应用程序的组件,我们必须在还未知晓其性能特点之前进行调度。
不合适的调度方法会导致以下可能的结果:
过多的资源配置——意味着更高的成本。
过少的资源配置——意味着用户的稳定性差。
合适的调度方法对我们而言很重要,以经济高效的方式,提供最好的用户体验。
随机性调度策略
起初,在我们的早期产品中使用了相同的调度方法。这个方法(在Docker Swarm之前)没有以任何方式对容器的运行进行约束,而只是简单地随机选择一个服务器。
但是,运行全栈环境和运行代码段是完全不同的事——我们很快发现,这个解决方案并不理想。我们的服务器经常因繁忙导致CPU过载和内存不足。
硬约束条件
我们一起根据需要,定义了一种新的调度器:不再随机选择服务器;要能约束运行所需的资源分配,理想情况下,还要易于部署。
幸运的是,Docker Swarm拥有了全部这些特性,最近该工具的稳定性也已满足生产环境的要求。我们使用spread调度策略,以减少因服务器故障而损坏的容器数量。并设置了基于镜像的类别关系,同类容器可以运行在同样的服务器中。
我们使用了Datadog中Docker集成功能,可详细观测容器使用资源的情况。Datadog包含了所有我们需要的数据,可用来描述每个容器的内存或CPU使用率,以及每个服务器的磁盘使用率。
有了这份数据,我们发现内存是制约因素(不是CPU或磁盘),因此,我们决定利用内存约束来调度我们的容器。我们根据观测到的Datalog内存分配情况,设置我们的内存约束在99%的位置即1GB。我们还可以手动重置对每一个容器的约束。
结果显示,这个约束非常有效!我们将不会再看到服务器内存不足,或因超载而运行缓慢。
软约束条件
享受了这个发现所带来的稳定性,在一段时间后,我们注意到,这种策略过度占用了服务器资源。大多数容器实际的内存使用率远远低于该内存硬约束1GB。这意味着我们所付费的比实际使用的多很多。
我们想要更经济高效,但又不能损失稳定性。降低硬约束不是一个好的选择,因为耗内存的应用会因为这个约束而崩溃。
我们需要一种基于估计的约束,在必要时又可以被突破的调度方法。值得庆幸的是,Docker提供了--memory-reservation选项来设置内存软约束。当设置该软约束时,容器可以自由地使用所需的内存,但是,当服务器上有内存争用时,Docker会试图缩减内存到软约束值以内。基于软约束的调度会减少浪费,并设置一个硬约束来阻止失控。但Swarm没有这个功能,所以是时候需要我们使用Go语言,给Swarm建立一个定制版本分支,可调度软内存约束,而不是硬约束。再使用Datadog收集数据,基于概率选择理想的软约束阀值,并设置硬约束为容器使用的最大值。这个方法显著地减少了浪费,而且也没有影响到稳定。
动态范围和突破
Docker1.12.0版中,最酷的一个功能是调度软约束的能力。虽然它仍等待发布,不过我们已经提前尝试,可简便地使用如下命令来调度软约束。
docker service create --reserve-memory <soft_limit>
鉴于软约束的成功,我们的下一步是为每个容器动态地选择软约束和硬约束。因为所有的数据都输送到了Datadog,可通过一个查询,得到理想的软硬约束阈值,保持容器稳定运行而又不浪费资源。敬请关注这个博客,我们一有结果就会让您知道!
原文链接:Cost-efficient container scheduling with Docker Swarm(翻译:陈晏娥,校对:黄帅)
Docker Swarm:经济高效的容器调度的更多相关文章
- 实战Docker容器调度
目录 一.前言 二.Docker Compose 2.1.简介 2.2.下载安装 2.3.小实验 2.4.小实验的细节 2.5.Compose file的编写规则 三.Docker Swarm 3.1 ...
- Docker(六):Docker 三剑客之 Docker Swarm
实践中会发现,生产环境中使用单个 Docker 节点是远远不够的,搭建 Docker 集群势在必行.然而,面对 Kubernetes, Mesos 以及 Swarm 等众多容器集群系统,我们该如何选择 ...
- 云计算之路-阿里云上-容器难容:容器服务故障以及自建 docker swarm 集群故障
3月21日,由于使用阿里云服务器自建 docker swarm 集群的不稳定,我们将自建 docker swarm 集群上的所有应用切换阿里云容器服务 swarm 版(非swarm mode). 3月 ...
- [docker swarm] 从单容器走向负载均衡部署
背景 之前写过<<docker-compose真香>> 和<docker-compose.docker stack前世今生>两篇博客, 回顾一下思路: ① dock ...
- 28. docker swarm 容器编排简介
1.采用集群架构 集群架构包含节点和角色 docker 节点中 包含 worker 和 manager 两个角色 manager 相当于 swarm 集群的 大脑 是用来管理配置节点的 (避免单点故 ...
- 云计算之路-阿里云上-容器难容:自建docker swarm集群遭遇无法解决的问题
我们从今年6月开始在生产环境进行 docker 容器化部署,将已经迁移至 ASP.NET Core 的站点部署到 docker swarm 集群上.开始我们选用的阿里云容器服务,但是在使用过程中我们遭 ...
- Docker Swarm 中最重要的概念- 每天5分钟玩转 Docker 容器技术(94)
从主机的层面来看,Docker Swarm 管理的是 Docker Host 集群.所以先来讨论一个重要的概念 - 集群化(Clustering). 服务器集群由一组网络上相互连接的服务器组成,它们一 ...
- 云计算之路-阿里云上-容器难容:优化自建 docker swarm 集群的部署
在上周六遭遇阿里云容器服务 swarm 版的故障之后,我们决定还是走自建 docker swarm 之路,只要不是阿里云底层的问题,我们相信会找到办法解决或避开自建 docker swarm 不稳定的 ...
- 使用容器编排工具docker swarm安装clickhouse多机集群
1.首先需要安装docker最新版,docker 目前自带swarm容器编排工具 2.选中一台机器作为master,执行命令sudo docker swarm init [options] 3,再需 ...
随机推荐
- LOJ 6497 图
LOJ 6497 图 题意 有图\(n\)点,每点可为黑或白,其中一些点颜色已定. 初时图无边,于每对\(i<j\),可由\(i\)向\(j\)连有向边,或不连. 称黑白相间之路径为交错路径. ...
- Ubuntu18.04 + win10双系统下时间问题
Ubuntu 16.04使用systemd启动之后,时间也改成了由timedatectl来管理 解决的办法可以参考http://blog.sina.com.cn/s/blog_5379c55b0102 ...
- PHP1.9--数组
1.array_slice()函数作用是在数组中根据条件取出一段值并返回,如果数组有字符串键,所返回的数组将保留健名 array array_slice(array array ,int offset ...
- Composer项目安装依赖包
说明:一般用Composer的项目中,目录下都有一个composer.json文件,安装这些依赖,只需要输入命令即可 步骤: cmd进入项目目录,运行命令即可 composer install 文章参 ...
- ACdream 1112
题目链接 Alice and Bob Time Limit: 6000/3000MS (Java/Others)Memory Limit: 256000/128000KB (Java/Others) ...
- 【arc072e】AtCoder Regular Contest 072 E - Alice in linear land
题意 给定一个D,以及一个长度为N的序列a,顺序执行这些数字: 对于一个数字x,会使得D=min(D,abs(D-x)) 有Q次询问,每次询问独立,给出i,能否修改a[i],使得D最后不为0. n,q ...
- python模拟浏览器文件上传,csrf放行
服务器端视图函数 from django.shortcuts import render,HttpResponse from django.views.decorators.csrf import c ...
- HTML:把两张图片并排(行)显示
<table><tr><td><img src=pic1.jpg border=0></td><td><img src=p ...
- 如何确定要对DIV设置什么CSS属性样式呢?
设置什么CSS样式不是凭空想象的而是有参考的,一般分三种情况下得到需要知道设置什么样式. 第一种:没有美工图,自己边思考布局 这种没有美工图也没有可参考的情况下DIV CSS布局,根据自己实际构思的想 ...
- os模块和sys模块
1.os模块与path有关:os.path.isfile():判断置顶对象是否为文件,是返回True,否返回Falseos.path.isdir():判断指定对象是否为目录,是返回True,否返回Fa ...