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版本了