专栏首页CSDN技术头条30个4GB内存Rackspace云服务器45分钟内可运行1万个Docker容器

30个4GB内存Rackspace云服务器45分钟内可运行1万个Docker容器

摘要:本文主要讲述了在Rackspace上利用不到45分钟的时间在一个由30个4GB内存的云服务器组成的集群上部署10,000个Nginx 容器。具体步骤:在Nginx 集群构建应用程序模板;在Rackspace云上部署基础设施等等。

虽然应用程序的可移植性(即能够在任何一个主机上运行相同的应用程序)仍是采用Linux容器的主要动力,但优化服务器的利用率这另一个关键的优势能够使得你仅占用计算机的很少部分的计算。当然,对于像PROD这种生产环境(正式环境),你可能还是倾向于分配足够的CPU和内存来满足工作所需--但是在DEV/TEST环境中,通常这些环境大多数需要计算机资源的消耗,因此优化服务器的利用率可以有效地进行成本节约。

表面上这些听起来都很不错--但是DevOps 工程师和基础运营商仍在与下列问题作斗争:

  • 如何在实现不同的云服务器集群并且将其映射到业务组、开发团队或者应用程序项目上?
  • 如何检测这些集群和察觉不同的群体或用户资源的消耗?
  • 如何在集群中建立跨服务器的网络以便多台主机上的容器间能够互相通信?
  • 如何以自身能力为基础定义布局决策以便于在集群中充分利用每一个计算位?
  • 如何自动扩展集群以满足开发人员对基于新容器应用程序部署的需求?

