docker swarm集群---基础设施篇

前端时间一直在研究docker相关技术,想把他用在我最近的项目上,最开始想使用的kubernates,但是不知道为什么一直下载不下来相关镜像,*都没用,于是转战docker swarm,并且在学校的四个免费的2C4G服务器上搭建了一个实验性质的集群,最近打算把这个实验性质的集群转移到生产环境中,并将其中的一些过程记录下来。
简单说下我目前用这种方式之后的好处吧

  • 第一是简化了部署,再不需要打包、选择可用节点上传,最后运行这种方式了,现在都是一键然后集群根据目前的负载情况自行选择服务部署节点。
  • 第二是简化了运维,平时都是服务出了问题,收到报告,然后登录服务器,手动重启服务,但是现在服务会在崩溃之后自启。
  • 第三是可伸缩,可以根据需求来选择服务的副本,而且节点增加也不用去重新配置Java、MySQL、Python等环境,只需要安装docker即可。

目前只想到了以上三个优势吧,不过我觉得已经很足够了。
本文所有节点的操作系统均为Ubuntu 18.04

1.docker的安装

首先需要在各台机器上都安装docker环境,使用如下命令都可以安装好了

curl -sSL https://get.daocloud.io/docker | sh

接下来需要修改/etc/docker/daemon.json文件,修改它有两个目的,第一是为了加快镜像的下载速度,另外一个原因是docker0接口会占用ip地址172.17.0.0/24,由此可能导致内网环境下登录不上服务器,因此需要配置让docker0去占用其他的ip。

sudo vim /etc/docker/daemon.json

编辑为如下的内容

{
"bip" : "192.168.200.1/24",
"mtu" : 1400,
"registry-mirrors": ["https://pee6w651.mirror.aliyuncs.com","http://hub-mirror.c.163.com", "https://registry.docker-cn.com"]
}

然后用如下命令使修改生效

sudo apt-get install bridge-utils
sudo systemctl stop docker
sudo ip link set dev docker0 down
sudo brctl delbr docker0
sudo systemctl start docker

最后将用户添加到docker组中,这样执行docker相关的命令就不需要sudo了。

# 添加docker用户组,一般已存在,不需要执行
sudo groupadd docker
# 将登陆用户加入到docker用户组中
sudo gpasswd -a $USER docker
# 更新用户组
newgrp docker
# 测试docker命令是否可以脱离sudo正常使用
docker version

到这里docker安装完毕。

2.创建docker swarm集群

这里假设有一个主节点,IP为A,一个从节点,IP为B

首先需要开放2375端口来方便portainer进行管理,这里至少需要给从节点配置,主节点不配置似乎也可以正常使用

sudo cp /lib/systemd/system/docker.service /lib/systemd/system/docker.service.bak
sudo vim /lib/systemd/system/docker.service
# 找到ExecStart行改成这样的: ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2375
sudo systemctl daemon-reload
sudo systemctl restart docker

2.1.主节点配置

运行如下命令来初始化集群

docker swarm init --advertise-addr A

会得到如下输出

docker swarm集群---基础设施篇

2.2.从节点配置

让其他节点加入swarm集群,这里如果是内网环境的话,只需要执行主节点执行初始化集群之后输出的那一行命令即可,但是这里是使用公网环境的,所以需要指定公网的nodeIP

docker swarm join --token SWMTKN-1-0fgcvcltafdsafdsafdsafdsaed5b4skmash31l2c0jyvus44z-77uyqrafdsafdsad5ia602oyy A:2377  --advertise-addr B:2377

这里参考了公网情况下的docker swarm搭建,更细节的内容可以参考这篇博文,使用公网环境时,需要保证TCP2377,TCP7946,TCP4789与UDP7946和UDP4789被放通。

3.管理程序服务安装

这里我使用了两个服务来对集群进行监控和管理,visualizer和portainer。

3.1.visualizer

用如下命令启动visualizer服务

docker service create --replicas 1 --mount type=bind,target=/var/run/docker.sock,source=/var/run/docker.sock --name visualizer -p 8080:8080 dockersamples/visualizer

然后访问http://A:8080,可以看到各节点部署的容器。

docker swarm集群---基础设施篇

3.2.portainer

接下来是portainer,这是一个更加全面的管理工具,可以对各节点的服务、镜像、容器等进行管理。

利用如下命令启动portainer服务,该服务需要在主节点运行。

docker pull portainer/portainer	# 拉取portainer镜像
mkdir portainer_data # 创建数据文件夹
docker run -d -p 8000:8000 -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v /home/zekdot/portainer_data:/data portainer/portainer	# 启动容器

启动之后访问浏览器http://A:9000,可以看到要求创建一个账户的窗口,输入密码与确认密码后点击下一步

docker swarm集群---基础设施篇

然后这里选择local,直接连接。

docker swarm集群---基础设施篇

然后点击Endpoints那一个条目,再点击Add endpoint来增加对从节点B的管理

docker swarm集群---基础设施篇

选择Docker项,输入B相关信息之后点击Add endpoint。

docker swarm集群---基础设施篇

然后可以看到两个节点都在管理之下了。

docker swarm集群---基础设施篇

到这里基础的管理和运行环境就配置好了。

上一篇:docker知识7---docker swarm介绍


下一篇:深度剖析原理!网易云音乐java开发