ITPub博客

首页 > 数据库 > 数据库开发技术 > Docker集群搭建新篇章:离线部署实操

Docker集群搭建新篇章:离线部署实操

原创 数据库开发技术 作者:shuchaoyang 时间:2024-10-24 06:00:00 0 删除 编辑

Docker容器集群网络架构:三、Docker集群离线部署3.1 环境准备3.1.1 配置主机名3.1.2 关闭firewall防火墙3.1.3 关闭iptables防火墙3.1.3.1 安装iptables3.1.3.2 禁用iptables3.1.3.3 清空防火墙规则3.1.4 关闭selinux3.1.4.1 临时关闭3.1.4.2 永久关闭3.1.4.3 查询关闭情况3.1.5 配置时间同步3.1.5.1 安装chrony3.1.5.2 配置时钟源3.1.5.3 重新启动chrony服务,并配置开机启动3.1.5.4 设置时区,同步时间3.1.6 开启包转发功能和修改内核参数3.1.6.1 加载br_netfilter模块3.1.6.2 设置br_netfilter内核参数3.1.6.3 使br_netfilter内核参数生效3.1.6.4 开机自动加载模块3.1.6.5 新建加载模块文件3.1.6.6 设置权限3.1.6.7 查看模块加载情况3.1.7 安装基础软件包3.1.8 安装docker依赖包3.1.9 上传文件并解压3.1.10 设置本地docker yum源3.1.10.1 创建docker.repo3.1.10.2 刷新yum缓存3.2 离线部署 Docker3.3 关联 etcd3.3.1 docker01 关联 etcd3.3.2 docker02 关联 etcd3.3.3 docker03 关联 etcd

Docker容器集群网络架构:三、Docker集群离线部署

3.1 环境准备

以节点docker01为例,其它节点参照执行。

3.1.1 配置主机名

[root@localhost ~]# hostnamectl set-hostname docker01 && bash

3.1.2 关闭firewall防火墙

[root@docker01 ~]# systemctl stop firewalld && systemctl disable firewalld

3.1.3 关闭iptables防火墙

3.1.3.1 安装iptables
[root@docker01 ~]# yum install iptables-services -y
3.1.3.2 禁用iptables
root@xianchaomaster1 ~]# systemctl stop iptables && systemctl disable iptables
3.1.3.3 清空防火墙规则
[root@xianchaomaster1~]# iptables -F

3.1.4 关闭selinux

