支持多進程容器的ContainerPilot 3.0已正式發布
Joyent最近 發布 的3.0版ContainerPilot是一種可在容器內部運行多個進程的Init系統。該系統可自動實現服務注冊,服務發現、運行狀況檢查,以及進程的生命周期管理任務。它提供了一種基于HTTP的全新API,簡化的配置語言,目前僅支持Consul。
通過處理隨后啟動的子進程,容器中的Init系統可順利應對PID-1問題。ContainerPilot最初在構建時采用了單一“主”應用程序的概念,在第3版中,它可以充當容器內多個進程的控制器,這一改進主要來自 用戶反饋 ,因為很多用戶對進程間依賴性的不同選項感到困惑。在本次發布的新版本中,每個進程都有自己的運行狀況檢查、依賴性、運行頻率,以及啟動和關閉過程中的生命周期鉤子等機制。
如果諸如服務發現代理等支撐進程獨立于主應用運行,通常就會導致容器中運行多個進程。此類進程的配置方法可能與主應用有所不同,同時主要還取決于同一個容器或外部容器中運行的其他服務。這些因素導致編排任務變得復雜無比。
對此Joyent提出了一種名為“ Autopilot ”的概念,借此可將編排方面的所有工作轉移給應用程序本身,這樣就不再需要外部的編排程序了。此時的編排通常涉及服務端點在注冊表中的注冊操作,注冊后才能被其他服務查找,此外還提供了運行狀況檢查的相關定義,以及依賴項的定義和 生命周期 管理。在 ContainerPilot的產品中 ,目前的最新版僅支持使用Hashicorp的Consul作為服務發現機制。原本對etcd的支持已取消。
圖片來源: 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