微服務實戰之春雲與刀客(四)——dockerswarm叢集實戰

coolma2000發表於2018-07-24

概述

docker swarm 是一個非常簡單的docker 原生叢集部署環境。在docker swarm 出來之前,要搭建一個docker 叢集需要複雜的網路運維和配置能力,而docker swarm 把這一切都解放了。
簡單來說呢,docker swarm把多個docker節點連線成一個叢集,可以認為是一個可以互通的獨立區域網,通過服務的方式管理應用的生命週期。例如有一個MyService的微服務,在單機的模式需要你分別在兩個節點上啟動相應的docker 容器,而docker swarm直接就有“服務”的概念,只要在某一管理節點上執行建立服務命令,同時指定節點數為2,則叢集自動找兩個節點分別執行你的MyService微服務。當兩個節點扛不住的時候,你要增加到4個節點,則只需要執行一個擴充套件命令就行。

docker 安裝

本文基於centos 版本7.2搭建的docker 叢集,用的是17.09版本的docker。

節點有192.168.0.37和192.168.0.38 兩個節點,分別為管理節點和工作節點。工作節點可以執行服務,管理節點也可以執行服務,但比工作節點多了“管理控制”的功能,即可以建立服務。為了避免腦裂現象,管理節點數量為1,3,5奇數。
分別在0.37和0.38上安裝docker。

介質下載

https://download.docker.com/linux/centos/7/x86_64/stable/Packages/
wget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-17.09.0.ce-1.el7.centos.x86_64.rpm

安裝

yum install docker-ce-17.09.0.ce-1.el7.centos.x86_64.rpm

啟動

systemctl start docker

開機啟動

systemctl enable docker
或者
chkconfig docker on

hostname

vi /etc/hosts 把兩個節點的host和ip加上。

搭建和使用 docker hub私有倉庫

搭建docker hub私有倉庫(0.37)

倉庫是用來存放docker映象的,在建立和啟動服務的時候,多個節點需要從倉庫中拉取映象。

sudo docker run -d -p 5000:5000 -v /root/hub:/var/lib/registry --restart=always --name registry2 registry:2

預設情況下,會將倉庫存放於容器內的/var/lib/registry目錄下,這樣如果容器被刪除,則存放於容器中的映象也會丟失,所以我們一般情況下會指定本地一個目錄掛載。

https://github.com/docker/docker.github.io/blob/master/registry/index.md

配置拉取映象認證(0.37/0.38)

客戶端訪問docker hub拉取映象,預設走https的,會報https://192.168.0.37:5000映象沒找到或不存在(No such image: 192.168.0.37:5000/cehome/operation-service:),解決方式一種是通過nginx 新增https代理,我們採用是另一種是非安全方式:

  • 開啟
  1. /usr/lib/systemd/system/docker.service
  • 新增(ExecStart=/usr/bin/dockerd 可能已經有,只需要新增insecure引數)
    ExecStart=/usr/bin/dockerd –insecure-registry 192.168.0.37:5000
  • 過載
    systemctl daemon-reload
  • 重啟
    service docker restart

叢集環境搭建

參考:
https://docs.docker.com/engine/swarm/swarm-mode/
https://docs.docker.com/engine/reference/commandline/service/

https://docs.docker.com/engine/swarm/how-swarm-mode-works/nodes/
https://docs.docker.com/engine/swarm/how-swarm-mode-works/services/#replicated-and-global-services

關閉防火牆(0.37/0.38)

需要互相訪問2377等埠(為方便,直接關閉防火牆,否則可能會有不可意料的事情)

  • 檢視

systemctl is-enabled firewalld

  • 關閉

systemctl stop firewalld.service

  • 禁用服務

systemctl disable firewalld

初始化管理節點(0.37)

docker swarm init –advertise-addr 192.168.0.37

( 多ip的情況:docker swarm init –advertise-addr ,一般要加上,否則會有網路問題)

新增其它節點前檢視token(0.37)

新增其它節點到叢集,必須先在管理節點執行如下命令,它會列印出在其它節點將要執行的包含token的完整指令碼。

1)檢視如何新增work節點
docker swarm join-token worker
2)檢視如何新增manager節點
docker swarm join-token manager

新增work節點(0.38)

通過上面的命令可以查出執行的指令碼,然後拷貝到0.38並執行(即來源於0.37上面執行docker swarm join-token worker的列印結果),執行後0.38就加入了叢集。
docker swarm join
–token SWMTKN-1-3jcd5cjgwy8ct1gfyqqy8oqnokz4jjaul7el97h77qii4e6zw3-1vrjlin1bl5k9whzc4fulqfh2 192.168.0.37:2377

檢視節點(0.37)

必須在管理節點才能執行:
docker node ls

建立overlay網路

為什麼需要overlay 網路?保證多臺機器不同容器之間通訊!

docker network create –attachable –driver overlay tiejia
–attachable 引數為了相容單機的容器可以加入此網路。
tiejia是網路名稱。

管理節點資訊的備份與恢復

由於目前是單管理節點,最好是備份資訊,主要步驟是停止docker,備份目錄/var/lib/docker/swarm/
參考:https://docs.docker.com/engine/swarm/admin_guide/#back-up-the-swarm

移除節點的命令(這裡只是介紹,不要執行)

當你節點不需要的時候可以從叢集剝離,
docker swarm leave -f

例子:部署一個nginx 服務

在manager節點0.37上部署nginx服務,服務數量為3個,公開指定埠是8080對映容器80,使用nginx映象。這裡直接會從官網下載nginx映象,上面部署的私有倉庫還用不上。

docker service create --replicas 3 --name nginx --publish 8080:80  nginx

通過 docker service ps nginx 命令檢視服務分佈情況。


相關文章