docker是从前几年开始接触,跟传统的实体服务器上搭建环境相比,已经方便了很多,但是docker集群的搭建,今年以前还停留在听、说阶段,比如大名鼎鼎的kubernetes,听、说、做是三种截然不同的场景。今年开始工作中接触到了docker swarm集群,正好入手开始。本篇以swarm集群环境搭建入手介绍。
xt1~4为系统服务器,固定服务器,yum和hosts为临时服务器,作为部署安装使用。操作系统:centos7.9.2009 Core最小系统安装。
主机 | IP地址 | 说明 |
---|---|---|
xt1 | 30.6.5.21 | node |
xt2 | 30.6.5.22 | node |
xt3 | 30.6.5.23 | master |
xt4 | 30.6.5.24 | node |
yum | 30.6.5.25 | yum源 ansible |
host | 30.6.5.99 | 个人电脑 |
安装部署为操作系统的安装、中间件的安装部署、docker swarm集群部署三部分内容。
操作系统使用的Centos7.9.2009 Core最小系统安装法。使用云服务器的情况下,直接选择服务器版本即可。操作系统的安装不再过多介绍了,从安装完操作系统后的主机名、网络、端口的设置做介绍。
查看主机名
hostname
设置主机名
hostnamectl set-hostname name
修改完毕验证
hostname status
查看网络地址
ip addr
cp /etc/sysconfig/network-scripts/ifcfg-enp0s8 ifcfg-enp0s8
修改网卡配置文件 vi /etc/sysconfig/network-scripts/ifcfg-enp0s8
编辑网卡信息
BOOTPROTO=static
IPADDR=30.6.5.21
NETMASK=255.255.255.0
GATEWAY=30.6.5.1
ONBOOT=yes
保存退出
重启网卡
systemctl restart network
查看网络
ip addr
服务器端口默认是关闭的,处于安全考虑的原因,但是业务系统之间交互依托端口的输入输出门阶,在此处业务系统需要的端口资源如下:
服务器 | 端口 | 协议类型 | 说明 |
---|---|---|---|
30.6.5.21/22/23/24 | 2377 | tcp | 集群管理端口 |
30.6.5.21/22/23/24 | 7946 | tcp/udp | 节点之间通讯端口 |
30.6.5.21/22/23/24 | 4789 | tcp | overlay网络通讯端口 |
30.6.5.23 | 5000 | tcp | 私有仓库端口 |
30.6.5.25 | 80 | tcp | yum源端口 |
30.6.5.23 | 9000 | tcp | dockerui使用端口 |
查看端口
firewall-cmd --query-port=2377/tcp
添加端口
建议:针对多台服务器的端口后面使用ansible批量开具端口
firewall-cmd --permanent --add-port=2375/tcp
firewall-cmd --permanent --add-port=2377/tcp
firewall-cmd --permanent --add-port=7946/tcp
firewall-cmd --permanent --add-port=7946/udp
firewall-cmd --permanent --add-port=4789/tcp
firewall-cmd --permanent --add-port=5000/tcp
firewall-cmd --permanent --add-port=9000/tcp
firewall-cmd --reload # 重载防火墙
firewall-cmd --zone=public --list-ports # 查看所有端口
中间件包括运维使用的ansible的安装、局域网yum源设置、docker批量部署,中间件部署环节都是使用的离线环境下部署。
ansible的下载在本篇就不做介绍了,如果需要了解,移步《[环境搭建]-[局域网ansible离线安装]》
将压缩包拷贝至目标目录
mkdir -p /opt/ansible
cp ansible_v2.9.9_install.tar.gz /opt/ansible
解压安装包
tar -xzvf ansible_v2.9.9_install.tar.gz
进入解压目录
cd ansible_v2.9.9_install
赋权执行权限
chmod +x ansible_v2.9.0_install.sh
安装执行
sh ansible_v2.9.0_install.sh
验证
ansible --version
vi /etc/hosts
[xt]
30.6.5.2[1:4]
[xt:vars]
ansible_ssh_user=root
ansible_ssh_pass=xxxxxxxxxx
ansible xt -m ping
ansible xt -m shell -a "firewall-cmd --zone=public --add-port=2377/tcp --permanent"
ansible xt -m shell -a "firewall-cmd --zone=public --add-port=7946/udp --permanent"
ansible xt -m shell -a "firewall-cmd --zone=public --add-port=7946/tcp --permanent"
ansible xt -m shell -a "firewall-cmd --zone=public --add-port=4789/tcp --permanent"
ansible xt -m shell -a "firewall-cmd --reload"
yum源为局域网内的yum源设置
将系统盘挂载到系统或者将ISO文件上传到制定的目录
创建文件夹
挂载目录
mkdir -p /mnt/cdrom/
挂载目录
mount -t auto /dev/cdrom /mnt/cdrom
# umount /mnt/cdrom
创建yum源备份目录
mv /etc/yum.repos.d /etc/yum.repos.d_bak/
创建yum源目录
mkdir -p /etc/yum.repos.d/
进入yum源目录
cd /etc/yum.repos.d/
创建局域网yum源
vi localrepos.repo
[local]
name=CentOS-79-server
baseurl=file:///mnt/cdrom
gpgcheck=1
enabled=1
gpgkey=file:///mnt/cdrom/RPM-GPG-KEY-CentOS-7
清空yum缓存
yum clean all
yum makecache
测试yum源
列表会有三列输出,在最后一列显示的是yum的ID(这里就是上面的[local]),有你设置的yum的ID就是成功了。
安装web服务
yum install -y httpd
设置开机启动
systemctl enable httpd
启动服务器
systemctl start httpd
开启80端口
firewall-cmd --add-port=80/tcp --permanent
重启防火墙
firewall-cmd --reload
查询端口状态
firewall-cmd --query-port=80/tcp
验证
浏览器中输入安装httpd服务的IP地址
设置访问目录
创建链接
ln -s /mnt/cdrom /var/www/html
浏览器中输入
http://30.6.5.25/cdrom/
更改yum源文件
vi /etc/yum.repos.d/localrepo.repo
[local]
name=CentOS-79-server
baseurl=http://30.6.5.25/cdrom/
gpgcheck=1
enabled=1
gpgkey=http://30.6.5.25/cdrom/RPM-GPG-KEY-CentOS-7
分发yum源文件
思路参考本机yum源设置
ansible xt -m shell -a "mv /etc/yum.repos.d /etc/yum.repos.d_bak/
ansible xt -m file -a "path=/etc/yum.repos.d state=directory"
ansible xt -m copy -a "src=/etc/yum.repos.d/localrepo.repo dest=/etc/yum.repos.d/
ansible xt -m shell -a "yum clean all"
ansible xt -m shell -a "yum makecache"
ansible xt -m yum -a "name=vim state=present"
ansible xt -m shell -a "version --version | grep -n 1"
参考《CentOS7在/离线安装docker》中的离线安装部分。
下载
创建目录
mkdir -p /home/package/docker/yum-utils
mkdir -p /home/package/docker/docker_install_rpm
打包
拷贝解压
ansible xt -m unarchive -a "src=docker.tar.gz dest=/home/package copy=yes mode=0755"
安装
ansible xt -m shell -a "/home/package/docker/docker_offline_install.sh"
首先选择主机,在此以 30.6.5.23作为swarm管理主机,其他为节点
登陆主机操作
初始化
docker swarm init --advertise-addr 30.6.5.23
–advertise-addr参数表示其它swarm中的worker节点使用此ip地址与manager联系。命令的输出包含了其它节点如何加入集群的命令。
打印输出token,每个token都不相同,请以自己操作中打印输出的信息为准,进行下面步骤输入的操作
docker swarm join --token SWMTKN-1-08z3pricsbme82lfnyt5khax5ksubs9esesgwdsu6fnr2n1907-aeztjh8oxx8lce97qpn7nv7o5 30.6.5.23:2377
复制3.3.1中生成的token,将其他节点(21/22/24)添加到swarm集群中,在每个终端上执行如下命令
docker swarm join --token SWMTKN-1-08z3pricsbme82lfnyt5khax5ksubs9esesgwdsu6fnr2n1907-aeztjh8oxx8lce97qpn7nv7o5 30.6.5.23:2377
打印输出
This node joined a swarm as a worker.
说明添加节点无误。
在master上查看集群节点的状态
docker node ls