【每天學(xué)一點】docker-compose中的deploy

起因

由于要進(jìn)行服務(wù)的微服務(wù)化部署成畦,由于硬件限制这揣,我們目前采用的是Swarm作為容器編排的工具。對應(yīng)于k8s中的pod怀吻,swarm中有dab這種概念瞬浓,即分布式應(yīng)用包,目前還沒有去探索這個的使用蓬坡,由于還是實驗性的特性猿棉,目前還不涉及,這里主要還是通過docker-compose.yaml的方式將多個微服務(wù)統(tǒng)一運維屑咳。

采用的技術(shù)

使用的是docker stack deploy <args>命令進(jìn)行的部署萨赁。

官網(wǎng)上該命令有如下的參數(shù):


docker stack 的可選參數(shù)

由于使用的是docker-compose文件,這里直接通過compose-file進(jìn)行部署即可兆龙,例如官網(wǎng)的例子

docker stack deploy --compose-file docker-compose.yml vossibility

甚至可以通過疊加compose文件杖爽,來修改前一個文件中的配置

docker stack deploy --compose-file docker-compose.yml -c docker-compose.prod.yml vossibility

那么再來看看其他的可選命令:
namespacekubeconfig是k8s的專屬命令,這里就不做過多解釋紫皇,直接看swarm相關(guān)的慰安。

可選參數(shù) 參數(shù)含義
prune 表示削減不再引用的服務(wù)
resolve-image 請求倉庫來重新解析鏡像的摘要和支持的平臺
with-registry-auth 發(fā)送倉庫的授權(quán)詳情到Swarm代理
orchestrator 使用的容器編排服務(wù)

目前覺得prune這個參數(shù)比較關(guān)鍵,可以把一些down掉的service進(jìn)行自動清理坝橡。

回歸正題

如何通過docker-compose.yml配置文件進(jìn)行集群化部署呢?

首先需要知道的泻帮,docker-compose文件中哪個部分主要對應(yīng)了swarm中的運維需求,答案就是deploy參數(shù)下的各種配置计寇。

deploy下的各種配置

上圖中的配置一個個來看;

首先來看锣杂,最下面標(biāo)注的docker stack deploy不支持的參數(shù)脂倦,具體可以參考下圖:

不支持的參數(shù)

上面的參數(shù),就算yaml中包含元莫,在stack的時候也會被忽略赖阻,當(dāng)然也可以為了docker-compose up留著這些配置。

下面對于各個參數(shù)的說明中的例子踱蠢,直接偷懶粘貼官網(wǎng)的例子了火欧。

endpoint_mode:

這個命令是在 3.2版本中開始引入的,主要是用于指定服務(wù)發(fā)現(xiàn)方法茎截,以方便外部的客戶端連接到swarm

主要包含兩個:

  • vip: 這個是默認(rèn)的方案苇侵。即通過虛擬的IP對外暴露服務(wù),客戶端無法察覺有多少個節(jié)點提供服務(wù)企锌,也不知道實際提供服務(wù)的IP和端口榆浓。
  • dnsrr:這個是DNS的輪詢調(diào)度∷涸埽客戶端訪問的時候陡鹃,Docker會通過DNS列表返回對應(yīng)的服務(wù)一系列IP地址,客戶連接其中的一個抖坪。這種方式通常用于使用自己的負(fù)載均衡器萍鲸,或者window和linux的混合應(yīng)用。
version: "3.9"

services:
  wordpress:
    image: wordpress
    ports:
      - "8080:80"
    networks:
      - overlay
    deploy:
      mode: replicated
      replicas: 2
      endpoint_mode: vip

  mysql:
    image: mysql
    volumes:
       - db-data:/var/lib/mysql/data
    networks:
       - overlay
    deploy:
      mode: replicated
      replicas: 2
      endpoint_mode: dnsrr

volumes:
  db-data:

networks:
  overlay:

labels

標(biāo)簽是用于service之上擦俐,并非附加在service中的容器上脊阴。

如果像將其附在所有容器上,則在deploy之外定義labels.

version: "3.9"
services:
  web:
    image: web
    deploy:
      labels:
        com.example.description: "This label will appear on the web service"

mode

用于指定是以副本模式(默認(rèn))啟動還是全局模式捌肴,如果是全局模式蹬叭,類似于開始于k8s中的DaemonSet,會在每個節(jié)點上啟動且只啟動一個服務(wù)状知。

version: "3.9"
services:
  worker:
    image: dockersamples/examplevotingapp_worker
    deploy:
      mode: global

placement

這個參數(shù)在運維的時候尤為關(guān)鍵,主要用于指定容忍偏好孽查,這個在k8s中同樣有對應(yīng)的概念

version: "3.9"
services:
  db:
    image: postgres
    deploy:
      placement:
        constraints:
          - "node.role==manager"
          - "engine.labels.operatingsystem==ubuntu 18.04"
        preferences:
          - spread: node.labels.zone

其中饥悴,容忍包含了:

node attribute matches example
node.id 節(jié)點id node.id==2ivku8v2gvtg4
node.hostname 節(jié)點主機名 node.hostname!=node-2
node.role 節(jié)點角色 (manager/worker) node.role==manager
node.platform.os 姐節(jié)點操作系統(tǒng) node.platform.os==windows
node.platform.arch 節(jié)點架構(gòu) node.platform.arch==x86_64
node.labels 用戶定義的labels node.labels.security==high
engine.labels Docker 引擎的 labels engine.labels.operatingsystem==ubuntu-14.04

