Docker Swarm搭建生產環境的集羣

搭建swarm集羣的步驟如下:
- 做好前提準備
- 建立基本網絡安全
- 創建節點
- 每個節點上安裝Docker Engine
- 配置一個用於主機發現服務
- 創建Swarm集羣
- 使用swarm
- 測試Swarm manager的高可靠性

如果是安裝Virtualbox和docker-machine環境下,創建虛擬主機boot2docker,會自動安裝Docker Engine,就很簡單了,不用管網絡環境、節點中安裝Docker Engin等步驟了。

以下以AWS(Amazon Web Services)爲例

前提條件

- 一個AWS賬號
- 熟悉AWS的特性和工具:
    - EC2 Dashbord (Elastic Cloud)
    - VPC Dashboard (Virtual Private Cloud)
    - VPC 安全組
    - 使用SSH連接到EC2
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

1.添加網絡出入站規則

AWS使用security group管理VPC網絡指定類型的網絡流程。
默認安全組的初始規則:拒絕入站流量,允許所有出站流量,允許站內所有節點之間的訪問。
因爲後面要使用SSH連接節點和下載容器鏡像,需要爲其設置端口訪問規則。
此外,根據你部署應用程序的需要,可能還需額外指定地其它的訪問端口。

操作步驟如下:
- 點擊VPC - Isolatedd Cloud Resource
- 導航到Security Groups
- 選擇default安全組,添加兩條規則

規則如下:

Type Protocol Port Range Source
SSH TCP 22 0.0.0.0/0
HTTP TCP 80 0.0.0.0/0

2.創建節點

打開EC2 Dashboard,創建五個節點(生個節點一臺主機)

  • 選擇一個AMI鏡像 (Amazon Machine Images)創建節點
  • 用manager0、manager1、consul0、node0、node1等標記節點

五個節點分類如下:

Node Description Name
Swarm primary and secondary managers manager0, manager1
Swarm node node0, node1
Discovery backend consul0

3.在每個節點上安裝Docker Engine

安裝Docker Engine之後,你才能用Engine命令行(或API)使Swarm manager定位Nodes。

# 升級yum包
sudo yum update
# 運行安裝腳本
curl -sSL https://get.docker.com/ | sh
# 啓動docker守護進程,在2375端口監聽swarm nodes
sudo docker daemon -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
# 驗證Docker Engine正確安裝
sudo docker run hello-world
# 給ec2-user設置root權限
sudo usermod -aG docker ec2-user
# 退出
logout
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

4.創建用於節點發現的容器

# 使用SSH連接到consul0,獲取IP(例如:172.30.0.161)
ifconfig
# 啓動consult容器
docker run -d -p 8500:8500 --name=consul progrium/consul -server -bootstrap
  • 1
  • 2
  • 3
  • 4

5.創建swarm集羣

以下將創建兩個Swarm Manager實現高可靠性配置。
第一個manager成爲Swarm的primary manager,曾經稱之爲master,此術語已經過時。
第二個manager用作備機,當primary manager不可用時,集羣將推舉此備機作爲primary manager。

# 在manager0中創建primary manager
docker run -d -p 4000:4000 swarm manage -H :4000 --replication --advertise <manager0_ip>:4000 consul://<consul_ip>:8500
# 在manager1中創建secondary manager
docker run -d -p 4000:4000 swarm manage -H :4000 --replication --advertise <manager1_ip>:4000 consul://<consul_ip>:8500
# 獲取node0、node1的IP,並將它們分別添加到集羣中
docker run -d swarm join --advertise=<node_ip>:2375 consul://<consul_ip>:8500

# 查看Swarm
docker -H :4000 info
# 在swarm中運行一個應用程序
docker -H :4000 run hello-world
# 查看應用程序運行於哪個節點
docker -H :4000 ps
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

6.測試災備

當前有兩個manager主機,primary manager和secondary manager。
當primary manager蕩機或關機時,secondary manager變成了primary manager。
重啓剛關閉的manager時,它已經變成了secondary manager。

# 使用SSH連接到manager0,獲取swarm容器的id或name
# 移除manager0主機上的swarm容器,模擬manager0蕩機
docker rm -f <swarm-container>
# 再次啓動manager0主機的swarm容器,以manager加入到集羣中
docker run -d -p 4000:4000 swarm manage -H :4000 --replication --advertise 172.30.0.161:4000 consul://172.30.0.161:8500
# 查看docker日誌
sudo docker logs <swarm-container>
# 查看集羣信息
docker -H :4000 info
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

參考:https://docs.docker.com/swarm/install-manual/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章