簡介
swarm介紹
swarm 包含多個運行在swarm mode下的docker host,這些hoshs包括manager和worker角色。沒給你host既可以做爲manager,也可以作爲worker,或者2者都可以。
當創建一個服務的時候,即定義了一個最佳的狀態,包括服務replicas、網絡、存儲、以及暴露給外面的端口等資源。docker用於維護需要的狀態,如果一個節點不可用,docker將調度該節點的任務到其他節點。
節點介紹
節點即爲加入swarm集羣中的docker實例(docker 節點)。
當實施一個應用到swarm時候,就需要提交一個服務的定義到管理節點(manager node),管理節點就會分配工作單元(task)到對應的工作節點(work node).
工作節點接受並執行來自於管理節點的任務,默認情況下管理節點也作爲一個work節點跑對應的服務,但實際中可以配置service不運行在manager上,使manager僅僅充當管理角色。worker節點會定期向manger通知分配的任務狀態,以便於manager能維護每個worker需要的狀態。
服務和任務
service是需要執行在各個節點上任務的定義。它是swarm系統的核心結構,也是用戶和swarm交互的主要方式。當創建1個服務的時候,通常會指定容器鏡像和容器內部執行的命令。
一個任務包含了一個docker 容器和y一些跑在容器內部的命令, 它是swarm調度的原子單元。 管理節點根據服務中replicas的規模,將任務分配到各個工作節點。一旦一個任務分配到某個節點,它就不能移動到另外及誒單,除非該任務失敗。
負載均衡
管理節點使用ingress load balancing 來暴露服務,從而使外部到swarm爲可用狀態。在用戶沒有指定端口的情況下,swarm manager節點默認爲服務分配一個PublishedPort,通常在30000-32767 範圍內。
Swarm mode 擁有一個內部DNS不見,用於自動地分配每個服務一個DNS實體。基於服務的DNS名稱,swarm 管理節點在集羣內部服務之間用 internal load balancing 來分發請求。
swarm集羣搭建
通過以下3個步驟即可搭建一個swarm集羣了,後續可以根據需要增刪節點,改變節點角色。
- swarm初始化
$ docker swarm init Swarm initialized: current node (p2phyrhwcp3k155gu24cci89x) is now a manager. To add a worker to this swarm, run the following command: docker swarm join --token SWMTKN-1-5ig1j6az5r0wah7bq3qs3q5zv8iaz4kmubvj79rvns807f3vcm-dza07w1gla63weerzmfaq34xb 10.120.75.102:2377 To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions
- 添加節點到集羣
\# docker swarm join --token SWMTKN-1-5ig1j6az5r0wah7bq3qs3q5zv8iaz4kmubvj79rvns807f3vcm-dza07w1gla63weerzmfaq34xb 10.120.75.102:2377 This node joined a swarm as a worker.
- 提升work節點爲manager
查看當前節點狀態: $ docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION p2phyrhwcp3k155gu24cci89x * test01 Ready Active Leader 19.03.8 hwkcculi3kop48g75k88mc110 test02 Ready Active 19.03.11 rr7nl5cd5yecv5nklfsr9bpzg test03 Ready Active 19.03.8 執行docker node demote <node id>將 manager 節點 demote 爲 worker 節點 執行docker node promote <node id>將 worker 節點 promote 爲 manager 節點 $ docker node promote hwkcculi3kop48g75k88mc110 Node hwkcculi3kop48g75k88mc110 promoted to a manager in the swarm. promte後全部爲leader,一般建議至少3個基數節點作爲leader
常用命令
- swarm init
swarm 集羣初始化,具體命令見 swarm初始化 - swarm join
節點加入集羣,在任意一個manager上執行皆可,具體見 添加節點到集羣 - service create
新建服務
service_create新建一個服務,名稱爲reids docker service create --name redis redis:3.0.6 新建一個服務,3個replica,名稱爲redis3 docker service create --name redis3 --replicas=3 redis:3.0.6
- service inspect
#docker service inspect redis
#docker service inspect redis --pretty
添加–pretty後,以比較友好的方式輸出容器信息
- service ls
ls 查看所有服務#docker service ls ID NAME MODE REPLICAS IMAGE PORTS ckipvhtby52z redis replicated 1/1 redis:3.0.6 gmi00f0g7enf redis3 replicated 3/3 redis:3.0.6 #docker service ls -q n只列出IDs
- service rm
刪除redis3 服務
#docker service rm redis3 - service scale
將redis服務擴容爲2個
#docker service scale redis=2 -d - service ps
列出redis的所有服務, -q參數使之只列出IDs
#docker service ps redis
#docker service ps redis -q - service update
1)限制cpu爲2
# docker service update --limit-cpu 2 redis
2)添加8079映射到容器內6379端口
# docker service update --publish-add published=8079,target=6379 redis
service_update