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