swarm基本概念
- Swarm是去中心化的,並集成進了Docker Engine,經過Docker CLI管理。
swarm
集羣包含兩類節點
Manager Node
—— 負責調度Task(不推薦超過7個,其有兩種狀態:leader、reachable,集羣操做需在管理節點)
Worker Node
—— 接受Manager Node調度並指派的Task
- 每一個
swarm node
的availability
包括:
- Active:接受task
- Pause:不接受task,已有task仍運轉
- Drain:不接受task,已有task被交接
- 經過routing mesh策略(基於lvs),swarm集羣全部節點都會監聽服務端口(沒有啓動服務的節點會自動將流量路由到服務駐留節點)
- 集羣內服務開放到外部端口後,節點由preparing轉爲running狀態
- 一個集羣節點上能夠駐留多個重複服務
swarm變遷
- Docker1.6引入Swarm
- 獨立於Docker engine
- 使用Docker CLI
- Docker 1.12前幾周發佈了Swarm Kit
- 使用本身的CLI(swarmd負責管理,swarmctl用於控制)
- 是Swarm mode的基礎
- Docker 1.12發佈了Swarm Mode(功能較完整的容器編排工具)
- 集成到了Docker engine中(docker swarm子命令)
- 使用Docker CLI,引入服務的概念
- 基於Swarmkit編寫
構建swarm集羣
# 轉入SwarmMode(當前機即做爲集羣管理節點)
docker swarm init --advertise-addr Manager節點ip:端口
# 新建token
docker swarm join-token worker|manager
# node加入集羣成爲一個工做副本
docker swarm join --token 令牌 Manager節點ip:端口
# 查看集羣節點
docker node ls
# 檢查指定節點
docker node inspect self|NODE
# 節點狀態變動
docker node update --availability drain manager # 設置Manager Node只具備管理功能
# 節點打標籤
docker node update --label-add 鍵名稱=值
# 節點提權/降權
docker node promote 節點 # 升級爲manager node
docker node demote 節點 # 降級爲worker node
# 節點退出集羣
docker swarm node leave [--force]
構建集羣網絡
- 集羣構建時,節點通訊默認2377端口
- 集羣負載均衡網絡的服務發現工做在端口:
- 7946 TCP/UDP:集羣的服務發現
- 4789 UDP:集羣服務的路由網絡
docker network create --driver overlay 網絡名 #建立網絡(網絡是隔離和安全加密的,同一網絡節點才能互訪)
docker network ls #列表網絡
docker network inspect 網絡名 #監控網絡