Docker集群管理(一)—— 基礎docker+swarm+shipyard


目的

學習docker的集群管理,摸索出高可用的docker微服務架構方案。本篇文章只初步的了解下swarm(docker新版已集成了swarm)的使用,了解docker的發現服務的基礎方法(docker hub 提供的內置方法,其他的比如:etcd、consul、zookeeper)

環境

三台虛擬主機:
192.168.139.128 (master,node1)

192.168.139.129(node2)

192.168.138.130(node3)

操作系統:centos7.3

Docker version 1.13.1, build 092cba3

一、安裝Docker

docker的安裝(略)
由於后面的shipyard需要docker的tcp方式訪問,需要修改docker的配置:

vi /lib/systemd/system/docker.service

修改 ExecStart:

ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock -D -H tcp://0.0.0.0:2375

重啟docker

systemctl daemon-reload
systemctl start docker.service

當然實際用於生產環境這種方式並不安全,可用於測試。新版本doker swarm 支持TSL安全方式,后面的文章會講到。

二、安裝Swarm

swarm是一個docker集群管理工具。(swarm is a simple tool which controls a cluster of Docker hosts and exposes it as a single "virtual" host.)

1.拉取鏡像

swarm官方鏡像
rethinkdb官方鏡像

docker pull swarm

2.配Swarm集群

在任意的docker節點創建一個全世界唯一的token(集群ID),記住這個token后面需要用到。(這里用的發現服務是dockhub內置的,當然還有其他的比如etcd、consul等。)

docker run --rm swarm create

我這里獲取到的token是:3c739bd3a589da0788978f502ea318ea

啟動swarm manger

docker run -ti -d -p 2376:2375 --restart=always --name shipyard-swarm-manager swarm:latest manage --host tcp://0.0.0.0:2375 token://3c739bd3a589da0788978f502ea318ea

啟動swarm agent,將當前docker節點加入到集群中:

這里我把三台服務器(VM)加入節點到集群,在每個docker節點上分開執行。

docker run -ti -d --restart=always --name shipyard-swarm-agent swarm:latest join --addr 192.168.139.128:2375 token://3c739bd3a589da0788978f502ea318ea

docker run -ti -d --restart=always --name shipyard-swarm-agent swarm:latest join --addr 192.168.139.129:2375 token://3c739bd3a589da0788978f502ea318ea

docker run -ti -d --restart=always --name shipyard-swarm-agent swarm:latest join --addr 192.168.139.130:2375 token://3c739bd3a589da0788978f502ea318ea

可以使用命令查看docker節點情況(任意docker節點上都可以執行):

docker run --rm swarm list token://3c739bd3a589da0788978f502ea318ea

可以使用命令查看docker集群的詳情(可在任意docker節點上執行,IP地址是裝了swarm master主機的IP):

docker -H 192.168.139.128:2376 info

三、安裝Shipyard

1.拉取鏡像

docker pull rethinkdb
docker pull shipyard/shipyard

2.啟動rethinkdb

docker run -ti -d --restart=always --name shipyard-rethinkdb -p 8082:8080 -p 28015:28015 -p 29015:29015 -v /opt/rethinkdb:/data rethinkdb

這里暴露8082端口用於查看rethinkdb的使用情況:打開http://192.168.139.128:8082顯示如下:

4.啟動shipyard

docker run -ti -d --restart=always --name shipyard-controller --link shipyard-rethinkdb:rethinkdb --link shipyard-swarm-manager:swarm -p 8081:8080 shipyard/shipyard server -d tcp://swarm:2375

訪問http://192.168.138.128::8001 可打開swarm的管理界面了
查看容器:
容器
查看鏡像:
鏡像
查看節點:
節點

可能遇到的問題

1.訪問shipyard管理界面時候打不開?

答:由於采用了rethinkdb數據庫,數據庫未准備好之前是不能打開的,需要等大約1分鍾。

2.shipyard能打開,但是沒有容器和鏡像?

答:需要設置防火牆或關閉防火牆。

  firewall-cmd --zone=public --permanent --add-port=2375/tcp
  firewall-cmd --reload

3.在shipyard中找不到某些docker節點?

答:可能由於訪問discovery.hub.docker.com的網絡不穩定原因(超時),嘗試重啟swarm agent容器。

ERRO[0011] Post https://discovery.hub.docker.com/v1/clusters/3c739bd3a589da0788978f502ea318ea?ttl=180: net/http: TLS handshake timeout

答:需要設置防火牆或關閉防火牆。

還需要解決的問題

  • 發現服務不穩定,嘗試使用其他發現服務(etcd、consul、zookeeper).
  • 使用新版Docker內置的swarm的創建集群
  • 使用Docker的STL安全連接
  • 實現Docker集群的高可用架構(生產環境)


免責聲明!

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



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