近两年来,微服务架构和基于容器的虚拟化技术以迅雷不及掩耳之势席卷了整个软件开发社区,微服务与Docker的结合更被视为一种“颠覆”。在与容器结合使用后,微服务架构的优点得到了进一步的放大:微服务鼓励软件开发者将整个软件解耦为较小的功能模块,并且这些功能能够应对外界的故障;而容器进一步对这种解耦性进行了扩展,它能够将软件从底层的硬件中分离出来。
这种方式所产生的结果是:应用程序能够更快地进行创建,并且更易于维护,同时又能够得到更高的质量,从而促使越来越多的产业应用容器化。如eBay、Amazon、京东、淘宝、唯品、银行、证券和运营商等许多企业均把原有应用容器化,开创了一个新的“容器时代”。
Docker是一个开源的应用容器引擎,让开发者可以将应用以及应用依赖环境打包到一个可移植的容器中,然后发布到Linux机器上。这种类似沙箱的机制,可以使容器相互之间几乎没有性能开销,可以很容易地在主机和云平台中迁移。针对容器的管理平台种类较多,质量参差不齐。今天与大家一起讨论的是关于容器管理平台AppSoar的健康检查与调度策略,这也是容器在企业落地经常关注到的问题。
当一个容器在运行的过程中难免出现由于某种原因导致容器不能正常工作的情况。针对这种情况的做法是引入健康检查机制。
健康检查
在AppSoar管理平台中,通过在它的主机上运行托管网络代理端,实现了健康监控系统用来协调容器和服务的分布式健康检查。这些网络代理端在内部使用HAProxy来验证应用的健康状态,无论单独容器还是服务的健康检查被开启后,每个容器都会被多至三个网络代理端所监控,代理端运行于不同的容器主机上。如果至少一个HAProxy实例汇报“通过”的健康检查,容器就会被认为是健康的;当所有HAProxy实例都汇报“不健康”的健康检查,就认为容器是不健康的。
这种处理网络区分并且相比基于客户端的健康检查更有效率。通过使用HAProxy来执行健康检查,允许用户跨越应用和负载均衡来指定相同的健康检查策略。
健康检查机制
健康检查机制有两种(默认无):
第一种:确认TCP连接开启的健康检查,根据检查间隔时间和健康阈值规则,进行非健康时操作。
第二种:是HTTP 2xx/3xx响应检查,是执行一个HTTP请求并确保接受了正确的响应。容器对外提供的HTTP请求有GET、POST、HEAD等多种选择,根据HTTP的检查规则和阈值设置,进行非健康时操作。
Compose配置描述:
通过以上的健康检查机制,可以确保我们的应用或服务可以正确放心运行,保证业务的流畅性。
由于AppSoar平台中添加宿主机的配置或者业务负载各不相同,所以,我们需要根据主机配置和业务容器或服务进行合理分配,这时需要考虑到AppSoar管理平台的调度策略。
调度策略
在AppSoar管理平台中,通过服务(Service)或者通过负载均衡器(Loadbalancer)或通过容器页面(Container page)启动容器时,我们提供为容器创建标签的选项以及提供调度容器到您想要放置容器主机的能力。
调度规则为您想要在AppSoar如何挑选使用的主机提供了灵活性。我们可以使用标签来帮助定义调度规则,让您能为一个容器创建您想要的数量的标签。有了多种规则后您可以完全控制在哪台主机上创建容器,也可以请求具有特定主机标签、容器标签、名字或者特定服务的窗口在哪一台主机上启动。通过这些调试规则能帮助创建您容器托管关系的黑名间和白名单。
对于容器或服务,提供了两个选项来决定在哪台主机上启动您的容器。
1.在指定的主机上运行所有容器
通过选择该选项运行所有容器在指定的主机,容器或服务将会在指定的主机上启动。如果您的主机停止运行,那么主机上的窗口也将停止。如果您在容器页面创建一个容器,即使存在端口冲突,容器也能被启动。如果您创建的一个规模大于1的服务,存在端口冲突,您的服务可能陷入未激活状态直到您编辑服务的规模值。
2.自动选择匹配调度规则的主机
通过选择该选项自动匹配调度规则的主机,您可以灵活的选择您的调度规则。任何遵守所有规则的主机都是容器能在上面启动的主机。您能通过“添加调度策略”按钮来添加规则。
对于每个规则,您要选择规则的条件。有四个不同的条件,分别定义规则必须遵守的规则有多严格;这些字段决定您希望的规则将应用于哪些字段。具体字段和条件如下:
条件
必须或必须不:AppSoar只使用匹配或者不匹配字段和值的主机。如果AppSoar找不到一台主机符合带有这些条件的所有规则,您的服务将一直陷入正在激活状态。服务将不停为容器查找到可用的主机。你能编辑服务规模,或者添加/编辑另一台满足这些规则的主机。
应该或不应该:AppSoar试图使用匹配这些字段和值的主机。在没有主机匹配所有规则的条件下,AppSoar将一个接一个移除容器直到所有主机满足剩下的限制。
字段、键/值
主机标签:当为容器或服务选择主机时,AppSoar将会检测主机上的标签来查看是否这些标签匹配所提供的键/值对。因为每台主机能有一个或多个标签,Rancher将把键/值对和主机上所有标签做对比。当添加一台主机到AppSoar时,您就能为主机添加标签,您也能通过主机下拉菜单中的Edit选项来编辑主机上的标签。激活主机上的标签列表可从下拉菜单的键值字段获得。
带标签的容器:当选择这个字段时,AppSoar将查找主机上已经存在的标签匹配键值对的容器主机。因为每个容器能有一个或多个标签,AppSoar将把键值对和主机上的每个容器的所有标签进行比较。容器标签不能在容器启动后编辑容器的标签,为了能创建拥有同样设定的新容器,您能在容器启动前克隆容器或服务以及增加新的标签。AppSoar将检测一台主机上是否有指定服务的容器在运行。如果有相同的,需要改变服务名字或取消未激活或者已移除状态,这规则就不再有效。容器标签选择的这个字段,输入值必须为:栈名/服务名(stack_name/service_name)的格式。正在运行的服务列表可以从下拉菜单的中值中获得。
带名字的容器:AppSoar将检测一台主机上是否有指定名字的容器正在运行。如果稍后的时间里,窗口改变了名字或者处于未激活/已移除状态,整条规则便不再有效。运行中的容器列表可以从下拉菜单的值中获得。
以上是关于AppSoar的容器调度策略设置的一些使用方法,希望能够对于企业容器落地实施和应用有所帮助。本文仅供参考,旨在与大家共同完善容器生态圈!