Docker Swarm集群搭建

Docker Swarm集群搭建

1、介绍

Swarm 在 Docker 1.12 版本之前属于一个独立的项目,在 Docker 1.12 版本发布之后,该项目合并到了 Docker 中,成为 Docker 的一个子命令。目前,Swarm 是 Docker 社区提供的唯一一个原生支持 Docker 集群管理的工具。它可以把多个 Docker 主机组成的系统转换为单一的虚拟 Docker 主机,使得容器可以组成跨主机的子网网络。

Swarm 是目前 Docker 官方唯一指定(绑定)的集群管理工具。Docker 1.12 内嵌了 swarm mode 集群管理模式。

2、准备

2.1、Docker 安装及配置

Swarm集群端口, Docker Swarm集群开放了三个端口: 2377端口, 用于集群管理通信 7946端口, 用于集群节点之间的通信 4789端口, 用于overlay网络流量

1、在实现docker swarm集群之前,我肯定是需要多台服务器实现集群的,这里我准备了3台服务器,且操作系统都是CentOS 7.3,IP分别是:

10.90.1.173 // ser1

10.90.1.103 // ser2

10.90.1.102 // ser3

2、3台服务器上分别执行以下命令,安装docker

[root@yksv001173 ~]# yum search docker

[root@yksv001173 ~]# yum -y install docker

3、docker 服务的几个简单命令:

[root@yksv001173 ~]# systemctl start docker //启动docker服务

[root@yksv001173 ~]# systemctl stop docker //停止docker服务

[root@yksv001173 ~]# systemctl restart docker // 重启docker服务

[root@yksv001173 ~]# systemctl status docker // 查看docker服务状态

[root@yksv001173 ~]# systemctl enable docker // 开机启动docker服务

Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.

[root@yksv001173 ~]# systemctl disable docker // 取消开机启动docker服务

备注:3个节点执行步骤一样

4、添加私有镜像仓库源,分别在3个服务器的/etc/docker/daemon.json 文件中添加以下内容:

[root@yksv001173 ~]# vim /etc/docker/daemon.json

{ "insecure-registries":["registry.xxxxxx.com:5000"] }

registry.xxxxxx.com:5000为你的私有仓库的ip

备注:3个节点执行步骤一样

2.2、Docker 升级

2.2.1、卸载旧版本(跳过)

执行以下命令卸载旧版本docker

yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-selinux \ docker-engine-selinux \ docker-engine

2.2.2、docker ce 安装(跳过)

1、安装yum-utils包

$ sudo yum install -y yum-utils \ device-mapper-persistent-data \ lvm2

2、更新 docker-ce稳定版的yum源

yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo

3、安装docker-ce

yum install docker-ce

4、查看其它可安装的docker-ce源

yum list docker-ce --showduplicates | sort -r

2.3、swarm 安装

3台服务器分别安装好docker,并启动docker服务之后,下面要分别在3台服务器的docker上拉取swarm镜像:

[root@yksv001173 ~]# docker pull swarm

[root@yksp001103 ~]# docker pull swarm

[root@yksp001102 ~]# docker pull swarm

2.4. 防火墙

另外,为了方便,这里将服务器的防火墙全都关闭了。

firewall -cmd --state       //查看防火墙状态

systemctl stop firewalld // 关闭防火墙

systemctl start firewalld //开启防火墙

systemctl disable firewalld //禁止防火墙开机启动

成功之后,我们的准备工作就做完了。接下来就要建立集群了。

3、建立集群

我们有3个服务器作为集群的3个节点,其中,ser1, ser2作为manager节点,ser3 作为worker节点。

3.1、初始化集群

**语法: **

docker swarm init [OPTIONS]

**Options: **

  1. --advertise-addr: 多网卡的情况下,指定需要使用的ip
  2. --listen-addr: 指定监听的 ip 与端口
  3. --availability: 节点的有效性("active"|"pause"|"drain")

Active:集群中该Node可以被指派Task

