Docker Swarm (服務構建,水平擴充套件)

2021-09-26 15:34:14 字數 2852 閱讀 4954

使用服務仍能夠配置大多數熟悉的容器屬性,比如容器名、埠對映、接入網路和映象。此外還增加了額外的特性,比如可以宣告應用服務的期望狀態,將其告知 docker 後,docker 會負責進行服務的部署和管理。

舉例說明,假如某應用有乙個 web 前端服務,該服務有相應的映象。測試表明對於正常的流量來說 5 個例項可以應對。那麼就可以將這一需求轉換為乙個服務,該服務宣告了容器使用的映象,並且服務應該總是有 5 個執行中的副本。

下面通過示例來看看如何建立剛剛描述的內容。

使用docker service create命令建立乙個新的服務。

在 windows 上建立新服務的命令也是一樣的。然而本例中使用的是 linux 映象,它在 windows 上並不能執行。請使用 windows 的小夥伴將映象替換為乙個 windows web server 的映象,以便能正常執行。

docker service create --name web-fe -p 8080:8080 --replicas 5 nigelpoulton/pluralsight-docker-ci

#replicas指定水平部署數量

需要注意的是,該命令與熟悉的docker container run命令的許多引數是相同的。這個例子中,使用 --name 和 -p 定義服務的方式,與單機啟動容器的定義方式是一樣的。

通過上面的命令和輸出可以看出。使用docker service creale命令告知 docker 正在宣告乙個新服務,並傳遞 --name 引數將其命名為 web-fe。將每個節點上的 8080 埠對映到服務副本內部的 8080 埠。接下來,使用 --replicas 引數告知 docker 應該總是有 5 個此服務的副本。最後,告知 docker 哪個映象用於副本,重要的是,要了解所有的服務副本使用相同的映象和配置。

敲擊回車鍵之後,主管理節點會在 swarm 中例項化 5 個副本,管理節點也會作為工作節點執行。相關各工作節點或管理節點會拉取映象,然後啟動乙個執行在 8080 埠上的容器。

這還沒有結束。所有的服務都會被 swarm 持續監控,swarm 會在後台進行輪訓檢查(reconciliation loop),來持續比較服務的實際狀態和期望狀態是否一致。如果一致,則無須任何額外操作;如果不一致,swarm 會使其一致。換句話說,swarm 會一直確保實際狀態能夠滿足期望狀態的要求。

舉例說明,假如執行有 web-fe 副本的某個工作節點宕機了,則 web-fe 的實際狀態從 5 個副本降為 4 個,從而不能滿足期望狀態的要求。docker 變回啟動乙個新的 web-fe 副本來使實際狀態與期望狀態保持一致。這一特性功能強大,使得服務在面對節點宕機等問題時具有自癒能力。

3.1訪問服務例項

由於我們部署的例項遍布在三颱主機中,到底用哪個主機訪問呢?我們分別試下

發現都能正常訪問。這是為什麼呢?我們後面的文章再說。

3.1檢視服務和例項

docker service ls

docker service ps web-fe

通過命令我們可以看到有worker1 執行了乙個例項,worker2執行了兩個例項,manager執行了兩個例項。

3.2 修改例項數量(水平擴充套件)

擴充套件到10個例項

3.2 模擬例項掛掉我們切換的51(worker1)檢視有幾個正在執行的例項我們找乙個stop掉

切換回50(manager1),因為worker節點不能執行管理命令

我們發現正在執行的例項仍然是10個,其中有乙個是已經停止的,有乙個是在一分鐘內啟動的。

這時候我們在去把之前的例項啟動起來,切換到 51(worker1)

在切換到50(manager1)檢視,發現仍然是10個例項

3.3 模擬主機掛掉

下面我們直接模擬乙個worker節點掛掉,我們把51 (worker1)關機

切換到worker1,執行關機命令halt

切換到50(manager1)檢視節點和例項

發現例項仍然是10個,節點處於了down狀態。

然後我們開機(恢復),等待若干秒。啟動中。。。啟動完成。

發現節點已經啟動,但是例項仍然在worker2和manager1上,manager上沒有例項執行。

至此我們已經完成了服務構建和水平擴充套件。

docker swarm 管理服務

docker swarm中服務的概念是 乙個服務包含swarm集群中多個節點,每個節點都可以部署服務,每個服務也包含多個相關的容器。docker service help commands create create a new service inspect display detailed in...

Docker Swarm服務發現和負載均衡原理

docker swarm服務發現和負載均衡原理 docker使用的是linux核心iptables和ipvs的功能來實現服務發現和負載均衡。iptables是linux核心中可用的包過濾技術,可根據資料報的內容進行分類 修改和 決策。ipvs是linux核心中可用的傳輸級負載均衡。本地建立乙個集群環...

用Docker Swarm實現容器服務高可用

如何用容器快速部署這三個應用?如何提高效能?如何保障後端可用性?在我以往的實踐中,容器的編排使用了docker compose實現,問題一就已經解決。但docker compose也只是用於編排,可以各啟動三個服務的乙個容器,效能與高可用性就可能不能滿足要求。對於效能與高可用,如果是大型專案,目前不...