Docker Swarm(六)Label 節點標簽與服務約束


 

 

前言

多節點 Swarm 集群下,可能節點的配置不同(比如 CPU、內存等),部署着不同類型的服務(比如 Web服務、Job服務等),當這些服務以 Service 或者 Stack 的形式部署到集群,默認情況下會隨機分配到各個節點。

  • 場景1:不同類型的服務對服務器需求的資源是不同的,為了更合理的利用服務器資源,我們可能希望某些服務能夠部署到指定的服務器上。
  • 場景2:Swarm 集群中的節點跨機房,為了內部服務間通信更快,我們可能希望關聯比較密切的服務能夠部署到同一機房的節點上。

以上場景要如何做到呢? 很簡單,先給節點添加標簽,然后服務發布時添加限制條件即可!

 
 

Node Label 管理

示例集群信息:

  • 添加標簽
docker node update --label-add role=masl manager-node
  • 查看標簽
docker node inspect manager-node

  • 刪除標簽
docker node update --label-rm role manager-node

 

 

服務部署條件約束

  • Service 方式
docker service create --name masl -e TZ="Asia/Shanghai" --network mrp_net --replicas 2 -p 8081:8080 --constraint 'node.labels.role == masl' 172.16.99.2:40305/masl:dev-yc-67
  • Stack 方式
version: '3.6'
services:
    masl:
         image: 172.16.99.2:40305/masl:dev-yc-67
         ports:
           - target: 8080
             published: 8081
             protocol: tcp
             mode: ingress
         deploy:
           mode: global
           placement:
 constraints: # 添加條件約束 - node.labels.role==role
           restart_policy:
             condition: on-failure
             max_attempts: 3

注:constraints 為數組,填寫多個約束時,它們之間的關系是 AND

 
 

條件約束補充

constraints 可以匹配 node 標簽和 engine 標簽, engine.labels 適用於 Docker Engine 標簽,如操作系統,驅動程序等, node.labels 適用於上述人為添加到節點的。
node attribute matches example
node.id Node ID node.id==2ivku8v2gvtg4
node.hostname Node hostname node.hostname!=node-2
node.role Node role node.role==manager
node.labels user defined node labels node.labels.security==high
engine.labels Docker Engine's labels engine.labels.operatingsystem==ubuntu 14.04
 
 


參考鏈接:https://www.jianshu.com/p/2a11a40a9573


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM