2017-08-07 阿邬

Joyent最近 发布 的3.0版ContainerPilot是一种可在容器内部运行多个进程的Init系统。该系统可自动实现服务注册,服务发现、运行状况检查,以及进程的生命周期管理任务。它提供了一种基于HTTP的全新API,简化的配置语言,目前仅支持Consul。

通过处理随后启动的子进程,容器中的Init系统可顺利应对PID-1问题。ContainerPilot最初在构建时采用了单一“主”应用程序的概念,在第3版中,它可以充当容器内多个进程的控制器,这一改进主要来自 用户反馈 ,因为很多用户对进程间依赖性的不同选项感到困惑。在本次发布的新版本中,每个进程都有自己的运行状况检查、依赖性、运行频率,以及启动和关闭过程中的生命周期钩子等机制。

如果诸如服务发现代理等支撑进程独立于主应用运行,通常就会导致容器中运行多个进程。此类进程的配置方法可能与主应用有所不同,同时主要还取决于同一个容器或外部容器中运行的其他服务。这些因素导致编排任务变得复杂无比。

对此Joyent提出了一种名为“ Autopilot ”的概念,借此可将编排方面的所有工作转移给应用程序本身,这样就不再需要外部的编排程序了。此时的编排通常涉及服务端点在注册表中的注册操作,注册后才能被其他服务查找,此外还提供了运行状况检查的相关定义,以及依赖项的定义和 生命周期 管理。在 ContainerPilot的产品中 ,目前的最新版仅支持使用Hashicorp的Consul作为服务发现机制。原本对etcd的支持已取消。

支持多进程容器的ContainerPilot 3.0已正式发布 图片来源: https://www.joyent.com/blog/containerpilot-hello-world

ContainerPilot中基于HTTP的全新API可供用户向控制应用程序及其环境发送信号。HTTP请求可发送至容器内部的Socket中,借此更新环境变量,切换维护模式,记录Prometheus端点的度量指标,或重载ContainerPilot配置。这种方式取代了原本基于信号的机制,原先的机制只能切换状态,但无法提供结果反馈。

第3版中的配置语言整合了用户定义服务生命周期事件之间依赖性的方法。例如,可以定义nginx仅在内部的Consul代理启动之后再启动。这种依赖性可以通过启动或停止其他服务的方式定义,或针对服务的任何中间状态来定义。该版本还将之前定义的所有“行为”钩子进行了整合,组成了一种名为 作业(Job) 的抽象。不同作业可相互绑定,借此创建由依赖应用组成的链条。

ContainerPilot是由Joyent原有的一个名为ContainerBuddy的产品 发展而来 的,目前该产品也已成为一个开源项目,可访问 这里 获取。

 

来自: http://www.infoq.com/cn/news/2017/08/containerpilot-30-released

扩展阅读

蘑菇街11.11:私有云平台的Docker应用实践
Docker周报:OpenShift 3开发完成,即将发布
我的碎碎念:Docker入门指南
Docker 的现状与未来
聊聊Docker 1.9的新网络特性

为您推荐

利用HTML5与jQuery技术创建一个简单的自动表单完成
前端篇: 前端演进史
Docker:利用Linux容器实现可移植的应用部署
10个最佳的HTML5代码段,以简化您的开发任务
Velocity New York 2015 - 前端篇

更多

多进程
容器
IT业界
用户评论
开源开发学习小组列表