欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

在不到5分钟的时间内,在5个云服务器的群集上运行1,000个Docker Redis容器,每个服务器具有2GB的内存...

程序员文章站 2022-04-10 14:41:03
...

背景

尽管应用程序的可移植性(即能够在任何Linux主机上运行相同的应用程序)仍然是采用Linux容器的主要驱动力,但另一个关键优势是能够优化服务器利用率,以便您可以使用每一个计算。 当然,对于PROD之类的上游环境,您可能仍想为工作负载分配足够的CPU和内存–但是在DEV / TEST环境中(通常代表组织中大多数计算资源消耗),优化服务器利用率可以节省大量成本。

在纸上这一切听起来都是不错的—但是DevOps工程师和基础架构运营商仍在努力解决以下问题:

  • 如何将跨不同云的服务器分组到映射到业务组,开发团队或应用程序项目的集群中?
  • 如何监视这些群集并深入了解不同组或用户的资源消耗?
  • 如何在群集中的服务器之间建立网络,以便多个主机之间的容器可以相互通信?
  • 如何定义自己的基于容量的放置策略,以便可以使用群集中的所有计算?
  • 如何自动扩展集群以满足开发人员对基于容器的新应用程序部署的需求?

DCHQ提供托管和内部部署版本,可解决所有这些挑战,并为基础架构运营商或DevOps工程师提供最先进的基础架构设置,自动扩展,群集和放置策略。

  • 用户可以通过运行自动生成的脚本来安装DCHQ代理以及Docker和软件定义的网络层(可选),来注册在任何地方运行的Linux主机。 可以使用我们的REST API以编程方式自动执行此任务,以创建“ Docker服务器”( https://dchq.readme.io/docs/dockerservers
  • 另外,DCHQ与13个云提供商集成,从而允许用户自动启动vSphere,OpenStack,CloudStack,Amazon弹性云计算,Google Compute Engine,Rackspace,DigitalOcean,SoftLayer,Microsoft Azure等众多虚拟基础设施。

在不到5分钟的时间内,在5个云服务器的群集上运行1,000个Docker Redis容器,每个服务器具有2GB的内存...

跨混合云或本地开发机器的服务器可以与群集关联,这是基础架构的逻辑映射。 该集群具有高级选项,例如:

  • 联网 –用户可以选择Docker联网或软件定义的联网,以促进跨容器跨多个主机进行通信
  • 租赁 –用户可以指定该群集中的服务器何时到期,以便DCHQ可以自动销毁这些服务器。
  • 放置策略 –用户可以从多种放置策略中进行选择,例如基于接近度的策略,轮询或默认策略,这是基于容量的放置策略,它将Docker工作负载放置在具有足够计算资源的主机上。
  • 配额 –用户可以指示此群集是否遵守分配给用户和组的配额配置文件。 例如,在DCHQ.io中,将为所有用户分配8GB的内存配额。
  • 自动扩展策略 –用户可以定义自动扩展策略,以在集群计算资源用尽时自动添加服务器,以满足开发人员对基于容器的新应用程序部署的需求
  • 粒度访问控制 –租户管理员可以定义对群集的访问控制,以指示谁可以向其部署基于容器的应用程序。 例如,开发人员可以注册他/她的本地计算机并将其标记为私有。 另一方面,租户管理员可以与特定用户组或所有租户用户共享群集。

在不到5分钟的时间内,在5个云服务器的群集上运行1,000个Docker Redis容器,每个服务器具有2GB的内存...

除了先进的基础架构配置和集群功能外,DCHQ还通过先进的应用程序组合框架简化了企业应用程序的容器化,该框架通过跨映像环境变量绑定,可在请求时调用的可扩展BASH脚本插件或扩展了Docker Compose。供应后配置和应用程序群集,可跨多个主机或区域实现高可用性,并支持自动扩展。

设置应用程序后,用户可以监视正在运行的容器的CPU,内存和I / O,获取通知和警报,并执行第二天的操作,例如预定备份,使用BASH脚本插件和Scale的容器更新。进出。 此外,借助Jenkins促进连续交付的即用型工作流使开发人员可以刷新正在运行的应用程序的Java WAR文件,而不会破坏现有的依赖关系和集成。

在此博客中,我们将在不到15分钟的时间内完成在IBM的SoftLayer上由5个云服务器组成的集群上部署1,000个Redis容器的工作。 我们将介绍:

  • 为集群Redis构建应用程序模板,该模板可在任何运行于任何地方的Linux主机上重复使用
  • 在任何云上配置基础架构(SoftLayer是此博客中的示例)
  • 使用DCHQ的REST API以编程方式部署Redis集群
  • 监视正在运行的容器的CPU,内存和I / O

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

登录到DCHQ(托管的DCHQ.io或本地版本)后,用户可以导航至“ 管理” >“ 模板” ,然后单击“ +”按钮以创建新的Docker Compose模板。

为了进行此可伸缩性测试,我们创建了一个简单的Redis群集。 您会注意到, cluster_size参数使您可以指定要启动的容器数(具有相同的应用程序依赖性)。

host参数允许您指定要用于容器部署的主机。 这样,您可以确保跨不同主机(或区域)的应用程序服务器群集的高可用性,并且可以遵守关联性规则以确保数据库在例如单独的主机上运行。 以下是host参数支持的值:

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

在不到5分钟的时间内,在5个云服务器的群集上运行1,000个Docker Redis容器,每个服务器具有2GB的内存...

在任何云上配置基础架构

保存应用程序后,用户可以注册云提供商,以在13个不同的云端点(包括vSphere,OpenStack,CloudStack,Amazon Web Services,Rackspace,Microsoft Azure,DigitalOcean,HP Public)上自动配置和自动扩展群集。云,IBM SoftLayer,Google Compute Engine等。

首先,用户可以通过导航到“ 管理” >“ 仓库和云提供商” ,然后单击“ +”按钮选择“ SoftLayer(IBM)”,为Rackspace注册一个云提供商。 需要提供SoftLayer API**-可以从“帐户设置”部分中获取。

在不到5分钟的时间内,在5个云服务器的群集上运行1,000个Docker Redis容器,每个服务器具有2GB的内存...

然后,用户可以使用自动扩展策略创建集群,以自动启动新的Cloud Server。 可以通过导航到“ 管理” >“ 集群”页面,然后单击+按钮来完成。 您可以选择一个基于容量的放置策略,然后选择Weave作为网络层,以促进群集内多个主机之间安全,受密码保护的跨容器通信。

在不到5分钟的时间内,在5个云服务器的群集上运行1,000个Docker Redis容器,每个服务器具有2GB的内存...

用户现在可以导航到“ 管理” >“ 主机” ,然后单击+按钮以选择SoftLayer(IBM) ,在新创建的集群上配置大量Cloud Server。 选择云提供商后,用户可以选择所需的区域,大小和图像。 可以在新的云服务器上打开端口(例如,对于Docker是32000-59000,对于Weave是6783,对于RabbitMQ是5672)。 然后选择一个集群,然后可以指定云服务器的数量。

在不到5分钟的时间内,在5个云服务器的群集上运行1,000个Docker Redis容器,每个服务器具有2GB的内存...

使用DCHQ的REST API以编程方式部署Redis集群

设置云服务器后,用户可以使用DCHQ的REST API以编程方式部署Redis集群。 为了简化API的使用,用户将需要选择之前创建的集群作为默认集群。 可以通过导航到“用户名”>“我的配置文件”,然后选择所需的默认群集来完成。

在不到5分钟的时间内,在5个云服务器的群集上运行1,000个Docker Redis容器,每个服务器具有2GB的内存...

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

#!/bin/bash  for i in `seq 1 1 100`; do      curl -X POST https://user%40dchq.io:<dchq-password>@<www.dchq.io_or_ip> /api/1.0/apps/deploy/<id>      echo     echo $i     sleep 8 done  exit 0;

在这个简单的curl脚本中,我们具有以下内容:

  • for循环,从1到100
  • 每次迭代时,我们都会使用分配给用户的默认集群来部署集群Redis应用程序。
  • user%40dchq.io用于aaa@qq.com,其中@符号用十六进制%40代替
  • 密码和主机之间的@不替换为十六进制
  • <id>是指Redis集群应用程序ID。 可以通过导航到“ Redis”集群的“ 库” >“ 自定义”来检索此信息。 该ID应该在URL中
  • 每次迭代之间使用sleep 8。 这需要800秒-或13.3分钟。

您可以自己尝试使用curl脚本。 您可以在本地安装DCHQ或在DCHQ.io Hosted PaaS注册

监视群集,服务器和运行中容器的CPU,内存和I / O利用率

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

  • 要监视集群,您只需导航至“ 管理”>“集群”
  • 要监视主机,您只需导航至管理>主机>监视图标
  • 要监视容器,您只需导航至Live Apps>监视图标

在启动1,000个容器之前和之后,我们跟踪了主机和群集的性能。

在拆分容器之前,我们已经捕获了主机性能图表的屏幕快照。 您会看到CPU利用率可以忽略不计,而内存利用率为25%

在不到5分钟的时间内,在5个云服务器的群集上运行1,000个Docker Redis容器,每个服务器具有2GB的内存...

拆分了500个容器之后,我们捕获了主机性能图表的屏幕截图。 您可以看到最高的CPU利用率约为18%, 最高的内存利用率为49%

在不到5分钟的时间内,在5个云服务器的群集上运行1,000个Docker Redis容器,每个服务器具有2GB的内存...

当我们深入研究5个主机之一时,我们看到了更多详细信息,例如在该特定主机上运行的容器数,提取的映像数以及CPU /内存/磁盘利用率。

在不到5分钟的时间内,在5个云服务器的群集上运行1,000个Docker Redis容器,每个服务器具有2GB的内存...

拆分了1000个容器后,我们捕获了主机性能图表的屏幕截图。 您可以看到最高的CPU利用率约为31%, 最高的内存利用率为75%

在不到5分钟的时间内,在5个云服务器的群集上运行1,000个Docker Redis容器,每个服务器具有2GB的内存...

当我们深入研究5个主机之一时,我们看到了更多详细信息,例如在该特定主机上运行的容器数,提取的映像数以及CPU /内存/磁盘利用率。

在不到5分钟的时间内,在5个云服务器的群集上运行1,000个Docker Redis容器,每个服务器具有2GB的内存...

这是所有正在运行的100个Redis集群的视图(每个集群有10个容器)。

在不到5分钟的时间内,在5个云服务器的群集上运行1,000个Docker Redis容器,每个服务器具有2GB的内存...

这些应用程序运行几个小时后,我们捕获了集群的屏幕截图。 您会看到CPU利用率为4%, 内存利用率为81% 这些是跨群集中5台服务器的聚合指标。

在不到5分钟的时间内,在5个云服务器的群集上运行1,000个Docker Redis容器,每个服务器具有2GB的内存...

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

然后,我们深入研究其中一台服务器以查看历史性能– 内存利用率从接近90%一直下降到38%

在不到5分钟的时间内,在5个云服务器的群集上运行1,000个Docker Redis容器,每个服务器具有2GB的内存...

结论

对于许多DevOps工程师和基础架构运营商来说,基于Docker的应用程序部署编排仍然是一个挑战,因为他们经常难以管理多个开发团队中的服务器池,其中访问控制,监视,网络,基于容量的放置,自动扩展策略和配额是需要配置的关键方面。

DCHQ提供托管和内部部署版本,可解决所有这些挑战,并为基础架构运营商或DevOps工程师提供最先进的基础架构设置,自动扩展,群集和放置策略。

除了先进的基础架构配置和集群功能外,DCHQ还通过先进的应用程序组合框架简化了企业应用程序的容器化,该框架通过跨映像环境变量绑定,可在请求时调用的可扩展BASH脚本插件或扩展了Docker Compose。供应后配置和应用程序群集,可跨多个主机或区域实现高可用性,并支持自动扩展。

免费注册在http://DCHQ.io或下载DCHQ内部部署 ,以获得与应用程序生命周期管理功能以及像监控,集装箱更新,规模输入/输出访问外的箱多层Java应用程序模板,持续交付。

翻译自: https://www.javacodegeeks.com/2015/10/run-1000-docker-redis-containers-in-less-than-15-minutes-on-a-cluster-of-5-cloud-servers-with-2gb-of-memory-each.html