DCHQ提供托管和内部部署版本,解决了上述所有这些挑战,它为基础运营商和DevOps 工程师提供了最先进的基础设置配置、自动缩放、集群和配置策略。

  • 通过Docker和软件定义的网络层(可选),用户可以注册一个任何地方都可运行Linux主机,方法是通过运行一个自动生成脚本来安装DCHQ代理。该任务可以通过自动变成方式实现,利用REST API’s来生成“Docker Server”(https://dchq.readme.io/docs/dockerservers);
  • 另外,DCHQ整合了13个云服务商,允许用户在vSphere、 OpenStack、CloudStack、Amazon Elastic Cloud Computing、Google Compute Engine、Rackspace、 DigitalOcean、 SoftLayer, Microsoft Azure等云上自动启动虚拟基础设施。

通过集群可以让混合云和本地开发设备的服务器关联,这是一个逻辑映射的基础设施。该集群具有以下高级选项:

  • Networking(网络)--用户可以选择Docker网络或者软件定义网络两者之一来促进跨通容器能在多个主机间进行通信;
  • Lease(租赁)--用户在该集群中可以指定服务器何时到期以便于DCHQ能自动清理这些服务器;
  • Placement Policy(安置策略)--用户可以选择多个安置策略比如一个临近策略、轮叫调度策略或者默认策略。一个基于容量的安置策略可以在宿主机上分配给满足Docker工作量的足够的计算资源;
  • Quota(指标)--用户可以指示该集群是否遵从分配给用户配置文件。例如,在DHCQ.io中,所有的用户都被分配了一个8GB内存的指标;
  • Auto-Scale Policy(自动规模策略)--用户可以自定义一个自动规模策略,如果集群耗尽全部的计算资源是以便自动添加服务器。进而满足开发人员对基于新容器的应用程序部署的需求;
  • Granular Access Controls(细化访问控制) -- 租用管理员可以定义集群的访问控制,以便决定谁能进行基于容器的应用程序部署。例如,开发者可以注册他/她的本地计算机并将其标记为私有。租用管理员,另一方面,可以与特定组的用户或所有租用用户共享一个集群。

除了先进的基础设施配置和集群功能,DHCQ还通过先进的应用集成框架简化了企业级应用程序的容器化过程。并通过交叉镜像环境变量延伸了Docker Compose;可扩展的BASH脚本插件可以调用请求时间或者规定位置;高可用性的应用程序集群在多主机或者区域间支持自动缩放。

一旦应用程序配置完成,用户可以监控所运行容器的CPU、内存和I/O情况。并能得到通知或者警报,进行day-2操作如定时备份、利用BASH脚本插件进行Container Update或者调节In/Out规模。此外,开箱即用的工作流程促进持续交付,Jenkins使开发人员在不破坏现有的依赖关系和集成的条件下,能够刷新运行的应用程序的Java WAR文件。

在这篇博文里,我们将要在Rackspace上利用不到45分钟的时间在一个由30个4GB内存的云服务器组成的集群上部署10,000个Nginx 容器。将覆盖:

  • 为Nginx集群建立应用程序模板以便可以在任一Linux主机上运行;
  • 在任一云上提供底层的基础设施(本文中将以Racksapce为例);
  • 利用DCHQ’s REST API’s部署可编程的Nginx集群;
  • 监测所运行容器的CPU、内存和I/O。

为了模拟企业部署 10,000 Docker Nginx 容器的实际情况,我们使用如下的配置:

  • 在DCHQ.io中创建了十个不同的用户;
  • 创建了10个集群,每个集群拥有3个Rackspace上的云服务器。每个云服务器用4GB的内存和2个CPU;
  • 10个用户中的每个用户均被分到其中一个集群,并作为其部署应用程序的默认集群;
  • 10个用户共享应用程序模板。

为Nginx 集群构建应用程序模板

一旦登录DCHQ(宿主 DCHQ.io或者内部部署版本),用户可以看到Manage > Templates,然后单击+按钮来创建一个Docker Compose模板。

为了测试可扩展性,我们创建了一个简易Nginx 集群。你会注意到cluster_size参数允许用户来设定所需容器的数量(利用相同的应用程序依赖关系)。

mem_min参数允许用户设定要分配到容器中的内存的最小值。

Host参数允许用户指定部署容器所需的主机。这样用户就可以确保不同的主机(或区域)中应用程序服务器集群的高可用性,同时用户可以遵循亲和规则以确保数据库在单独的主机上运行。以下是主机的参数值:

  • host1、host2、host3等等。--在数据中心(或集群)中随机选择一个主机用于容器部署;
  • <IP Address 1、IP Address 2等等>-- 允许用户指定用于部署容器的实际的IP地址;
  • <Hostname 1、Hostname 2等等> --允许用户指定用于部署容器的实际主机名;
  • Wildcards (例如 “db-*” 或 “app-srv-*”) --指定所使用主机名的通配符。

在任一云上部署基础设施

一旦保存了应用程序,用户可以注册一个Cloud Provider来自动配置和自动缩放集群。这里有13种不同的云可选择包括:vSphere、 OpenStack、CloudStack、Amazon Web Services、Rackspace、Microsoft Azure、 DigitalOcean、HP Public Cloud、IBM SoftLayer、Google Compute Engine和其他。

首先,用户可以利用如下指示在Rackspace(例如)上注册Cloud Provider,Manage >Repo 或者 Cloud Provider,然后点击+按钮选择Rackspace。这里需要Rackspace API 密钥---密钥可以账户设置部分检索。

用户可以利用自动缩放策略自动启用新云服务器来创建新的集群。步骤如下:Manage > Clusters页面然后点击+按钮。你可以选择容量为基础的布局策略,然后Weave成网络层目的是以便安全、集群内多个主机间密码保护的跨容器通信。

用户可以在新创建的集群中添加一些云服务器按照如下指示:Manage > Hosts然后点击+按钮并选择Rackspace。一旦选定云服务提供商,用户可以选择所需的区域、大小和镜像。然后选择一个集群并且可以指定云服务器的数量。

利用 DCHQ’s REST API’s以编程方式部署Nginx 集群

一旦云服务器配置完成,用户可以利用DCHQ’s REST API’s以编程的方式部署Nginx 集群。为了简化API’s的使用,用户需要选择创建焦躁的集群作为默认集群。可以通过向导User’s Name > My Profile然后选择所需的默认集群。

一旦选择了默认的集群,用户可以简单地执行如下curl脚本来调用“部署”API (https://dchq.readme.io/docs/deployid)。

在这个简单的curl脚本中,如下:

  • 1到100的循环;
  • 在每次部署10节点(容器)Nginx 集群应用程序,利用分给10个用户的默认集群。这意味着,每一次迭代将在10个不同的集群中部署10x10(或者100)个容器;
  • user1%40dchq.io用于user1@dchq.io其中@符号表示被十六进制%40替换;
  • 主机与密码之间@不被十六进制替换;
  • <id>是指Nginx集群应用的ID。这可以通过Nginx 集群的Library > Customize检索到。ID必须在URL中;
  • 每次迭代中使用Sleep 22。这占用了2,200秒-37分钟。

你可以尝试着自己写curl 脚本。当然你也可以提前安装 DCHQ(http://dchq.co/dchq-on-premise.html)或者在DCHQ.io Hosted PaaS 上注册(http://dchq.io)。

监控集群、服务器和正在运行的容器利用的CPU、内存和I/O

DCHQ允许用户监视集群、主机和容器的CPU、内存和I/O。

  • 要监视集群,用户可以通过步骤Manage > Clusters;
  • 要监视主机,用户可以通过步骤Manage > Hosts > Monitoring Icon;
  • 要监视容器,用户可以通过步骤Live Apps > Monitoring Icon。

在我们配置10,000 容器前后需要跟踪主机和集群的性能。

在旋转容器之前,已经捕捉到了主机的性能图表截图。可以看出CPU的利用率是可以忽略不计的并且内存的利用率为16%。

下面的截图来自Rackspace 账户,显示30台虚拟机成功配置后情况。我们规定一个 DCHQ用户x10个集群所对应的三台主机共用一个Rackspace 账户。

旋转5,000个容器后,我们又捕获了主机的性能图表的截图。可以看出此时内存利用率高达48%。

当达到6,000个容器时,我们把范围缩小到3台主机(集群之一)中的一台主机时来查看更多的细节。比如容器在特定主机上运行时的#,镜像的数量,以及CPU/内存/磁盘利用率。

当旋转10,000个容器后,我们捕获了主机的性能图表的截图。可以看出此时最高的内存利用率达到74%。

我们把范围缩小到3台主机(集群之一)中的一台主机时,会发现更多的细节。比如容器在特定主机上运行时的#,镜像的数量,以及CPU/内存/磁盘利用率。

这里是1000 Nginx集群运行时的总览(每个集群中有10个容器)。

在删除所有基于容器的应用程序之后,我们捕获了集群的其他截图。此时内存利用率为19%。

然后,我们把范围缩小到其中的一个服务器来观察其历史表现--内存利用率从75%一路下降到19%的过程。

故障率

在这一测试中,10000个容器仅有4个容器出现故障--设置故障率为0.0002%。

总结

策划基于Docker的应用程序部署对于很多DevOps 工程师和基础运营商来说仍是一个挑战,他们往往很难管理访问控制、监控、网络、基于容量的布局、自动扩展策略的多开发团队间服务器池。

提供托管和内部部署版本的DCHQ解决了这些挑战,它为基础运营商和DevOps 工程师提供了最先进的基础设置配置、自动缩放、集群和配置策略。

除了先进的基础设施配置和集群功能,DHCQ还通过先进的应用集成框架简化了企业级应用程序的容器化过程。并通过交叉镜像环境变量延伸了Docker Compose;可扩展的BASH脚本插件可以调用请求时间或者规定位置;高可用性的应用程序集群在多主机或者区域间支持自动缩放。

在http://DCHQ.io免费注册或者下载DCHQ On-Premise以访问使用多层Java应用模板和获得应用程序的生命周期管理功能,如监测、容器更新、输出/输入的规模和持续性交付。

原文链接:Run 10,000 Docker Containers In Less Than 45 Minutes On 30 Rackspace 

Cloud Servers With 4GB Of Memory Each(译者/刘崇鑫 审校/朱正贵 责编/仲浩)

译者简介:刘崇鑫,北京邮电大学研究生在读,专业光通信工程。

本文分享自微信公众号 - CSDN技术头条(CSDN_Tech)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2015-11-06

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 一个开发者的Linux Containers之旅

    告诉你们一个秘密:所有的DevOps 云工具是如何进入我的应用程序又与世界联系起来的对我来说至今仍然是一个迷。但是,随着时间的推移,我已经逐渐意识到,了解如何去...

    CSDN技术头条
  • Teradata面向大中华区推出Think Big业务,融合开源提供大数据咨询服务

    近日,大数据分析服务供应商Teradata天睿公司举行媒体沟通会宣布,旗下Think Big公司正式进军大中华区市场,面向客户提供开源数据分析的咨询服务,融合优...

    CSDN技术头条
  • Lambda架构已死,去ETL化的IOTA才是未来

    经过这么多年的发展,已经从大数据1.0的BI/Datawarehouse时代,经过大数据2.0的Web/APP过渡,进入到了IOT的大数据3.0时代,而随之而来...

    CSDN技术头条
  • Elasticsearch 6.X 新类型Join深入详解

    0、ES6.X 一对多、多对多的数据该如何存储和实现呢? 引出问题: “某头条新闻APP”新闻内容和新闻评论是1对多的关系? 在ES6.X该如何存储、如何进行高...

    铭毅天下
  • 物联网边缘计算:实际潜力是什么?

    随着物联网越来越普遍,用例越来越多,某些应用程序将需要实时或接近实时的分析。而企业物联网系统却无法单独安装在云上。

    SDNLAB
  • RxJava2 源码解读之 ConcatMap

    之前分析了FlatMap发射数据无序的原因,但是没有实际用代码验证过,这里我们在分析ConcatMap源码之前,我们先运行测试代码,有个直观的感受。

    三好码农
  • 撕掉代工标签,能否迎来芯片市场的“权力转移”?

    中国半导体代工产业正一步步“撕掉”代工标签,成为世界半导体产业中不可取代的一部分。

    镁客网
  • 红外光电测速传感器电路设计

      光电二极管发射红外光,如果有障碍物的话红外光线会被反射回来,被感应到后光电三极管导通。如果没有障碍物就不会导通。  二。安装

    用户6754675
  • 巧用indiegogo的秘密链接“secret perk”的5大方法

    indiegogo推出的秘密支持链接“secret perk”,这是indiegogo后台生成的一种专属的链接,发给特定人打开后能看到不一样的支持项目。

    小雨2018
  • HTML+JS实现简单贪吃蛇游戏

    因为js是单线程的,所以有js写贪吃蛇可以少考虑很多东西,感觉非常方便。今天给大家介绍一个非常简单的贪吃蛇写法。我说的非常简单勒,就是指没有游戏结束,也不会变长...

    ZackSock

扫码关注云+社区

领取腾讯云代金券