3.1.4.1 临时关闭
[root@docker01 ~]# setenforce 0
3.1.4.2 永久关闭
[root@docker01 ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

注意:修改selinux配置文件之后,重启机器,selinux才能永久生效。

3.1.4.3 查询关闭情况
[root@docker01 ~]# getenforce

显示Disabled表示selinux关闭成功。

3.1.5 配置时间同步

3.1.5.1 安装chrony
[root@docker01 ~]# yum install chrony -y
3.1.5.2 配置时钟源
[root@docker01 ~]# echo "server 192.168.0.8 iburst" >> /etc/chrony.conf

注意:192.168.0.8为时钟服务器。

3.1.5.3 重新启动chrony服务,并配置开机启动
[root@docker01 ~]# systemctl restart chronyd.service
[root@docker01 ~]# systemctl status chronyd.service
[root@docker01 ~]# systemctl enable chronyd.service
[root@docker01 ~]# systemctl list-unit-files |grep chronyd.service
3.1.5.4 设置时区,同步时间
[root@docker01 ~]# timedatectl set-timezone Asia/Shanghai
[root@docker01 ~]# chronyc sources
[root@docker01 ~]# timedatectl status

3.1.6 开启包转发功能和修改内核参数

内核参数修改:br_netfilter模块用于将桥接流量转发至iptables链,br_netfilter内核参数需要开启转发。

3.1.6.1 加载br_netfilter模块
[root@docker01 ~]# modprobe br_netfilter
3.1.6.2 设置br_netfilter内核参数
[root@docker01 ~]# cat > /etc/sysctl.d/docker.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
3.1.6.3 使br_netfilter内核参数生效
[root@docker01 ~]# sysctl -p /etc/sysctl.d/docker.conf
3.1.6.4 开机自动加载模块

重启后模块失效,下面是开机自动加载模块的脚本在/etc/新建rc.sysinit文件

[root@docker01 ~]# cat > /etc/rc.sysinit <<EOF
#!/bin/bash
for file in /etc/sysconfig/modules/*.modules; do
[ -x \$file ] && \$file
done
EOF
3.1.6.5 新建加载模块文件

在/etc/sysconfig/modules/目录下新建文件如下

[root@docker01 ~]# cat > /etc/sysconfig/modules/br_netfilter.modules <<EOF
modprobe br_netfilter
EOF
3.1.6.6 设置权限
[root@docker01 ~]# chmod 755 /etc/sysconfig/modules/br_netfilter.modules

重启机器模块也会自动加载。

3.1.6.7 查看模块加载情况
[root@localhost ~]# lsmod | grep br_netfilter
br_netfilter 22209 0
bridge 136173 1 br_netfilter

注意:Docker安装后出现:WARNING:  bridge-nf-call-iptables is disabled的解决办法:

net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1

将Linux系统作为路由或者VPN服务就必须要开启IP转发功能。当linux主机有多个网卡时一个网卡收到的信息是否能够传递给其他的网卡,如果设置成1的话可以进行数据包转发,可以实现VxLAN等功能。不开启会导致docker部署应用无法访问。

3.1.7 安装基础软件包

[root@docker01 ~]# yum install -y wget net-tools nfs-utils lrzsz gcc gcc-c++ make cmake libxml2-devel openssl-devel curl curl-devel unzip sudo ntp libaio-devel wget vim ncurses-devel autoconf automake zlib-devel python-devel epel-release openssh-server socat ipvsadm conntrack
[root@docker01 ~]#

3.1.8 安装docker依赖包

[root@docker01 ~]# yum install -y yum-utils device-mapper-persistent-data lvm2

3.1.9 上传文件并解压

将“docker-19.03.15-stable.tar.gz” 压缩包上传到 /opt目录

[root@docker01 ~]# cd /opt
[root@docker01 opt]#
[root@docker01 opt]# ls
docker-19.03.15-stable.tar.gz etcd-v3.0.12-linux-amd64.tar.gz rh
[root@docker01 opt]#
[root@docker01 opt]# tar xzf docker-19.03.15-stable.tar.gz
[root@docker03 opt]#

3.1.10 设置本地docker yum源

3.1.10.1 创建docker.repo
[root@docker01 opt]# cd /etc/yum.repos.d
[root@docker01 yum.repos.d]#
[root@docker01 yum.repos.d]# echo '[docker]
name=docker
baseurl=file:///opt/docker-19.03.15-stable
enabled=1
gpgcheck=0' > docker.repo
[root@docker01 yum.repos.d]#
3.1.10.2 刷新yum缓存
[root@docker01 yum.repos.d]# yum clean all && yum makecache
已加载插件:fastestmirror, langpacks
正在清理软件源: base docker epel extras updates
Cleaning up list of fastest mirrors
已加载插件:fastestmirror, langpacks
Determining fastest mirrors
* base: mirrors.aliyun.com
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com
base                                                                                               | 3.6 kB  00:00:00    
docker                                                                                             | 2.9 kB  00:00:00    
epel                                                                                               | 4.3 kB  00:00:00    
extras                                                                                             | 2.9 kB  00:00:00    
updates                                                                                             | 2.9 kB  00:00:00    
(1/19): base/7/x86_64/group_gz                                                                     | 153 kB  00:00:00    
(2/19): base/7/x86_64/primary_db                                                                   | 6.1 MB  00:00:14    
(3/19): docker/filelists_db                                                                         |  23 kB  00:00:00    
(4/19): docker/other_db                                                                             |  15 kB  00:00:00    
(5/19): docker/primary_db                                                                           |  49 kB  00:00:00    
(6/19): base/7/x86_64/filelists_db                                                                 | 7.2 MB  00:00:17    
(7/19): epel/x86_64/group                                                                           | 399 kB  00:00:03    
(8/19): base/7/x86_64/other_db                                                                     | 2.6 MB  00:00:05    
(9/19): epel/x86_64/updateinfo                                                                     | 1.0 MB  00:00:02    
(10/19): epel/x86_64/prestodelta                                                                   |  592 B  00:00:00    
(11/19): epel/x86_64/primary_db                                                                     | 8.7 MB  00:00:17    
(12/19): extras/7/x86_64/filelists_db                                                               | 305 kB  00:00:05    
(13/19): extras/7/x86_64/primary_db                                                                 | 253 kB  00:00:06    
(14/19): extras/7/x86_64/other_db                                                                   | 154 kB  00:00:01    
(15/19): epel/x86_64/other_db                                                                       | 4.1 MB  00:00:15    
(16/19): epel/x86_64/filelists_db                                                                   |  15 MB  00:00:44    
(17/19): updates/7/x86_64/filelists_db                                                             |  15 MB  00:00:40    
(18/19): updates/7/x86_64/other_db                                                                 | 1.6 MB  00:00:04    
(19/19): updates/7/x86_64/primary_db                                                               |  27 MB  00:00:57    
元数据缓存已建立
[root@docker01 yum.repos.d]#

3.2 离线部署 Docker

[root@docker01 yum.repos.d]# yum install docker-ce docker-ce-cli containerd.io -y
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
正在解决依赖关系
--> 正在检查事务
---> 软件包 containerd.io.x86_64.0.1.6.28-3.2.el7 将被 安装
--> 正在处理依赖关系 container-selinux >= 2:2.74,它被软件包 containerd.io-1.6.28-3.2.el7.x86_64 需要
---> 软件包 docker-ce.x86_64.3.19.03.15-3.el7 将被 安装
---> 软件包 docker-ce-cli.x86_64.1.19.03.15-3.el7 将被 安装
--> 正在检查事务
---> 软件包 container-selinux.noarch.2.2.119.2-1.911c772.el7_8 将被 安装
--> 解决依赖关系完成

依赖关系解决

===========================================================================================================================
Package                         架构                 版本                                     源                   大小
===========================================================================================================================
正在安装:
containerd.io                   x86_64               1.6.28-3.2.el7                           docker                35 M
docker-ce                       x86_64               3:19.03.15-3.el7                         docker                24 M
docker-ce-cli                   x86_64               1:19.03.15-3.el7                         docker                38 M
为依赖而安装:
container-selinux               noarch               2:2.119.2-1.911c772.el7_8                 docker                40 k

事务概要
===========================================================================================================================
安装  3 软件包 (+1 依赖软件包)

总下载量:98 M
安装大小:391 M
Downloading packages:
---------------------------------------------------------------------------------------------------------------------------
总计                                                                                       313 MB/s |  98 MB  00:00:00    
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
正在安装   : 2:container-selinux-2.119.2-1.911c772.el7_8.noarch                                                     1/4
正在安装   : containerd.io-1.6.28-3.2.el7.x86_64                                                                    2/4
正在安装   : 1:docker-ce-cli-19.03.15-3.el7.x86_64                                                                  3/4
正在安装   : 3:docker-ce-19.03.15-3.el7.x86_64                                                                      4/4
验证中     : 3:docker-ce-19.03.15-3.el7.x86_64                                                                      1/4
验证中     : 1:docker-ce-cli-19.03.15-3.el7.x86_64                                                                  2/4
验证中     : containerd.io-1.6.28-3.2.el7.x86_64                                                                    3/4
验证中     : 2:container-selinux-2.119.2-1.911c772.el7_8.noarch                                                     4/4

已安装:
containerd.io.x86_64 0:1.6.28-3.2.el7     docker-ce.x86_64 3:19.03.15-3.el7     docker-ce-cli.x86_64 1:19.03.15-3.el7    

作为依赖被安装:
container-selinux.noarch 2:2.119.2-1.911c772.el7_8                                                                      

完毕!
[root@docker01 yum.repos.d]#

3.3 关联 etcd

3.3.1 docker01 关联 etcd

[root@docker01 etcd-v3.0.12-linux-amd64]# /usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --cluster-store=etcd://192.168.0.121:2379 --cluster-advertise=192.168.0.121:2375 &
[1] 20722
[root@docker01 etcd-v3.0.12-linux-amd64]# INFO[2024-10-20T10:05:01.536262354+08:00] Starting up                                  
WARN[2024-10-20T10:05:01.536688946+08:00] [!] DON'T BIND ON ANY IP ADDRESS WITHOUT setting --tlsverify IF YOU DON'T KNOW WHAT YOU'RE DOING [!]
INFO[2024-10-20T10:05:01.548617080+08:00] libcontainerd: started new containerd process  pid=20727
INFO[2024-10-20T10:05:01.548675994+08:00] parsed scheme: "unix"                         module=grpc
INFO[2024-10-20T10:05:01.548684269+08:00] scheme "unix" not registered, fallback to default scheme  module=grpc
INFO[2024-10-20T10:05:01.548702390+08:00] ccResolverWrapper: sending update to cc: {[{unix:///var/run/docker/containerd/containerd.sock 0 <nil>}] <nil>}  module=grpc
INFO[2024-10-20T10:05:01.548710625+08:00] ClientConn switching balancer to "pick_first"  module=grpc
WARN[0000] containerd config version `1` has been deprecated and will be removed in containerd v2.0, please switch to version `2`, see https://github.com/containerd/containerd/blob/main/docs/PLUGINS.md#version-header
INFO[2024-10-20T10:05:01.612336153+08:00] starting containerd                           revision=ae07eda36dd25f8a1b98dfbf587313b99c0190bb version=1.6.28
.
.
.
INFO[2024-10-20T10:05:02.000419428+08:00] Loading containers: done.                    
INFO[2024-10-20T10:05:02.081941022+08:00] Docker daemon                                 commit=99e3ed8919 graphdriver(s)=overlay2 version=19.03.15
INFO[2024-10-20T10:05:02.082037629+08:00] Daemon has completed initialization          
INFO[2024-10-20T10:05:02.099168252+08:00] API listen on /var/run/docker.sock          
INFO[2024-10-20T10:05:02.099238413+08:00] API listen on [::]:2375                      
INFO[2024-10-20T10:05:02.224219879+08:00] 2024/10/20 10:05:02 [INFO] serf: EventMemberJoin: docker01 192.168.0.121

3.3.2 docker02 关联 etcd

[root@docker02 ~]# /usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --cluster-store=etcd://192.168.0.122:2379 --cluster-advertise=192.168.0.122:2375 &
[1] 10674
[root@docker02 etcd-v3.0.12-linux-amd64]# INFO[2024-10-20T10:06:16.006269470+08:00] Starting up                                  
WARN[2024-10-20T10:06:16.006811091+08:00] [!] DON'T BIND ON ANY IP ADDRESS WITHOUT setting --tlsverify IF YOU DON'T KNOW WHAT YOU'RE DOING [!]
INFO[2024-10-20T10:06:16.018644112+08:00] libcontainerd: started new containerd process  pid=20738
INFO[2024-10-20T10:06:16.018703306+08:00] parsed scheme: "unix"                         module=grpc
INFO[2024-10-20T10:06:16.018712067+08:00] scheme "unix" not registered, fallback to default scheme  module=grpc
INFO[2024-10-20T10:06:16.018730708+08:00] ccResolverWrapper: sending update to cc: {[{unix:///var/run/docker/containerd/containerd.sock 0 <nil>}] <nil>}  module=grpc
INFO[2024-10-20T10:06:16.018739039+08:00] ClientConn switching balancer to "pick_first"  module=grpc
WARN[0000] containerd config version `1` has been deprecated and will be removed in containerd v2.0, please switch to version `2`, see https://github.com/containerd/containerd/blob/main/docs/PLUGINS.md#version-header
INFO[2024-10-20T10:06:16.080871096+08:00] starting containerd                           revision=ae07eda36dd25f8a1b98dfbf587313b99c0190bb version=1.6.28
.
.
.                
INFO[2024-10-20T10:06:16.506582746+08:00] Docker daemon                                 commit=99e3ed8919 graphdriver(s)=overlay2 version=19.03.15
INFO[2024-10-20T10:06:16.506676229+08:00] Daemon has completed initialization          
INFO[2024-10-20T10:06:16.521548478+08:00] API listen on /var/run/docker.sock          
INFO[2024-10-20T10:06:16.521628932+08:00] API listen on [::]:2375                      
INFO[2024-10-20T10:06:16.713715029+08:00] 2024/10/20 10:06:16 [INFO] serf: EventMemberJoin: docker02 192.168.0.122
INFO[2024-10-20T10:06:16.718314246+08:00] 2024/10/20 10:06:16 [INFO] serf: EventMemberJoin: docker01 192.168.0.121

3.3.3 docker03 关联 etcd

[root@docker03 etcd-v3.0.12-linux-amd64]# /usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --cluster-store=etcd://192.168.0.123:2379 --cluster-advertise=192.168.0.123:2375 &
[1] 20735
[root@docker03 etcd-v3.0.12-linux-amd64]# INFO[2024-10-20T10:06:51.544315033+08:00] Starting up                                  
WARN[2024-10-20T10:06:51.545038092+08:00] [!] DON'T BIND ON ANY IP ADDRESS WITHOUT setting --tlsverify IF YOU DON'T KNOW WHAT YOU'RE DOING [!]
INFO[2024-10-20T10:06:51.556496715+08:00] libcontainerd: started new containerd process  pid=20740
INFO[2024-10-20T10:06:51.556557386+08:00] parsed scheme: "unix"                         module=grpc
INFO[2024-10-20T10:06:51.556565615+08:00] scheme "unix" not registered, fallback to default scheme  module=grpc
INFO[2024-10-20T10:06:51.556584215+08:00] ccResolverWrapper: sending update to cc: {[{unix:///var/run/docker/containerd/containerd.sock 0 <nil>}] <nil>}  module=grpc
INFO[2024-10-20T10:06:51.556592529+08:00] ClientConn switching balancer to "pick_first"  module=grpc
WARN[0000] containerd config version `1` has been deprecated and will be removed in containerd v2.0, please switch to version `2`, see https://github.com/containerd/containerd/blob/main/docs/PLUGINS.md#version-header
INFO[2024-10-20T10:06:51.620794493+08:00] starting containerd                           revision=ae07eda36dd25f8a1b98dfbf587313b99c0190bb version=1.6.28
.
.
.
INFO[2024-10-20T10:06:52.056021068+08:00] Docker daemon                                 commit=99e3ed8919 graphdriver(s)=overlay2 version=19.03.15
INFO[2024-10-20T10:06:52.056113053+08:00] Daemon has completed initialization          
INFO[2024-10-20T10:06:52.089439396+08:00] API listen on /var/run/docker.sock          
INFO[2024-10-20T10:06:52.089522277+08:00] API listen on [::]:2375                      
INFO[2024-10-20T10:06:52.263852615+08:00] 2024/10/20 10:06:52 [INFO] serf: EventMemberJoin: docker03 192.168.0.123
INFO[2024-10-20T10:06:52.265731646+08:00] 2024/10/20 10:06:52 [INFO] serf: EventMemberJoin: docker01 192.168.0.121
INFO[2024-10-20T10:06:52.265788158+08:00] 2024/10/20 10:06:52 [INFO] serf: EventMemberJoin: docker02 192.168.0.122


👍 点赞,你的认可是我创作的动力!

⭐️ 收藏,你的青睐是我努力的方向!

✏️ 评论,你的意见是我进步的财富!


PS:因为公众号平台更改了推送规则,如果不想错过内容,记得读完点一下“在看”,加个“星标”,这样每次新文章推送才会第一时间出现在你的订阅列表里。点“在看”支持我吧!


原文作者:超哥的IT私房菜;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论
专注于IT系统集成、运维、架构二十年的IT职场老兵,拥有CCNA、OCA、OCP、PGCA、PGCE认证证书,公众号:超哥的IT私房菜,知识星球:超哥的IT私房菜,目前是多家IT厂商的咨询顾问。

注册时间:2021-08-27

  • 博文量
    552
  • 访问量
    303487