Pause:集群中该Node不可以被指派新的Task,但是其他已经存在的Task保持运行

Drain:集群中该Node不可以被指派新的Task,Swarm Scheduler停掉已经存在的Task,并将它们调度到可用的Node上

示例

[root@yksv001173 ~]# docker swarm init --advertise-addr 10.90.1.173 --listen-addr 10.90.1.173:2377

Swarm initialized: current node (nkdt3dm6upwitbxmi33byio7u) is now a manager.

To add a worker to this swarm, run the following command:

docker swarm join \

--token SWMTKN-1-0nvju9ip7q5k0s99lhd0f0w54wugucs7m5mkt0ep1kjwxnqu4a-9w6njph286adym2dvk4xtfd6d \

10.90.1.173:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

[root@yksv001173 ~]#

3.2、添加节点

语法

docker swarm join [OPTIONS] HOST:PORT

Options

  1. --token: 所需加入集群的token
  2. --advertise-addr: 多网卡的情况下,指定需要使用的ip
  3. --listen-addr: 指定监听的 ip 与端口
  4. --availability: 节点的有效性("active"|"pause"|"drain")

Active:集群中该Node可以被指派Task

Pause:集群中该Node不可以被指派新的Task,但是其他已经存在的Task保持运行

Drain:集群中该Node不可以被指派新的Task,Swarm Scheduler停掉已经存在的Task,并将它们调度到可用的Node上

3.2.1、manager节点

首先要获取manager的token,在ser1上执行以下命令:

[root@yksv001173 ~]# docker swarm join-token manager

然后执行以下命令,将ser2服务器作为manager节点加入集群

[root@yksp001103 ~]# docker swarm join \

--advertise-addr 10.90.1.103 \

--listen-addr 10.90.1.103:2377 \

--token SWMTKN-1-0nvju9ip7q5k0s99lhd0f0w54wugucs7m5mkt0ep1kjwxnqu4a-br62zeo51n33vx7rc0717ddmi \

10.90.1.173:2377

Error response from daemon: rpc error: code = 14 desc = grpc: the connection is unavailable

报错,看下端口通不通

[root@yksp001103 ~]# telnet 10.90.1.173 2377

Trying 10.90.1.173...

telnet: connect to address 10.90.1.173: No route to host

[root@yksp001103 ~]#

不通,发现是10.90.1.173的防火墙是开启的

[root@yksv001173 ~]# getenforce

Enforcing

[root@yksv001173 ~]# setenforce 0 ---->临时关闭

[root@yksv001173 ~]# getenforce

Permissive

[root@yksv001173 ~]# /usr/sbin/sestatus -v ---->查看状态

[root@yksv001173 ~]# vim /etc/selinux/config

#SELINUX=enforcing

SELINUX=disabled

SELINUXTYPE=targeted

修改完成之后重启服务器生效。

未关闭防火墙之前的记录

[root@yksv001173 ~]# iptables-save

# Generated by iptables-save v1.4.21 on Fri May 10 09:48:11 2019

*nat

:PREROUTING ACCEPT [113:14041]

:INPUT ACCEPT [1:84]

:OUTPUT ACCEPT [2:152]

:POSTROUTING ACCEPT [2:152]

:DOCKER - [0:0]

:OUTPUT_direct - [0:0]

:POSTROUTING_ZONES - [0:0]

:POSTROUTING_ZONES_SOURCE - [0:0]

:POSTROUTING_direct - [0:0]

:POST_public - [0:0]

:POST_public_allow - [0:0]

:POST_public_deny - [0:0]

:POST_public_log - [0:0]

:PREROUTING_ZONES - [0:0]

:PREROUTING_ZONES_SOURCE - [0:0]

:PREROUTING_direct - [0:0]

:PRE_public - [0:0]

:PRE_public_allow - [0:0]

:PRE_public_deny - [0:0]

:PRE_public_log - [0:0]

-A PREROUTING -j PREROUTING_direct

