DockerSwarm集群实践

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

命令输出截图

image.png

管理节点执行加入命令:

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

命令输出截图

image.png

管理节点执行加入命令:

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

部署所需物料文件:

mysqld.cnf

mysql-schema.sql

application.properties.txt

docker-stack-nacos.yml

部署目录准备

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"

更多文章请访问个人博客icon-default.png?t=N7T8http://www.fightlinux.com 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值