天天看點

微服務實戰之春雲與刀客(四)—— docker swarm 叢集實戰概述docker 安裝搭建和使用 docker hub私有倉庫叢集環境搭建

概述

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 指令檢視服務分布情況。