-A PREROUTING -j PREROUTING_ZONES_SOURCE

-A PREROUTING -j PREROUTING_ZONES

-A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER

-A OUTPUT -j OUTPUT_direct

-A OUTPUT ! -d 127.0.0.0/8 -m addrtype --dst-type LOCAL -j DOCKER

-A POSTROUTING -s 172.18.0.0/16 ! -o docker_gwbridge -j MASQUERADE

-A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE

-A POSTROUTING -j POSTROUTING_direct

-A POSTROUTING -j POSTROUTING_ZONES_SOURCE

-A POSTROUTING -j POSTROUTING_ZONES

-A DOCKER -i docker_gwbridge -j RETURN

-A DOCKER -i docker0 -j RETURN

-A POSTROUTING_ZONES -o ens192 -g POST_public

-A POSTROUTING_ZONES -g POST_public

-A POST_public -j POST_public_log

-A POST_public -j POST_public_deny

-A POST_public -j POST_public_allow

-A PREROUTING_ZONES -i ens192 -g PRE_public

-A PREROUTING_ZONES -g PRE_public

-A PRE_public -j PRE_public_log

-A PRE_public -j PRE_public_deny

-A PRE_public -j PRE_public_allow

COMMIT

# Completed on Fri May 10 09:48:11 2019

# Generated by iptables-save v1.4.21 on Fri May 10 09:48:11 2019

*mangle

:PREROUTING ACCEPT [94508:77994638]

:INPUT ACCEPT [69063:75012854]

:FORWARD ACCEPT [0:0]

:OUTPUT ACCEPT [50595:3429177]

:POSTROUTING ACCEPT [50595:3429177]

:FORWARD_direct - [0:0]

:INPUT_direct - [0:0]

:OUTPUT_direct - [0:0]

:POSTROUTING_direct - [0:0]

:PREROUTING_ZONES - [0:0]

:PREROUTING_ZONES_SOURCE - [0:0]

:PREROUTING_direct - [0:0]

:PRE_public - [0:0]

:PRE_public_allow - [0:0]

:PRE_public_deny - [0:0]

:PRE_public_log - [0:0]

-A PREROUTING -j PREROUTING_direct

-A PREROUTING -j PREROUTING_ZONES_SOURCE

-A PREROUTING -j PREROUTING_ZONES

-A INPUT -j INPUT_direct

-A FORWARD -j FORWARD_direct

-A OUTPUT -j OUTPUT_direct

-A POSTROUTING -j POSTROUTING_direct

-A PREROUTING_ZONES -i ens192 -g PRE_public

-A PREROUTING_ZONES -g PRE_public

-A PRE_public -j PRE_public_log

-A PRE_public -j PRE_public_deny

-A PRE_public -j PRE_public_allow

COMMIT

# Completed on Fri May 10 09:48:11 2019

# Generated by iptables-save v1.4.21 on Fri May 10 09:48:11 2019

*security

:INPUT ACCEPT [63356:74467437]

:FORWARD ACCEPT [0:0]

:OUTPUT ACCEPT [50595:3429177]

:FORWARD_direct - [0:0]

:INPUT_direct - [0:0]

:OUTPUT_direct - [0:0]

-A INPUT -j INPUT_direct

-A FORWARD -j FORWARD_direct

-A OUTPUT -j OUTPUT_direct

COMMIT

# Completed on Fri May 10 09:48:11 2019

# Generated by iptables-save v1.4.21 on Fri May 10 09:48:11 2019

*raw

:PREROUTING ACCEPT [94508:77994638]

:OUTPUT ACCEPT [50595:3429177]

:OUTPUT_direct - [0:0]

:PREROUTING_ZONES - [0:0]

:PREROUTING_ZONES_SOURCE - [0:0]

:PREROUTING_direct - [0:0]

:PRE_public - [0:0]

:PRE_public_allow - [0:0]

:PRE_public_deny - [0:0]

:PRE_public_log - [0:0]

