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.添加网络出入站规则

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

4.创建用于节点发现的容器

# 使用SSH连接到consul0,获取IP(例如:172.30.0.161)
ifconfig
# 启动consult容器
docker run -d -p 8500:8500 --name=consul progrium/consul -server -bootstrap

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 :4000 consul://:8500
# 在manager1中创建secondary manager
docker run -d -p 4000:4000 swarm manage -H :4000 --replication --advertise :4000 consul://:8500
# 获取node0、node1的IP,并将它们分别添加到集群中
docker run -d swarm join --advertise=:2375 consul://:8500

# 查看Swarm
docker -H :4000 info
# 在swarm中运行一个应用程序
docker -H :4000 run hello-world
# 查看应用程序运行于哪个节点
docker -H :4000 ps

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 
# 再次启动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 
# 查看集群信息
docker -H :4000 info

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

你可能感兴趣的:(Docker)