天天看點

docker筆記6--Docker Swarm常見操作

docker筆記6--Docker Swarm常見操作

  • ​​簡介​​
  • ​​swarm介紹​​
  • ​​節點介紹​​
  • ​​服務和任務​​
  • ​​負載均衡​​
  • ​​swarm叢集搭建​​
  • ​​常用指令​​
  • ​​說明​​

簡介

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叢集了,後續可以根據需要增删節點,改變節點角色。

  1. 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'      
  1. 添加節點到叢集
\# docker swarm join      
  1. 提升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      

常用指令

  1. swarm init

    swarm 叢集初始化,具體指令見swarm初始化

  2. swarm join

    節點加入叢集,在任意一個manager上執行皆可,具體見添加節點到叢集

  3. 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      
  1. ​​service_create​​
  2. service inspect

    #docker service inspect redis

    #docker service inspect redis --pretty

    添加–pretty後,以比較友好的方式輸出容器資訊

  3. 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      
  1. service rm

    删除redis3 服務

    #docker service rm redis3

  2. service scale

    将redis服務擴容為2個

    #docker service scale redis=2 -d

  3. service ps

    列出redis的所有服務, -q參數使之隻列出IDs

    #docker service ps redis

    #docker service ps redis -q

  4. 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​​

說明

繼續閱讀