Docker容器集羣管理之Swarm

  Docker容器集羣管理主流方案node

Swarm
Docker公司自研發的集羣管理系統。
Kubernetes
Google開源的一個容器集羣管理系統,用於自動化部署、擴展和管理容器應用。也稱爲K8S
Mesos
Mesos是一個集羣資源調度系統,對集羣中的資源進行分配和管理。Marathon是運行在Mesos之上的一個服務管理框架,可管理容器生命週期。
Docker容器集羣管理主流方案
講

   Swarm、Kubernetes和Mesos簡單比較:python

複雜性
Swarm使用標準Docker接口,集成於Docker Engine,內置Overlay網絡、服務發現、負載均衡,很容易上手,學習成本低。
K8S成熟且複雜,本身的管理體系,服務發現,負載均衡等功能,學習成本高。
Mesos是一個成熟分佈式資源管理框架,一個通用的集羣管理系統。
功能
Swarm支持Docker Compose v3來實現服務編排。
K8S強大的功能,有着一套總體容器解決方案,使用起來更輕鬆。
社區活躍度
K8S社區相比Swarm和Mesos活躍度都高。

   Swarm介紹nginx

集羣部署及節點管理
服務管理
使用原生Overlay網絡
數據持久化
服務發現與負載均衡
高可用性
配置文件存儲
應用實戰
-手動建立和服務編排部署LNMP網站平臺

   Swarm是什麼web

Swarm是Docker公司自研發的容器集羣管理系統,Swarm在早期是做爲一個獨立服務存在,在Docker Engine v1.12中集成了Swarm的集羣管理和編排功能。能夠經過初始化Swarm或加入現有Swarm來啓用Docker引擎的Swarm模式。
Docker Engine CLI和API包括了管理Swarm節點命令,好比添加、刪除節點,以及在Swarm中部署和編排服務。
也增長了服務棧(Stack)、服務(Service)、任務(Task)概念。

   Swarm兩種角色redis

Manager:接收客戶端服務定義,將任務發送到worker節點;維護集羣指望狀態和集羣管理功能及Leader選舉。默認狀況下manager節點也會運行任務,也能夠配置只作管理任務。
Worker:接收並執行從管理節點分配的任務,並報告任務當前狀態,以便管理節點維護每一個服務指望狀態。

 

  Swarm的特色算法

1. Docker Engine集成集羣管理
使用Docker Engine CLI 建立一個Docker Engine的Swarm模式,在集羣中部署應用程序服務。
2. 去中心化設計
Swarm角色分爲Manager和Worker節點,Manager節點故障不影響應用使用。
3. 擴容縮容
能夠聲明每一個服務運行的容器數量,經過添加或刪除容器數自動調整指望的狀態。
4. 指望狀態協調
Swarm Manager節點不斷監視集羣狀態,並調整當前狀態與指望狀態之間的差別。例如,設置一個服務運行10個副本容器,若是兩個副本的服務器節點崩潰,Manager將建立兩個新的副本替代崩潰的副本。並將新的副本分配到可用的worker節點。
5. 多主機網絡
能夠爲服務指定overlay網絡。當初始化或更新應用程序時,Swarm manager會自動爲overlay網絡上的容器分配IP地址。
6. 服務發現
Swarm manager節點爲集羣中的每一個服務分配惟一的DNS記錄和負載均衡VIP。能夠經過Swarm內置的DNS服務器查詢集羣中每一個運行的容器。
7. 負載均衡
實現服務副本負載均衡,提供入口訪問。也能夠將服務入口暴露給外部負載均衡器再次負載均衡。
8. 安全傳輸
Swarm中的每一個節點使用TLS相互驗證和加密,確保安全的其餘節點通訊。
9. 滾動更新
升級時,逐步將應用服務更新到節點,若是出現問題,能夠將任務回滾到先前版本。

   集羣部署及節點管理docker

  使用swarm前提ubuntu

Docker版本1.12+
集羣節點之間保證TCP 237七、TCP/UDP 7946和UDP 4789端口通訊

   節點規劃安全

操做系統ubuntu18.04
管理節點:192.168.56.128
工做節點:192.168.56.129
工做節點:192.168.56.130

   查看當前docker版本服務器

 

  管理節點初始化swarm

docker swarm init --advertise-addr 192.168.56.128

 

  工做節點加入swarm

 docker swarm join --token SWMTKN-1-2jxm5hdcno1m06v1eqzsrsrcqg1hjsvkotdojo87n67lasngkf-2ick8vihgd6jmkgpoe09wra2s 192.168.56.128:2377

 

  管理節點查看

 

  查看節點信息

 docker node inspect docker2

 

  查看運行任務數

docker node ps

   

  服務管理

  建立服務 建立一個服務副本數爲1 名字爲hello

docker service create --replicas 1 --name hello busybox

   查看

  MODE是replicated會根據默認調度算法分配節點

  REPLICAS副本數 右邊是設定多少 左邊是啓動多少

   查看啓動狀態屢次失敗,由於busybox是一個基礎鏡像沒有持續運行

  加一個持續運行的任務

docker service update  --args "ping www.baidu.com" hello

 

  過濾出只在運行的

docker service ps -f "desired-state=running" hello

 

  以上信息能夠查看到是工做在docker1這個節點上面的

  對該服務進行擴容

docker service scale hello=3

 

  指定docker1只做爲管理節點

docker node update --availability drain docker1

   做爲manage的節點沒有容器了 會把副本複製到其餘節點管理節點的docker刪除

  

  滾動更新服務

 docker service create \
> --replicas 3 \
> --name redis \
> --update-delay 10s \
> redis:3.0.6

 

  更新

docker service update --image redis:3.0.7 redis

   顯示更新狀態以及老版本信息

  查看剛剛設置的更新策略

docker service inspect redis

 

  

  建立服務時設定更新策略

 docker service create --name my_web --replicas 10 --update-delay 10s --update-parallelism 2 --update-failure-action continue nginx:1.12

   --update-parallelism最大並行數量

   --update-failure-action continue更新失敗後繼續

  服務更新

docker service update --image nginx:1.13 my_web

 

 

  建立服務時設定回滾策略 建立前刪除docker service rm my_web

docker service create \
--name my_web \
--replicas 10 \
--rollback-parallelism 2 \
--rollback-monitor 20s \
--rollback-max-failure-ratio .2 \
nginx:1.12

   先更新

docker service update --image nginx:1.13 my_web

   手動回滾

docker service update --rollback my_web

   又回滾到1.12版本了

相關文章
相關標籤/搜索