Docker 本身非常適合管理單個容器,若運行的是構建于有限幾個或十幾個容器上的應用程序,則可以僅在 Docker 引擎上自主運行,部署和管理這些容器并不會遇到太大的困難。然而,對于包含成百上千個容器的企業(yè)級應用程序來說,這種管理將變得極其復雜,甚至無法實現(xiàn)。
容器編排是指自動化容器應用的部署、管理、擴展和聯(lián)網的一系列管控操作,能夠控制和自動化許多任務,包括調度和部署容器、在容器之間分配資源、擴縮容器應用規(guī)模、在主機不可用或資源不足時將容器從一臺主機遷移到其他主機、負載均衡以及監(jiān)視容器和主機的運行狀況等。
容器編排系統(tǒng)用于完成容器編排相關的任務。以 Kubernetes、Mesos 和 Docker Swarm等為代表的這類工具通常需要用戶在 YAML 或 JSON 格式的配置清單中描述應用程序的配置,以指示編排系統(tǒng)在何處檢索容器鏡像(私有倉庫或者某外部倉庫)、如何在容器之間建立網絡、在何處存儲日志以及如何掛載存儲卷等。確定調度目標后,編排工具將根據(jù)預定規(guī)范管理容器的生命周期。
概括來說,容器編排系統(tǒng)能夠為用戶提供如下關鍵能力。
集群管理與基礎設施抽象:將多個虛擬機或物理機構建成協(xié)同運行的集群,并將這些硬件基礎設施抽象為一個統(tǒng)一的資源池。
資源分配和優(yōu)化:基于配置清單中指定的資源需求與現(xiàn)實可用的資源量,利用成熟的調度算法合理調度工作負載。
應用部署:支持跨主機自動部署容器化應用,支持多版本并存、滾動更新和回滾等機制。
應用伸縮:支持應用實例規(guī)模的自動或手動伸縮。
應用隔離:支持為租戶、項目或應用進行訪問隔離。
服務可用性:利用狀態(tài)監(jiān)測和應用重構等機制確保服務始終健康運行。
Kubernetes、Mesos 和 Docker Swarm 一度作為競爭對手在容器編排領域三分天下,但這一切在 2017 年發(fā)生了根本性的變化,因為在這一年發(fā)生了幾個在容器生態(tài)發(fā)展史上具有里程碑式意義的重要事件。
一是 AWS、Azure 和 Alibaba Cloud 都相繼在其原有容器服務上新增了對 Kubernetes 的支持,甚至 Docker 官方也在 2017 年 10 月宣布同時支持 Swarm 和Kubernetes 編排系統(tǒng)。
二是 rkt 容器派系的 CoreOS 舍棄掉自己的調度工具 Fleet,將商用平臺 Tectonic 的重心轉移至 Kubernetes。
三是 Mesos 也于 2017 年 9 月宣布了對Kubernetes的支持,其平臺用戶可以安裝、擴展和升級多個生產級的 Kubernetes 集群。
四是 RancherLabs 推出了 2.0 版本的容器管理平臺并宣布將全部業(yè)務集中于Kubernetes,放棄了其多年內置的容器編排系統(tǒng)Cattle。這種局面顯然意味著Kubernetes已經成為容器編排領域事實上的標準。后來,Twitter、CNCF、阿里巴巴、微軟、思科等公司與組織紛紛支持Kubernetes。
以上種種跡象表明,Kubernetes 已成為廣受認可的基礎設施領域工業(yè)標準,其近兩三年的發(fā)展狀態(tài)也不斷驗證著 Urs Holzle 曾經的斷言:無論是公有云、私有云抑或混合云,Kubernetes 將作為一個為任何應用、任何環(huán)境提供容器管理的框架而無處不在。