容器(30)---Docker三劍客之Docker Swarm

上次說了docker machine和常用的命令。docker machine就是在遠(yuǎn)程機(jī)器上安裝docker的,雖然實(shí)際線上環(huán)境很少使用,在實(shí)驗(yàn)環(huán)境中docker machine還是非常重要的。本次開始說三劍客中的最后一個(gè)docker warm。

image

(一)Docker Swarm介紹

使用SwarmKit構(gòu)建的 Docker 引擎內(nèi)置(原生)的集群管理和編排工具。內(nèi)置在docker之中的,原生的docker集群編排工具,docker swarm非常的重要本身也是編排工具和后面要提到的Mesos,k8s,跟k8s是競爭的關(guān)系,但是k8s發(fā)展到現(xiàn)在已經(jīng)完完全全給其他競爭對手完全的甩開了。這個(gè)系列主要說的k8s,但是docker swarm的使用方法也是一定要提的。

  • ①Swarm的架構(gòu)

1.節(jié)點(diǎn)下面有角色:Worker,Manager
2.Manager 是整個(gè)warm集群的大腦,為了避免單點(diǎn)的故障,我們的大腦至少有2個(gè),狀態(tài)的同步通過raft協(xié)議進(jìn)行同步。raft協(xié)議可以確保多個(gè)Manager之前是同步的。
3.管理節(jié)點(diǎn)用于Swarm集群的管理,docker swarm命令基本只能在管理節(jié)點(diǎn)執(zhí)行(節(jié)點(diǎn)退出集群命令docker swarm leave可以在工作節(jié)點(diǎn)執(zhí)行)。
4.Manager節(jié)點(diǎn)的也可以是worker節(jié)點(diǎn)。一個(gè)主機(jī)可以既是Manager也是worker節(jié)點(diǎn)。在實(shí)際的生產(chǎn)中,為了凸顯manager的調(diào)度性能,manager上不跑worker節(jié)點(diǎn)。

image
  • ②Swarm的服務(wù)和任務(wù)

1.任務(wù)是最小的單元,就是一個(gè)節(jié)點(diǎn)運(yùn)行的容器。下圖的node。
2.服務(wù)是指一組任務(wù),整個(gè)生成的3個(gè)nginx被稱為服務(wù)。

image
  • ③如何部署

客戶端的發(fā)起docker命令,兩種方式

  1. 直接ssh到manager節(jié)點(diǎn),執(zhí)行docker命令。
  2. 通過遠(yuǎn)程訪問的方式,通過Remote API調(diào)用manager上的docker命令,我們這張圖畫的就是第二種方式。
image

docker Client 在manager節(jié)點(diǎn)的外邊,假如執(zhí)行了docker service create,先會(huì)經(jīng)過docker Deamon接受這條命令,傳給Scheduler模塊,Scheduler模塊主要實(shí)現(xiàn)調(diào)度的功能,負(fù)責(zé)選擇出來最優(yōu)的節(jié)點(diǎn),里面包含了2個(gè)子模塊,F(xiàn)iter 和Strategy,F(xiàn)iter很明顯是過濾節(jié)點(diǎn),用來找出滿足條件的節(jié)點(diǎn)(資源足夠多,節(jié)點(diǎn)正常的),Strategy是過濾出來后選擇出最優(yōu)的節(jié)點(diǎn)(對比選擇資源剩余最多的節(jié)點(diǎn),或者找到資源剩余最少的節(jié)點(diǎn)),當(dāng)然Fiter 和Strategy都是用戶可以單獨(dú)定制的,中間的Cluster是抽象的worker節(jié)點(diǎn)集群,包含了Swarm節(jié)點(diǎn)里面每個(gè)節(jié)點(diǎn)的信息,右邊的Discovery是信息維護(hù)的模塊,比如Label Health。Cluster最終調(diào)用容器的api,完成容器啟動(dòng)的流程。

(二)集群演示

  • ①主機(jī)信息
系統(tǒng)類型 IP地址 節(jié)點(diǎn)角色 CPU Memory Hostname
Centos7 192.168.66.100 Manager 2 2G Nexus
Centos7 192.168.66.101 Nexus 2 2G Nexus
Centos7 192.168.66.102 Nexus 2 2G Nexus
image
  • ② manager節(jié)點(diǎn)初始化操作(192.168.66.100)

添加初始化init服務(wù),默認(rèn)是manager節(jié)點(diǎn)

docker swarm init --advertise-addr 192.168.66.100

image
  • ③ 添加worker節(jié)點(diǎn)(192.168.66.101)

上邊manager初始化的時(shí)候,有對應(yīng)的worker命令。

docker swarm join --token SWMTKN-1-3gfv7tpeznhwsl7v3y0n9f5g7547lgzo7fjpv0pm5s6uzvdlgg-b0mlie5vhp2ms1xg1tyd7zwc2 192.168.66.100:2377

image
  • ④ 添加worker節(jié)點(diǎn)(192.168.66.102)

上邊manager初始化的時(shí)候,有對應(yīng)的worker命令。