-A PREROUTING -j PREROUTING_direct

-A PREROUTING -j PREROUTING_ZONES_SOURCE

-A PREROUTING -j PREROUTING_ZONES

-A OUTPUT -j OUTPUT_direct

-A PREROUTING_ZONES -i ens192 -g PRE_public

-A PREROUTING_ZONES -g PRE_public

-A PRE_public -j PRE_public_log

-A PRE_public -j PRE_public_deny

-A PRE_public -j PRE_public_allow

COMMIT

# Completed on Fri May 10 09:48:11 2019

# Generated by iptables-save v1.4.21 on Fri May 10 09:48:11 2019

*filter

:INPUT ACCEPT [0:0]

:FORWARD DROP [0:0]

:OUTPUT ACCEPT [701:75587]

:DOCKER - [0:0]

:DOCKER-ISOLATION - [0:0]

:FORWARD_IN_ZONES - [0:0]

:FORWARD_IN_ZONES_SOURCE - [0:0]

:FORWARD_OUT_ZONES - [0:0]

:FORWARD_OUT_ZONES_SOURCE - [0:0]

:FORWARD_direct - [0:0]

:FWDI_public - [0:0]

:FWDI_public_allow - [0:0]

:FWDI_public_deny - [0:0]

:FWDI_public_log - [0:0]

:FWDO_public - [0:0]

:FWDO_public_allow - [0:0]

:FWDO_public_deny - [0:0]

:FWDO_public_log - [0:0]

:INPUT_ZONES - [0:0]

:INPUT_ZONES_SOURCE - [0:0]

:INPUT_direct - [0:0]

:IN_public - [0:0]

:IN_public_allow - [0:0]

:IN_public_deny - [0:0]

:IN_public_log - [0:0]

:OUTPUT_direct - [0:0]

-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

-A INPUT -i lo -j ACCEPT

-A INPUT -j INPUT_direct

-A INPUT -j INPUT_ZONES_SOURCE

-A INPUT -j INPUT_ZONES

-A INPUT -m conntrack --ctstate INVALID -j DROP

-A INPUT -j REJECT --reject-with icmp-host-prohibited

-A FORWARD -j DOCKER-ISOLATION

-A FORWARD -o docker_gwbridge -j DOCKER

-A FORWARD -o docker_gwbridge -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

-A FORWARD -i docker_gwbridge ! -o docker_gwbridge -j ACCEPT

-A FORWARD -o docker0 -j DOCKER

-A FORWARD -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

-A FORWARD -i docker0 ! -o docker0 -j ACCEPT

-A FORWARD -i docker0 -o docker0 -j ACCEPT

-A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

-A FORWARD -i lo -j ACCEPT

-A FORWARD -j FORWARD_direct

-A FORWARD -j FORWARD_IN_ZONES_SOURCE

-A FORWARD -j FORWARD_IN_ZONES

-A FORWARD -j FORWARD_OUT_ZONES_SOURCE

-A FORWARD -j FORWARD_OUT_ZONES

-A FORWARD -m conntrack --ctstate INVALID -j DROP

-A FORWARD -j REJECT --reject-with icmp-host-prohibited

-A FORWARD -i docker_gwbridge -o docker_gwbridge -j DROP

-A OUTPUT -j OUTPUT_direct

-A DOCKER-ISOLATION -i docker0 -o docker_gwbridge -j DROP

-A DOCKER-ISOLATION -i docker_gwbridge -o docker0 -j DROP

-A DOCKER-ISOLATION -j RETURN

-A FORWARD_IN_ZONES -i ens192 -g FWDI_public

-A FORWARD_IN_ZONES -g FWDI_public

-A FORWARD_OUT_ZONES -o ens192 -g FWDO_public

-A FORWARD_OUT_ZONES -g FWDO_public

-A FWDI_public -j FWDI_public_log

-A FWDI_public -j FWDI_public_deny

-A FWDI_public -j FWDI_public_allow

