Docker swarm mode初探
時間: 2018-07-05來源:OSCHINA
前景提要
Docker從1.12引入了swarm模式,swarm mode用來管理集群化的docker engines,被稱作swarm??梢允褂胐ocker 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上


科技資訊:

科技學院:

科技百科:

科技書籍:

網站大全:

軟件大全:

熱門排行
女人个人私人电话联系杭州的|热久久久久香蕉无品码|爱情岛亚洲永久自拍品质|国产丶欧美丶日本不卡