您好,登錄后才能下訂單哦!
這篇文章主要講解了“Docker swarm mode有什么用”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Docker swarm mode有什么用”吧!
Docker從1.12引入了swarm模式,swarm mode用來管理集群化的docker engines,被稱作swarm。可以使用docker CLI來創建swarm,給swarm上部署應用,管理swarm的行為等等。。你可以創建一個集群包含一個或者多個docker engines,這個被叫做swarm mode。一個swarm包含了多個node,node可以是物理機、虛擬機等等。node包含了兩個角色:managers、workers
manager node:
維護集群狀態
調度服務
服務swarm模式下的HTTP API
manager之間采用raft協議通訊,所以可以通過部署多臺managers建立manager的高可用,但是manager必須是奇數個
worker node:
work nodes就是docker engine實例,唯一的用途就是執行容器。你可以創建一個只有一個manager的swarm,但是不能創建一個只有一個node,確沒有manager的swarm集群。
在部署一個app容器鏡像到docker的swarm模式的時候,一般是創建一個service。當你創建一個service的時候,你要指定那個鏡像會被使用,并且要在鏡像里面執行上面命令,你也可以指定這個服務的一些其他選項:
在swarm模式下,這個service對外暴露的端口
一個overlay網絡用來連接到swarm下的其他service
cpu和mem的使用配額限制
一個滾動升級策略
這個鏡像在運行時的副本個數
有兩種類型的service部署模式:replicated和global
在replicated service模式下,你可以指定該service你想有多少個task在運行,比如,你可以指定一個http服務有三個replicas,每個都提供相同的內容
在global service模式下,該service在每一個node上運行一個task,這里不需要預先設定task的數量,任何時候只要你在集群里面加入新的node,調度系統都會在該新node上自動部署該服務,這種場景適合在機器上部署監控客戶端等等。
docker允許你創建service,service可以運行tasks,一個service是一個描述的最終狀態,task是工作的work,work通過swarm來調度到node節點上,服務創建使用的是下面的流程:
使用docker service create創建服務
請求到達Docker manager節點上
Docker manager節點調度該請求運行到一個workers node上
每個service可以啟動多個tasks實例
每個tasks實例都有自己的生命周期
一個task會一直運行到它的任務完成,如果一個task停止了,該task是不會再次運行的。task會通過一系列狀態最終完成或者失敗,task一般有以下狀態:
NEW 初始化task
PENDING 阻塞狀態
ASSIGNED 分配到node狀態
ACCEPTED 被node接收狀態
PREPARING 準備狀態
STARTING 啟動狀態
RUNNING 運行狀態
COMPLETE 正常運行完畢狀態
FAILED 運行失敗狀態
SHUTDOWN docker關閉該task狀態
REJECTED work node拒絕該task狀態
ORPHANED node節點宕機太長狀態
REMOVE
當你第一次安裝并啟動docker engine時,swarm模式是默認被禁止的。當swarm模式打開后,你可以通過swarm service來管理services,有兩種方式可以運行在swarm模式:
創建一個新的swarm
加入現有的swarm
docker engine創建swarm的流程:
交換當前node到swarm模式
創建一個名為default的swarm
指定當前node為當前swarm的leader manager
命名該node的名稱為該主機名
配置manager監聽在本機的2377端口
設置當前node為active狀態,這意味這該node可以接收集群調度來的tasks
啟動一個內部的分布式數據存儲系統
默認生成一個自簽名的CA證書
生成一個tokens,為后面的worker和manager加入到該swarm
創建一個名為ingress的overlay網絡,對外暴露swarm上的服務
manager node使用advertise地址來接受其他node訪問Swarmkit API and overlay networking的請求,其他在swarm集群中的node,必須可以訪問manager的advertise地址 ,如果你不指定advertise地址,docker會自動檢查系統是否有一個單ip地址,如果有,則監聽在該地址的2377端口。如果該系統有多個ip地址,你必須通過--advertise-addr來指定一個地址。
新的node需要一個token才能加入現有swarm集群,worker node使用的token不同于manager node使用的token,node只有使用join-token才能加入swarm,當Rotating join token的時候,是不會影響已經加入swarm集群的node的,rotation token可以確保老的token不能被所有的新node使用來加入swarm集群。
下面是swarm的一些關鍵點:
一個swarm包含了多個運行在swarm mode下的docker host,分別由manager和workers組成。manager來管理成員和授權,worker來運行swarm service。一個docker host可以是一個manager,也可以是一個worker,或者即是manager也是worker。還有一個大的優勢是,如果swarm service中的容器是standalone模式的,你可以在修改service的配置后(networks、volumes) 不用重啟service。docker會自動處理這些。
當一個docker host運行在swarm模式,你照樣可以運行standalone模式的容器,但是swarm只能管理swarm service。
node 一個docer engine就是一個node,當你需要部署應用到swarm的時候,需要在manager node上提交部署作業,manager node會派遣task到worker node上。manager node也有編排功能。worker nodes接收并執行task。
service 一個service是定義好的在worker node上執行的task,swarm系統是一個中心結構的系統,當你定義好一個service的時候,你需要制定使用的鏡像以及在鏡像里面執行的命令。 在replicated services模式下,swarm manager分配定義好的replica task的副本數量的task在worker node上 在global services模式下,swarm service只運行一個task在worker node上
tasks 一個task包括一個docker容器和在容器里面運行的命令。task會被swarm自動調度。manager分配task到worker上。一旦task被分配到一個node上,該task就不能移動到其他node上了,除非該node fail。
Load balancing swarm使用 ingress load balancing,swarm manager可以設置一個PublishedPort給service,如果不指定PublishedPort,則是在30000-32767這個范圍內自動選擇。外部的請求,例如LB,可以通過PublishedPort來訪問服務,但是這個LB的服務必須在node集群上,swarm集群中的所有節點都會連接到正在運行的service上,而不論該node上是不是有運行該service服務。在swarm內部有一個DNS,可以自動的分片在swarm中每個service的entry,swarm manager使用內部LB來分發請求到集群內部的service上
感謝各位的閱讀,以上就是“Docker swarm mode有什么用”的內容了,經過本文的學習后,相信大家對Docker swarm mode有什么用這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。