容忍,表示服務(wù)可以部署在符合容忍限定的節(jié)點上盲再。

至于偏好,只有一個參數(shù)西设,就是spread,其參數(shù)值為節(jié)點的屬性答朋,即容忍表中的內(nèi)容贷揽。

偏好,表示的是服務(wù)可以均勻分布在指定的標(biāo)簽下梦碗,如:node.labels.zone這個標(biāo)簽在集群中有三個值禽绪,分別為west蓖救、east、north印屁,那么服務(wù)中的副本將會等分為三份循捺,分布到帶有三個標(biāo)簽的節(jié)點上。

max_replicas_per_node

這個是3.8中添加的配置雄人。

字面意思从橘,就是控制每個節(jié)點上最多的副本數(shù)

version: "3.9"
services:
  worker:
    image: dockersamples/examplevotingapp_worker
    networks:
      - frontend
      - backend
    deploy:
      mode: replicated
      replicas: 6
      placement:
        max_replicas_per_node: 1

要注意的是,當(dāng)最大副本數(shù)*集群中可部署服務(wù)的節(jié)點數(shù)<副本數(shù)础钠,會報錯恰力。

replicas

用于指定副本數(shù),只有mode為副本模式的時候生效旗吁。

resources

這個參數(shù)在運維的時候尤為關(guān)鍵踩萎,主要用于限制服務(wù)的資源。

注意這里的配置在版本3中和版本2有較大差別阵漏。

version: "3.9"
services:
  redis:
    image: redis:alpine
    deploy:
      resources:
        limits:
          cpus: '0.50'
          memory: 50M
        reservations:
          cpus: '0.25'
          memory: 20M

limit用于限制最大的資源使用數(shù)量驻民,reservation為最低的資源占用量。

restart_policy

重啟策略

version: "3.9"
services:
  redis:
    image: redis:alpine
    deploy:
      restart_policy:
        condition: on-failure
        delay: 5s
        max_attempts: 3
        window: 120s
  • condition: 表示的是重啟的條件履怯,分為 none回还,on-failure,any(默認(rèn))
  • delay:表示嘗試重啟的時間間隔(默認(rèn)5s)
  • max_attempts: 最多的嘗試次數(shù)(默認(rèn)一直重試)
  • window:在判斷重啟是否成功之前等待時間(一個總的時間,如果超過這個時間還沒有成功叹洲,則不再重啟)

rollback_config

3.7版本加入

用于指定回滾的策略

由于和升級策略相關(guān)參數(shù)基本一直柠硕,放在下面講

update_config

用于指定升級的策略

version: "3.9"
services:
  vote:
    image: dockersamples/examplevotingapp_vote:before
    depends_on:
      - redis
    deploy:
      replicas: 2
      update_config:
        parallelism: 2
        delay: 10s
        order: stop-first
  • parallelism:同時升級[回滾]的容器數(shù)
  • delay:升級[回滾]的時間間隔
  • failure_action:失敗后如何做:continue, rollback(僅在update_config中有), or pause (默認(rèn) pause)
  • monitor: 檢測失敗的時間檢測(默認(rèn)為5s,支持ns、us运提、ms蝗柔、s、m民泵、h)
  • max_failure_ratio:最大失敗率
  • order:有兩個stop-first(默認(rèn))和start-first癣丧,一個是先停止舊的,一個是先啟動新的栈妆,之后覆蓋舊的

以上胁编。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市鳞尔,隨后出現(xiàn)的幾起案子嬉橙,更是在濱河造成了極大的恐慌,老刑警劉巖寥假,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件市框,死亡現(xiàn)場離奇詭異,居然都是意外死亡糕韧,警方通過查閱死者的電腦和手機枫振,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進(jìn)店門喻圃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蒋得,你說我怎么就攤上這事级及。” “怎么了额衙?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵饮焦,是天一觀的道長。 經(jīng)常有香客問我窍侧,道長县踢,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任伟件,我火速辦了婚禮硼啤,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘斧账。我一直安慰自己谴返,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布咧织。 她就那樣靜靜地躺著嗓袱,像睡著了一般。 火紅的嫁衣襯著肌膚如雪习绢。 梳的紋絲不亂的頭發(fā)上渠抹,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天,我揣著相機與錄音闪萄,去河邊找鬼梧却。 笑死,一個胖子當(dāng)著我的面吹牛败去,可吹牛的內(nèi)容都是我干的放航。 我是一名探鬼主播,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼圆裕,長吁一口氣:“原來是場噩夢啊……” “哼三椿!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起葫辐,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎伴郁,沒想到半個月后耿战,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡焊傅,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年剂陡,在試婚紗的時候發(fā)現(xiàn)自己被綠了狈涮。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡鸭栖,死狀恐怖歌馍,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情晕鹊,我是刑警寧澤松却,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站溅话,受9級特大地震影響晓锻,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜飞几,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一砚哆、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧屑墨,春花似錦躁锁、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至程腹,卻和暖如春匣吊,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背寸潦。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工色鸳, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人见转。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓命雀,卻偏偏與公主長得像,于是被迫代替她去往敵國和親斩箫。 傳聞我的和親對象是個殘疾皇子吏砂,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,713評論 2 354