?
本文檔使用 PHP中文網(wǎng)手冊 發(fā)布
要在 Docker Engine 處于群集模式時部署應(yīng)用程序映像,請創(chuàng)建一個服務(wù)。在某些更大的應(yīng)用程序中,服務(wù)通常會成為微服務(wù)的圖像。服務(wù)示例可能包括 HTTP 服務(wù)器,數(shù)據(jù)庫或您希望在分布式環(huán)境中運行的任何其他類型的可執(zhí)行程序。
在創(chuàng)建服務(wù)時,您可以指定要使用哪個容器映像以及要在正在運行的容器中執(zhí)行哪些命令。您還可以定義該服務(wù)的選項,包括:
群體將在群體外提供服務(wù)的端口
該服務(wù)的覆蓋網(wǎng)絡(luò)連接到群中的其他服務(wù)
CPU和內(nèi)存限制和保留
滾動更新政策
要在群中運行的圖像副本的數(shù)量
將服務(wù)部署到群集時,群集管理器接受服務(wù)定義作為服務(wù)的所需狀態(tài)。然后它將該群中的節(jié)點上的服務(wù)作為一個或多個副本任務(wù)進(jìn)行調(diào)度。這些任務(wù)在群中的節(jié)點上彼此獨立運行。
例如,假設(shè)您想要在 HTTP 偵聽器的三個實例之間進(jìn)行負(fù)載平衡。下圖顯示了具有三個副本的 HTTP 偵聽器服務(wù)。監(jiān)聽者的三個實例中的每一個都是群中的一個任務(wù)。
容器是一個孤立的過程。在群模式模型中,每個任務(wù)只調(diào)用一個容器。任務(wù)類似于調(diào)度程序放置容器的“插槽”。一旦容器處于活動狀態(tài),調(diào)度程序就會識別出該任務(wù)處于運行狀態(tài)。如果容器未通過健康檢查或終止,則任務(wù)將終止。
任務(wù)是群體中的調(diào)度的原子單位。當(dāng)您通過創(chuàng)建或更新服務(wù)來聲明所需的服務(wù)狀態(tài)時,協(xié)調(diào)器通過調(diào)度任務(wù)來實現(xiàn)所需的狀態(tài)。例如,您可以定義一個服務(wù),指示協(xié)調(diào)器始終保持運行 HTTP 偵聽器的三個實例。協(xié)調(diào)者通過創(chuàng)建三個任務(wù)來做出響應(yīng)。每個任務(wù)都是調(diào)度程序通過產(chǎn)生容器來填充的插槽。容器是任務(wù)的實例化。如果 HTTP 偵聽程序任務(wù)隨后失敗其運行狀況檢查或崩潰,則該協(xié)調(diào)器會創(chuàng)建一個新的副本任務(wù),以生成一個新的容器。
任務(wù)是一個單向機制。它通過一系列狀態(tài)單調(diào)進(jìn)行:分配,準(zhǔn)備,運行等。如果任務(wù)失敗,則協(xié)調(diào)器刪除任務(wù)及其容器,然后創(chuàng)建一個新任務(wù)以根據(jù)服務(wù)指定的期望狀態(tài)進(jìn)行替換。
Docker 群集模式的基礎(chǔ)邏輯是通用調(diào)度器和協(xié)調(diào)器。服務(wù)和任務(wù)抽象本身并不知道它們實現(xiàn)的容器。假設(shè)你可以實現(xiàn)其他類型的任務(wù),例如虛擬機任務(wù)或非集裝箱化的任務(wù)。調(diào)度程序和協(xié)調(diào)器對于任務(wù)的類型是不可知的。但是,當(dāng)前版本的 Docker 僅支持容器任務(wù)。
下圖顯示了 swarm 模式如何接受服務(wù)創(chuàng)建請求并為工作節(jié)點調(diào)度任務(wù)。
服務(wù)可以被配置為使得群中當(dāng)前沒有節(jié)點可以運行其任務(wù)。在這種情況下,服務(wù)保持在狀態(tài)pending
。以下是一些服務(wù)可能保持在狀態(tài)的幾個示例pending
。
注意:如果您的唯一目的是阻止部署服務(wù),請將服務(wù)擴展為0而不是嘗試將其配置為保留在服務(wù)中pending
。
如果所有節(jié)點都處于暫停或耗盡狀態(tài),并且您創(chuàng)建了一個服務(wù),它將處于等待狀態(tài),直到某個節(jié)點可用。實際上,第一個可用的節(jié)點將獲得所有的任務(wù),因此在生產(chǎn)環(huán)境中這不是一件好事。
您可以為服務(wù)保留特定數(shù)量的內(nèi)存。如果群中沒有節(jié)點具有所需的內(nèi)存量,則該服務(wù)將保持等待狀態(tài),直到有可用節(jié)點運行其任務(wù)。如果你指定一個非常大的值,比如500 GB,那么這個任務(wù)將永遠(yuǎn)處于等待狀態(tài),除非你真的有一個可以滿足它的節(jié)點。
您可以對服務(wù)實施布局約束,并且在給定的時間內(nèi)約束可能無法得到遵守。此行為說明您的任務(wù)的要求和配置與群體的當(dāng)前狀態(tài)并不緊密相關(guān)。作為群體的管理員,您聲明群體的期望狀態(tài),并且經(jīng)理與群體中的節(jié)點一起工作以創(chuàng)建該狀態(tài)。您不需要微管理群集上的任務(wù)。復(fù)制和全局服務(wù)有兩種類型的服務(wù)部署,即復(fù)制和全局。對于復(fù)制服務(wù),指定要運行的相同任務(wù)的數(shù)量。例如,您決定部署一個具有三個副本的HTTP服務(wù),每個副本服務(wù)于相同的內(nèi)容。全局服務(wù)是在每個節(jié)點上運行一項任務(wù)的服務(wù)。沒有預(yù)先指定的任務(wù)數(shù)量。每次將節(jié)點添加到swarm中時,編排器都將創(chuàng)建一個任務(wù),并且調(diào)度程序?qū)⒃撊蝿?wù)分配給新節(jié)點。全球服務(wù)的良好候選者是監(jiān)控代理,要在群集中的每個節(jié)點上運行的防病毒掃描程序或其他類型的容器。下圖顯示了三個服務(wù)的黃色副本和灰色的全局服務(wù)。
了解更多
了解群集模式節(jié)點如何工作。
了解PKI如何在群集模式下工作。