从零开始学习docker(十五)Swarm mode 介绍
擼了今年阿里、頭條和美團(tuán)的面試,我有一個重要發(fā)現(xiàn).......>>>
一般情況下,我們都在一臺機(jī)器下部署容器,但實(shí)際情況下,應(yīng)用如果只在一臺機(jī)器上無法滿足我們的需求,包含的容器比較多。因此在生產(chǎn)環(huán)境下部署我們的應(yīng)用就會涉及到非常多的容器,這樣就會給我們帶來一系列的問題:
- 怎么去管理這么多的容器?
- 怎么能方便的橫向擴(kuò)展?
- 如果容器down了,怎么能自動恢復(fù)?
- 如何去更新容器而不影響業(yè)務(wù)?
- 如何去監(jiān)控追蹤這些容器?
- 怎么去調(diào)度容器的創(chuàng)建?
- 保護(hù)隱私數(shù)據(jù)?
這樣我們就需要容器編排技術(shù),Swarm Mode應(yīng)運(yùn)而生。
Swarm 并不是唯一一個可以做容器編排的工具,只不過Swarm是內(nèi)置于docker的一個工具。因此我們使用Swarm時不需要安裝任何東西,Swarm已經(jīng)內(nèi)置到我們系統(tǒng)里面了,只不過我們沒有運(yùn)行在Swarm 模式下,我們一般運(yùn)行在單機(jī)模式下。因此swarm就是初學(xué)者接觸容器編排的第一個工具。
Swarm 架構(gòu)
Swarm是一種集群架構(gòu),既然是集群,那么一定有節(jié)點(diǎn),有節(jié)點(diǎn)那么就有角色。在Swarm中節(jié)點(diǎn)node一共有兩種角色,第一種角色叫Manager,第二種角色叫worker。
Manager節(jié)點(diǎn)好比集群的大腦,在生產(chǎn)環(huán)境中,為了避免單點(diǎn)故障,“大腦”至少要有兩個,因此會有狀態(tài)同步,即在一個Manager產(chǎn)生的數(shù)據(jù)如何同步到另外的Manager節(jié)點(diǎn)上,這里就涉及到一個內(nèi)置的分布式存儲數(shù)據(jù)庫,數(shù)據(jù)通過raft協(xié)議去做同步。raft協(xié)議能夠確保Manager節(jié)點(diǎn)的信息是對稱的,同步的,可以避免腦裂的情況。
Worker節(jié)點(diǎn)就是真正干活的節(jié)點(diǎn),真正的容器部署在cluster中都會運(yùn)行在Work節(jié)點(diǎn)中,當(dāng)然Manager節(jié)點(diǎn)也可以運(yùn)行,但是一般都運(yùn)行在Worker節(jié)點(diǎn)中,因?yàn)閃orker節(jié)點(diǎn)比較多。Worker節(jié)點(diǎn)之間也有數(shù)據(jù)需要同步,是通過Gossip網(wǎng)絡(luò)來做信息同步。
Swarm中一個非常重要的概念是Service和Replicas。
Service在上一節(jié)中介紹docker compose的時候有介紹過,在Swarm中的service與docker compose下的service的意思基本一樣。一個service就代表了一個容器。
在Replicas模式下,即我們想做橫向擴(kuò)展,再部署的過程中,一個replicas就是一個容器。
如上圖所示,我們想部署一個Nginx的service,想要給他做3個擴(kuò)展,實(shí)際上部署的過程中會產(chǎn)生三個容器,這三個容器會通過調(diào)度系統(tǒng)調(diào)度到不同的node上面去。也就是說我們通過Swarm Manager節(jié)點(diǎn)去部署一個service,其實(shí)是不知道這個service最終會運(yùn)行在哪個節(jié)點(diǎn)上,這回根據(jù)Swarm的schedule根據(jù)一定的調(diào)度算法去算的,例如算法會根據(jù)節(jié)點(diǎn)的負(fù)載來選擇。
上面這張圖就是swarm算法調(diào)度的一個過程。在swarm manager上做一些決策,來決定把哪個service部署在哪臺node上,然后在去執(zhí)行實(shí)際的一個操作就可以了。
總結(jié)
以上是生活随笔為你收集整理的从零开始学习docker(十五)Swarm mode 介绍的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 从零开始学习docker(十四)Dock
- 下一篇: 从零开始学习docker(十六)Swar