docker swarm join --token SWMTKN-1-3gfv7tpeznhwsl7v3y0n9f5g7547lgzo7fjpv0pm5s6uzvdlgg-b0mlie5vhp2ms1xg1tyd7zwc2 192.168.66.100:2377

image
  • ⑤ manager查看節(jié)點(diǎn)
docker node ls

image
  • ⑥ 創(chuàng)建service服務(wù)

replicas 3個(gè)節(jié)點(diǎn)

docker service create --replicas 3 -p 80:80 --name nginx nginx 
docker service ls

docker service ps

image
image
image
image
image
  • ⑥ 刪除service服務(wù)
docker service rm nginx

image

(二)docker swarm 運(yùn)行docker-compose文件

  • ①stack

Docker Stack功能包含在Docker引擎中。你不需要安裝額外的包來使用它,docker stacks 只是swarm mode的一部分。它支持相同類型的compose文件,但實(shí)際的處理是發(fā)生在Docker Engine(docker引擎)內(nèi)部的Go代碼中。 在使用堆棧命令之前,還必須創(chuàng)建一個(gè)單機(jī)版的“swarm”,但這并不是什么大問題。

  • ②測試docker-compose文件
mkdir labs
cd labs
vi docker-compose.yml

image
version: "3"
services:

  redis:
    image: redis:alpine
    ports:
      - "6379"
    networks:
      - frontend
    deploy:
      replicas: 2
      update_config:
        parallelism: 2
        delay: 10s
      restart_policy:
        condition: on-failure

  db:
    image: postgres:9.4
    volumes:
      - db-data:/var/lib/postgresql/data
    networks:
      - backend
    deploy:
      placement:
        constraints: [node.role == manager]

  vote:
    image: dockersamples/examplevotingapp_vote:before
    ports:
      - 5000:80
    networks:
      - frontend
    depends_on:
      - redis
    deploy:
      replicas: 2
      update_config:
        parallelism: 2
      restart_policy:
        condition: on-failure

  result:
    image: dockersamples/examplevotingapp_result:before
    ports:
      - 5001:80
    networks:
      - backend
    depends_on:
      - db
    deploy:
      replicas: 1
      update_config:
        parallelism: 2
        delay: 10s
      restart_policy:
        condition: on-failure

  worker:
    image: dockersamples/examplevotingapp_worker
    networks:
      - frontend
      - backend
    deploy:
      mode: replicated
      replicas: 1
      labels: [APP=VOTING]
      restart_policy:
        condition: on-failure
        delay: 10s
        max_attempts: 3
        window: 120s
      placement:
        constraints: [node.role == manager]

  visualizer:
    image: dockersamples/visualizer:stable
    ports:
      - "8080:8080"
    stop_grace_period: 1m30s
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"
    deploy:
      placement:
        constraints: [node.role == manager]

networks:
  frontend:
  backend:

volumes:
  db-data:

image
  • ③運(yùn)行 docker-compose.yml
docker stack deploy example --compose-file=docker-compose.yml
docker stack ls
docker stack services example

image
image
  • 打開網(wǎng)頁
    http:/192.168.66.100:5000/
    http://192.168.66.100:5001/
    http://192.168.66.100:8080/
image
image
  • 擴(kuò)展vote
docker service scale example_vote=4

image
image
  • 刪除stack
docker stack rm example

image

PS:這就是我們的服務(wù)編排,都是在三個(gè)節(jié)點(diǎn),所謂的編排就是將多個(gè)節(jié)點(diǎn)變成一個(gè)節(jié)點(diǎn)來使用,接下來講的k8s要把docker swarm功能要強(qiáng)大很多,當(dāng)然也要復(fù)雜很多。docker的基本命令一樣掌握好!后面說k8s才不會(huì)那么吃力,遇到問題了才知道如何解決。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 原創(chuàng)文章,歡迎轉(zhuǎn)載。轉(zhuǎn)載請注明:轉(zhuǎn)載自IT人故事會(huì),謝謝!原文鏈接地址:「走進(jìn)k8s」Docker三劍客之Dock...
    IT人故事會(huì)閱讀 2,689評論 0 3
  • 上面已經(jīng)介紹了如何安裝Docker、拉取鏡像以及使用容器,接下來需要探討的話題將是關(guān)于規(guī)模(Scale)方面的,這...
    super_pcm閱讀 1,006評論 0 2
  • 實(shí)踐中會(huì)發(fā)現(xiàn),生產(chǎn)環(huán)境中使用單個(gè) Docker 節(jié)點(diǎn)是遠(yuǎn)遠(yuǎn)不夠的,搭建 Docker 集群勢在必行。然而,面對 K...
    藍(lán)胖子的白日夢丶閱讀 840評論 0 4
  • 面對家務(wù)事 理智。不要沖動(dòng),口出不遜,悔之晚矣。 冷處理。一時(shí)半會(huì)解決不了問題,先放一放時(shí)間會(huì)解決的。 不爭口舌之...
    whp一生平安閱讀 120評論 0 0
  • 行走在城市邊緣的流浪狗 有一瞬間,我覺得我不再是那么完整的一條狗。 我無家可歸,興許我連家在何方都不曾知道...
    風(fēng)阿塵閱讀 294評論 1 2

友情鏈接更多精彩內(nèi)容