-A FWDI_public -p icmp -j ACCEPT

-A FWDO_public -j FWDO_public_log

-A FWDO_public -j FWDO_public_deny

-A FWDO_public -j FWDO_public_allow

-A INPUT_ZONES -i ens192 -g IN_public

-A INPUT_ZONES -g IN_public

-A IN_public -j IN_public_log

-A IN_public -j IN_public_deny

-A IN_public -j IN_public_allow

-A IN_public -p icmp -j ACCEPT

-A IN_public_allow -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT

COMMIT

# Completed on Fri May 10 09:48:11 2019

[root@yksv001173 ~]#

然后关闭防火墙

[root@yksv001173 ~]# systemctl stop firewalld.service

现在在重新加入一下

[root@yksp001103 ~]# docker swarm join \

> --advertise-addr 10.90.1.103 \

> --listen-addr 10.90.1.103:2377 \

> --token SWMTKN-1-0nvju9ip7q5k0s99lhd0f0w54wugucs7m5mkt0ep1kjwxnqu4a-br62zeo51n33vx7rc0717ddmi \

> 10.90.1.173:2377

Error response from daemon: can't initialize raft node: rpc error: code = 2 desc = could not connect to prospective new cluster member using its advertised address: rpc error: code = 14 desc = grpc: the connection is unavailable

[root@yksp001103 ~]#

解决方案:把10.90.1.103的防火墙也关闭

[root@yksp001103 ~]# docker swarm join \

> --advertise-addr 10.90.1.103 \

> --listen-addr 10.90.1.103:2377 \

> --token SWMTKN-1-0nvju9ip7q5k0s99lhd0f0w54wugucs7m5mkt0ep1kjwxnqu4a-br62zeo51n33vx7rc0717ddmi \

> 10.90.1.173:2377

This node joined a swarm as a manager.

3.2.2、worker节点

首先要获取worker的token,在ser1上执行以下命令:

[root@yksv001173 ~]# docker swarm join-token worker

然后执行以下命令,将ser3服务器作为worker节点加入集群:

[root@yksp001102 ~]# systemctl stop firewalld.service

[root@yksp001102 ~]# iptables-save

[root@yksp001102 ~]# docker swarm join \

> --advertise-addr 10.90.1.102 \

> --listen-addr 10.90.1.102:2377 \

> --token SWMTKN-1-0nvju9ip7q5k0s99lhd0f0w54wugucs7m5mkt0ep1kjwxnqu4a-9w6njph286adym2dvk4xtfd6d \

> 10.90.1.173:2377

This node joined a swarm as a worker.

[root@yksp001102 ~]#

3.3、查看节点

以下命令只能在manager节点上执行

查出集群的节点列表

语法

docker node ls [OPTIONS]

Options

1、--filter , -f: 根据条件筛选查询结果

示例

[root@yksv001173 ~]# docker node ls

现在集群已经搭建完成!!!

3.4、修改节点

以下命令只能在manager节点上执行

3.4.1、节点降级

将manager节点(10.90.1.103)降为worker

语法

docker node demote NODE [NODE...]

示例

[root@yksv001173 ~]# docker node demote yksp001103

Manager yksp001103 demoted in the swarm.

节点降级成功!!!

3.4.2、节点升级

将worker节点提升为manager

语法

docker node promote NODE [NODE...]

示例

[root@yksv001173 ~]# docker node promote yksp001103

Node yksp001103 promoted to a manager in the swarm.

3.4.3、修改节点参数

语法

docker node update [OPTIONS] NODE

Options

1、--availability: 节点的有效性("active"|"pause"|"drain")

Active:集群中该Node可以被指派Task

Pause:集群中该Node不可以被指派新的Task,但是其他已经存在的Task保持运行

Drain:集群中该Node不可以被指派新的Task,Swarm Scheduler停掉已经存在的Task,并将它们调度到可用的Node上

2、--role: 节点角色(“worker”|“manager”)

示例

