DockerSwarm部署
部署规划
主机名 | IP | 角色 |
el7-linux-node-01 | 192.168.240.128 | manager,worker,nfs-server |
el7-linux-node-02 | 192.168.240.139 | worker,nfs-client |
共享存储配置
linux-node-01:安装nfs-utils,并配置共享存储;
# 安装nfs-utils, 开启nfs开机自启
yum -y install nfs-utils rpc-bind
systemctl enable nfs
# 配置nfs目录共享
mkdir -pv /www/server/
cat >> /etc/exportfs << eof
/www/server 192.168.240.0/24(rw,no_root_squash,sync)
eof
exportfs -av
linux-node-02: 安装nfs-utils,挂载nfs共享存储到本地目录;挂载路径和共享路径一致
yum -y install nfs-utils
mkdir /www/server
mount -t nfs 192.168.240.128:/www/server /www/server
部署Docker
所有服务器上均要安装docker
CentOS下载安装命令如下:
# 需要提前配置docker-ce源
yum -y install docker-ce
配置Docker
cat > /etc/docker/daemon.json << eof
{
"data-root":"/www/server/docker",
"registry-mirrors": ["http://hub-mirror.c.163.com"],
"log-driver":"json-file",
"log-opts": {"max-size":"100m", "max-file":"20"},
"dns": ["114.114.114.114", "223.5.5.5"],
"exec-opts": ["native.cgroupdriver=systemd"],
"bip": "10.110.119.1/24",
"ipv6": true,
"fixed-cidr-v6": "2001:db8:1::/64",
"experimental": true,
"ip6tables": true
}
eof
启动Docker
systemctl daemon-reload
systemctl enable docker
systemctl start docker
初始化DockerSwarm集群
在manager节点服务器上,执行以下命令进行集群初始化;
docker swarm init
初始化结果如下:
warm initialized: current node (95uar44evfm9m3s0vwprbyo8h) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-5ct0sm47pt6t6otd4t0gdyc418b4mcim0h7qu2mrjnwsp8o3nr-5qjatnohln6upm4m66ndd2y5d 192.168.240.128:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
初始化集群相关命令参数可以使用以下命令获取
docker swarm init --help
要加入新的manager
工作节点加入集群
复制master节点初始化时,输出的join命令到worker节点进行执行,将worker节点加入到swarm集群中即可。也可以使用以下命令,显示新的join-token 信息
docker swarm join-token worker
执行加入集群如下:
docker swarm join --token SWMTKN-1-5ct0sm47pt6t6otd4t0gdyc418b4mcim0h7qu2mrjnwsp8o3nr-5qjatnohln6upm4m66ndd2y5d 192.168.240.128:2377
DockerSwarm节点管理
集群节点加入
加入管理节点
查看管理节点加入命令token,执行以下命令后输出加入集群命令,在待加入集群的管理节点上执行集群加入命令即可。
docker swarm join-token manager
命令输出
[root@el7-linux-node-01 daqsoft]# docker swarm join-token manager
To add a manager to this swarm, run the following command:
docker swarm join --token SWMTKN-1-5ct0sm47pt6t6otd4t0gdyc418b4mcim0h7qu2mrjnwsp8o3nr-bgnv2fk7iflu8rpwiahdcejt5 192.168.240.128:2377
命令输出截图
管理节点执行加入命令:
docker swarm join --token SWMTKN-1-5ct0sm47pt6t6otd4t0gdyc418b4mcim0h7qu2mrjnwsp8o3nr-bgnv2fk7iflu8rpwiahdcejt5 192.168.240.128:2377
加入工作节点
查看工作节点加入命令token,执行以下命令后输出加入集群命令,在待加入集群的工作节点上执行集群加入命令即可。
docker swarm join-token worker
命令输出
[root@el7-linux-node-01 daqsoft]# docker swarm join-token worker
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-5ct0sm47pt6t6otd4t0gdyc418b4mcim0h7qu2mrjnwsp8o3nr-5qjatnohln6upm4m66ndd2y5d 192.168.240.128:2377
命令输出截图
管理节点执行加入命令:
docker swarm join --token SWMTKN-1-5ct0sm47pt6t6otd4t0gdyc418b4mcim0h7qu2mrjnwsp8o3nr-bgnv2fk7iflu8rpwiahdcejt5 192.168.240.128:2377
集群节点查看
在管理节点执行
docker node ls
提升工作节点为管理节点
在管理节点执行
docker node promote el7-linux-node-02
降级管理节点为工作节点
在任意一台管理节点执行以下命令
docker node demote el7-linux-node-02
docker node ls
设置节点属性
命令格式
Usage: docker node update [OPTIONS] NODE
Update a node
Options:
--availability string Availability of the node ("active", "pause", "drain")
--label-add list Add or update a node label ("key=value")
--label-rm list Remove a node label if exists
--role string Role of the node ("worker", "manager")
命令示例
设置节点可用性
docker node update --availability active|pause|drain node
设置节不可用,被设置为不可用的节点上的容器将转移到其他节点上。
docker node update --availability drain el7-linux-node-01
设置前容器运行情况
设置后容器运行情况
删除节点
节点主动退出集群
在要退出集群的节点执行以下命令,退出集群
docker swarm leave
管理节点查看状态
注意事项
如果集群中管理节点存在高可用节点时,最小要保持2个管理节点可用,当管理节点退出集群后数量小于1则会出现以下提示。
如果要将管理节点退出集群,首先需要将节点降级为工作点后,再执行退出集群操作。
# 在任一台管理节点执行以下命令
docker node demote el7-linux-node-02
# 在node-02上执行退出集群操作
docker swarm leave
删除已经停止/宕机/退出集群的工作节点
在node-02上停止docker服务,模拟node-02出现故障宕机
systemctl stop docker docker.socket
在管理节点上查看所有节点状态
docker node ls
删除已经停止服务的节点
docker node rm el7-linux-node-02
docker node ls
强制删除节点
docker node rm --force el7-linux-node-02
重新加入集群
在节点删除时,被删除节点未主动退出swarm集群,被删除节点重新加入集群需要执行leave命令后才可以重新以jion命令加入到集群中。
遇到以上提示需要按提示进行操作退出集群后重新加入即可
docker swarm leave
docker swarm join --token SWMTKN-1-5ct0sm47pt6t6otd4t0gdyc418b4mcim0h7qu2mrjnwsp8o3nr-5qjatnohln6upm4m66ndd2y5d 192.168.240.128:2377
服务管理
在管理节点上执行服务管理命令
命令格式
官方文档:docker service
三方文档:docker service命令 - Docker教程-易百教程
[root@el7-linux-node-01 ~]# docker service --help
Usage: docker service COMMAND
Manage Swarm services
Commands:
create Create a new service
inspect Display detailed information on one or more services
logs Fetch the logs of a service or task
ls List services
ps List the tasks of one or more services
rm Remove one or more services
rollback Revert changes to a service's configuration
scale Scale one or multiple replicated services
update Update a service
Run 'docker service COMMAND --help' for more information on a command
服务创建
命令格式
docker service create --replicas 副本数 --name 服务名 镜像名称
常用参数说明
--replicas 创建的服务容器副本数量
--name 指定服务名称
镜像名称 指定要运行服务的容器镜像名称
--publish port:port 映射指定端口到集群主机,使用所有主机的指定端口都可以访问
-p port:port 映射指定端口到集群主机,使用所有主机的指定端口都可以访问
使用示例
docker service create --name nginx-ser openresty/openresty
# 或
docker service create --replicas 1 --name nginx-ser openresty/openresty
# 创建服务并进行端口映射
docker service create -p 18080:80 --name nginx-ser openresty/openresty
访问测试
service 通过 ingress load balancing 来发布服务,且 swarm 集群中所有 node 都参与到 ingress 路由网格(ingress routing mesh) 中,访问任意一个 nodeIP+PublishedPort 即可访问到服务。
服务查看
# 查看服务列表
docker service ls
# 查看指定服务运行的容器
docker service ps
服务删除
命令格式
docker service rm 服务名
使用示例
docker service rm nginx-ser
服务日志查看
命令格式
[root@el7-linux-node-01 ~]# docker service logs --help
Usage: docker service logs [OPTIONS] SERVICE|TASK
Fetch the logs of a service or task
Options:
--details Show extra details provided to logs
-f, --follow Follow log output
--no-resolve Do not map IDs to Names in output
--no-task-ids Do not include task IDs in output
--no-trunc Do not truncate output
--raw Do not neatly format logs
--since string Show logs since timestamp (e.g. "2013-01-02T13:23:37Z") or relative (e.g. "42m" for 42 minutes)
-n, --tail string Number of lines to show from the end of the logs (default "all")
-t, --timestamps Show timestamps
常用命令参数
-f, --follow 实时跟踪日志输出
--since string 显示指定日期(e.g. "2013-01-02T13:23:37Z")之后的日志或相对当前时间(e.g. "42m" for 42 minutes)的日志
-n, --tail string 查看最新的n行日志
使用示例
docker service logs --since 8m nginx-ser
docker service logs -n 10 nginx-ser
服务扩容缩容
命令格式
"docker service scale" requires at least 1 argument.
See 'docker service scale --help'.
Usage: docker service scale SERVICE=REPLICAS [SERVICE=REPLICAS...]
Scale one or multiple replicated services
使用示例
docker service scale nginx-ser=3
验证各节点服务容器状态
服务编排管理
dockerswarm集群编排文件,可以使用docker-compose的编排文件,swarm集群在使用相关文件时,会忽略以下相关指令
build
cgroup_parent
container_name
devices
tmpfs
external_links
links
network_mode
restart
security_opt
userns_mode
部署Nacos
部署所需物料文件:
部署目录准备
mkdir /www/server/nacos/nacos/{conf,data,logs}
mkdir /www/server/nacos/mysql/{mysql.conf.d,data}
上传物料文件至指定位置
物料名称 | 上传位置 |
mysqld.cnf | /www/server/nacos/mysql/mysql.conf.d |
application.properties.txt | /www/server/nacos/nacos/conf |
mysql-schema.sql | /www/server/nacos |
docker-stack-nacos.yml | /www/server/nacos |
上传后目录结构如下
执行部署命令
cd /www/server/nacos
docker stack deploy -c docker-stack-nacos.yml ncstack
由于此stack文件为了兼容docker-compose,使用了docker-compose支持一些命令进行编辑,但不影响程序部署。
部署后检查
docker stack ls
docker stack ps ncstack
查看应用栈服务
docker service ls -f "name=ncstack"