搭建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