[root@yksv001173 ~]# docker node update --availability Active yksv001173

3.5. 退出节点

3.5.1、docker node rm

从集群中移除一个或多个节点(manager 节点执行)

语法

docker node rm [OPTIONS] NODE [NODE...]

Options

1、--force , -f: 强制从集群中删除节点

示例

[root@yksv001173 ~]# docker node rm -f yksp001102

3.5.2、docker swarm leave

退出集群(在需要退出的节点上面执行)

语法

docker swarm leave [OPTIONS]

Options

        --force , -f: 强制从集群中删除节点

示例

[root@yksp001102 ~]# docker swarm leave

现在把10.90.1.102节点加入进去

[root@yksv001102 ~]# docker swarm join \

--advertise-addr 10.90.1.102 \

--listen-addr 10.90.1.102:2377 \

--token SWMTKN-1-0nvju9ip7q5k0s99lhd0f0w54wugucs7m5mkt0ep1kjwxnqu4a-9w6njph286adym2dvk4xtfd6d \

10.90.1.173:2377

4、应用部署

4.1、创建服务

语法

docker service create [OPTIONS] IMAGE [COMMAND] [ARG...]

Options

1、--detach , -d: 指定容器运行于前台还是后台,默认为false

2、--name: 服务名称

3、--network: 网络连接

4、--publish , -p: 端口映射

5、--env , -e: 设置环境变量

6、--tty , -t: 分配tty设备,该可以支持终端登录

7、--mount: 文件挂载

8、--replicas: 指定任务数量

示例

[root@yksv001173 ~]# docker service create --replicas 3 -p 8080:80 --name api_131 \

--mount type=bind,source=/storage/apiapp_log,destination=/go/src/logs \

--mount type=bind,source=/root/apiapp/app.conf,destination=/root/app.conf \

--mount type=bind,source=/root/apiapp/run_application.sh,destination=/root/run_application.sh \

-e RUN_MODE=Production \

-t registry.youkeshu.com:5000/nginx:php7.1v3

提示mount挂载有问题。

解决方案:没有找到解决方案

创建服务2

[root@yksv001173 docker_project]# pwd

/root/docker_project

[root@yksv001173 docker_project]# vim docker-compose.yml

version: "3"

services:

web:

image: registry.xxxxxx.com:5000/nginx:php7.1v3

deploy:

replicas: 2

restart_policy:

condition: on-failure

ports:

- "8090:80"

networks:

- "net"

volumes:

- "mydata:/var/www"

networks:

net:

volumes:

mydata:

创建stack

[root@yksv001173 docker_project]# docker stack deploy -c docker-compose.yml web

创建服务3

[root@yksv001173 ~]# docker service create --replicas 2 -p 8091:80 --name nginx_test registry.youkeshu.com:5000/nginx:php7.1v3

查看详细信息

[root@yksv001173 ~]# docker service ps --no-trunc nginx_test

解决方案:

[root@yksv001173 ~]# cd /usr/libexec/docker

[root@yksv001173 docker]# ln -s docker-runc-current docker-runc

[root@yksv001103 docker]# ln -s docker-runc-current docker-runc

[root@yksv001102 docker]# ln -s docker-runc-current docker-runc

4.2、修改服务

4.2.1、修改服务参数

语法

docker service update [OPTIONS] SERVICE

Options

1、--detach , -d: 指定容器运行于前台还是后台

2、--env-add: 增加环境变量

3、--env-rm: 删除环境变量

4、--mount-add: 增加文件挂载

5、--mount-rm: 通过目标路径删除文件挂载

6、--network-add: 增加网络设置

7、--network-rm: 移除网络设置

8、--publish-add: 增加端口映射

9、--publish-rm: 通过目标端口移除端口映射

10、--replicas: 修改任务数量

示例

现在将该api_131的任务数量修改为2个

[root@yksv001173 ~]# docker service update --replicas 2 api_131

4.2.2、修改任务数量

