docker筆記6--Docker 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' and follow the instructions
    
  2. 添加節點到集羣
    \# docker swarm join --token SWMTKN-1-5ig1j6az5r0wah7bq3qs3q5zv8iaz4kmubvj79rvns807f3vcm-dza07w1gla63weerzmfaq34xb 10.120.75.102:2377
    This node joined a swarm as a worker.
    
  3. 提升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
    

常用命令

  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
    
    service_create
  4. service inspect
    #docker service inspect redis
    #docker service inspect redis --pretty
    添加–pretty後,以比較友好的方式輸出容器信息
    在這裏插入圖片描述
  5. 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
    
  6. service rm
    刪除redis3 服務
    #docker service rm redis3
  7. service scale
    將redis服務擴容爲2個
    #docker service scale redis=2 -d
  8. service ps
    列出redis的所有服務, -q參數使之只列出IDs
    #docker service ps redis
    #docker service ps redis -q
  9. 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

說明

docker swarm
key-concepts

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章