虽然通过docker service update命令也可以修改任务数量,但是docker还提供了一个修改任务数量的命令。

该命令可以修改一个或多个服务的任务数量

语法

docker service scale SERVICE=REPLICAS [SERVICE=REPLICAS...]

示例

docker service scale ser1=3 ser2=5

[root@yksv001173 ~]# docker service scale api_131=3

4.3、查看服务

4.3.1、查看服务列表

manager节点执行

语法

docker service ls [OPTIONS]

Options

1、--filter , -f: 过滤条件

示例

docker service ls --filter name=redis

[root@yksv001173 ~]# docker service ls --filter name=api_131

4.3.2、查看任务列表

manager执行,可查看一个或多个服务的任务列表

语法

docker service ps [OPTIONS] SERVICE [SERVICE...]

Options

1、--filter , -f: 过滤条件

示例

docker service ps api_131

[root@yksv001173 ~]# docker service ps api_131

4.3.3、查看服务详情

manager执行,可查看一个或多个服务的详细情况

语法

docker service inspect [OPTIONS] SERVICE [SERVICE...]

Options

1、--pretty: 格式化输出信息

示例

[root@yksv001173 ~]# docker service inspect api_131

4.4、删除服务

manager 执行,删除一个或多个服务

语法

docker service rm SERVICE [SERVICE...]

示例

[root@yksv001173 ~]# docker service rm api_131

4.5、查看服务日志

manager执行,查看服务或任务的日志

语法

docker service logs [OPTIONS] SERVICE|TASK

Options

  1. --follow , -f: 跟随输出
  2. --tail: 显示最新的N条日志
  3. --since: 显示从某个时间开始的所有日志
  4. --timestamps , -t: 显示时间戳

示例

[root@yksv001173 ~]# docker service log -f api_131

引申:

1、创建可视化Portainer.io管理界面

[root@yksv001173 ~]# docker service create \

--name portainer \

--publish 9000:9000 \

--constraint 'node.role == manager' \

--mount type=bind,src=//var/run/docker.sock,dst=/var/run/docker.sock \

portainer/portainer \

-H unix:///var/run/docker.sock

登录10.90.1.173:9000,然后创建用户:admin,创建密码:xxxxxx

继续在集群主控节点上部署可视化的visualizer服务

# 可以非常直观的显示整个Swarm集群的信息、状态、运行的容器等

[root@yksv001173 ~]# docker service create \

--name=viz \

--publish=8088:8080/tcp \

--constraint=node.role==manager \

--mount=type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock \

manomarks/visualizer

# 访问方法: http://4台机器的任何一个ip:8088

没有镜像,解决方案:更换镜像

[root@yksv001173 ~]# docker service update --image clarenceb/visualizer viz

浏览器访问10.90.1.173:8088

5、问题及解决

(1)、container ingress-sbox is already present in sandbox ingress sbox

错误

错误

集群部署的时候,节点无法启动容器,且报错:container ingress-sbox is already present in sandbox ingress sbox,这个时候可能是因为docker的SELinux配置问题。

解决办法:编辑文件/etc/sysconfig/docker,若不存在该文件,则添加文件。添加以下内容:

OPTIONS='--selinux-enabled --log-driver=journald --signature-verification=false' if [ -z "${DOCKER_CERT_PATH}" ]; then DOCKER_CERT_PATH=/etc/docker fi

(2)、connection is unavailable

错误

错误

添加集群节点的时候报如上图的错误。可能有两个原因,第一,查看下防火墙的问题,需要配置防火墙,或者暴力一点直接关闭防火墙,另外一个原因就是检查下你的ip是不是输错了。我因为ip敲错了,困惑了很久。

(3)、invalid mount

错误

错误

节点机器起容器的时候报上图的错,请仔细检查挂载的目录是否存在。

以上就是Docker Swarm集群部署及应用部署的全部内容,不足之处请大家提出宝贵意见!!!

参考文档:http://www.chairis.cn/blog/article/89

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值