据悉marathon-lb的劳务由发现同负载均衡

1)API方式

#marathon是有api接口的,通过api的方式可调用marathon执行相关应用调度的请求
#在marathon服务所在节点创建json文件;
#以下json文件中的注释需去掉。
[root@master-node1 ~]# vim nginx.json
{
  "id":"nginx1",                                 #容器名,只在marathon生效
  "cpus":0.2,                                    #cpu用量
  "mem":20.0,                                    #mem用量
  "instances": 1,                                #容器数量
  "constraints": [["hostname", "UNIQUE",""]],    #限制
  "container": {
  "type":"DOCKER",                               #应用类型
  "docker": {                                    #docker具体配置
     "image": "nginx",                           #采用的image
     "network": "BRIDGE",                        #网络模式
     "portMappings": [
        {"containerPort": 80, "hostPort": 0,"servicePort": 0, "protocol": "tcp" }
      ]                                          #端口映射,”0”表示任意端口,"servicePort"服务端口
    }
  }
}

#调用json文件
[root@master-node1 ~]# curl -X POST http://10.11.4.156:8080/v2/apps -d @/root/nginx.json -H "Content-type: application/json" 
  • (1). 登陆marathon,查看下都下成功,处于”Running”状态;容器的资源配置遵从json文件被的装;针对利用,点击最右边的”…”按钮,可进行相关操作;

图片 1

  • (2). 点击应用名叫或状态,查看下具体信息,可查阅及之以下发到slave节点:10.11.4.147,且映射主机的31896端口;同时可查阅”stderr”与”stdout”日志等(也可是至mesos任务之”Sandbox”中查下载);

图片 2

  • (3). Configuration标签下,列有了扭转的器皿的相关部署,除json文件预设置的参数外,还有json文件被定义的”任意值”也来矣醒目的配置;同时可以”Edit”;

图片 3

  • (4). 在slave节点:10.11.4.147下查看容器;
    [root@slave-node2 ~]# docker ps

图片 4

  • (5). web访问:http://10.11.4.147:31896

图片 5

  • (6). 登陆mesos,”Active
    Tasks”有处运行状态的职责。

图片 6

2)mesos web

mesos
active tasks中显得marathon-lb任务下发成功,如下:

图片 7

1)安装mesos-master&marathon

# 添加mesosphere repository,根据github mesosphere社区版获取最新repository
[root@master-node1 ~]# cd /usr/local/src/
[root@master-node1 src]# wget http://repos.mesosphere.io/el/7/noarch/RPMS/mesosphere-el-repo-7-3.noarch.rpm
[root@master-node1 src]# rpm -ivh mesosphere-el-repo-7-3.noarch.rpm
[root@master-node1 src]# yum install mesos marathon -y

4. 查看marathon-lb

2. marathon

登陆marathon
web:http://10.11.4.156:8080

#或者点击mesos-frameworks页面中,已经选出出底marathon
leader;

#登陆10.11.4.157/158都好,通过zookeeper选主,登陆任一地方都见面过反到leader页面。

2)haproxy监控页面

浏览器查看:http://10.11.4.146:9090/haproxy?stats

图片 8

除此以外还有一部分haproxy监控页面(ip地址是宿主机,即相应slave节点的ip),如下:

  • 监察页面:http://ip:9090/haproxy?stats

  • csv格式的状态监控:http://ip:9090/haproxy?stats;csv

  • 健康检查(注意下划线):http://ip:9090/_haproxy_health_check
  • haproxy配置获取(注意下划线):http://ip:9090/_haproxy_getconfig
  • haproxy的pid(注意下划线):http://ip:9090/_haproxy_getpids

1. zookeeper安装

请参考:http://www.cnblogs.com/netonline/p/7695034.html

ps:zookeeper需要java支持,这里装之是jdk-8u131-linux-x64。

1. 环境说明

图片 9

依据《基于zookeeper+mesos+marathon的docker集群管理平台》的环境,不同处:

  1. 自从发现和负载均衡服务由镜像marathon-lb生成的容器完成,下发至自由1大salve节点;
  1. 不无salve节点安装keepalived服务做服务之强可用,vip:10.11.5.145。 

四.验证

1)查看marathon&mesoso ui

(1)marathon
ui显示web服务都是”Running”状态,且服务名后带标签;

图片 10

(2)点击查看服务之切切实实信息,”Instances”标签中显示了2个instance容器部署之slave节点与照的端口信息(可以在切切实实的slave节点通过”docker
ps”命令查看),同时健康检查状态正常;

图片 11

(3)
“Configuration”标签中有显示服务的切切实实配置信息,同json文件,关注标红框的”servicePort”是10002,此服务端口是任意分配的,可经过marathon-lb所当节点的ip+port的办法访服务,而无是访问单独的有instance节点提供的服务;

图片 12

(4)mesos
ui展示显示web服务之点滴只instance任务已经下。

图片 13

3)配置marathon调用mesos运行docker

[root@slave-node1 src]# cd ~
[root@slave-node1 ~]# echo "docker,mesos" > /etc/mesos-slave/containerizers

1. 准备marathon-lb镜像

#在3个slave节点提前准备镜像,以节省容器部署时间
[root@slave-node1 ~]# docker pull mesosphere/marathon-lb
[root@slave-node1 ~]# docker images

图片 14

4)mesos-master配置quorum&work_dir

#quorum设置为整数,且大于master节点数的1/2
[root@master-node1 ~]# echo "2" > /etc/mesos-master/quorum

#work_dir也在/etc/mesos-master/目录下,保持默认值即可
[root@master-node1 ~]# cat /etc/mesos-master/work_dir 
/var/lib/mesos 
  1. Marathon-lb介绍:https://docs.mesosphere.com/1.9/networking/marathon-lb/
  2. 参考:http://www.cnblogs.com/kevingrace/p/6845980.html
  3. 依据脚本实现服务由发现跟负载均衡(供参考,marathon-lb之前的方案):

    http://dockone.io/article/439

    https://github.com/draculavlad/SetUpMesosphereOnCentos7WithServiceDiscovery/

2)mesos-slave关联zookeeper

[root@slave-node1 src]# cd ~

#完全替换默认配置
[root@slave-node1 ~]# vim /etc/mesos/zk
zk://10.11.4.156:2181,10.11.4.157:2181,10.11.4.158:2181/mesos

四.keepalived高可用配置

于marathon-lb或者其后端的real-server来说,对外提供的劳动都凭借marathon-lb容器所在slave节点本身的ip,虽然marathon能长期保持服务在线,但对外提供劳动的ip的转变还是要高可用之装,这里以keepalived实现,vip:10.11.4.145。

Keepalived服务需设置配置于具有marathon-lb可能发至之slave节点。

1)安装mesos-slave

[root@slave-node1 ~]# cd /usr/local/src/
[root@slave-node1 src]# wget http://repos.mesosphere.io/el/7/noarch/RPMS/mesosphere-el-repo-7-3.noarch.rpm
[root@slave-node1 src]# rpm -ivh mesosphere-el-repo-7-3.noarch.rpm
[root@slave-node1 src]# yum install mesos -y

3. marathon-lb检测脚本

#根据配置文件中的配置设定检测脚本
[root@slave-node1 ~]# touch /usr/local/keepalived/etc/chk_marathonlb.sh
[root@slave-node1 ~]# chmod +x /usr/local/keepalived/etc/chk_marathonlb.sh
[root@slave-node1 ~]# vim /usr/local/keepalived/etc/chk_marathonlb.sh

#!/bin/bash
# check if thers is a matathon-lb container running, then this is a keepalived master.
# 2017-09-18 v0.1 

MARATHONLB_LOG="/tmp/marathon-lb.log"

MARATHONLB=`netstat -tunlp | grep "haproxy" | grep ":80" | awk '{print $4}' | awk  'BEGIN{FS=":"} {print $2}'`

#检测marathon-lb服务的80端口,若存在则返回”0”,不存在返回”1”;
#记录日志,非必须项
if [ ${MARATHONLB} -eq 80 ]; then
     echo -e "`date +%F\ %T`: Matathon-lb is here, exit!\n" >> $MARATHONLB_LOG
     exit 0

else
     echo -e "`date +%F\ %T`: Matathon-lb is not here, the keepalived weight will be downgraded." >> $MARATHONLB_LOG
     exit 1
fi

2)通过marathon web页面手工创建

  • (1). 点击marathon首页右上比赛的”Create
    Application”,选择”JSON
    Mode”,粘帖相关json配置,实质上马上吗是当调用marathon的api接口,只是输入变为web页面;

图片 15

  • (2). 取消”JSON
    Mode”,可以观看粘帖的json配置都给记录下来;也堪一直以不”JSON
    Mode”填写相关部署。

图片 16

图片 17

图片 18

 

3. 验证

2. mesos-master&marathon安装配备

5. 查看haproxy

4)mesos state

浏览器访问:http://10.11.4.158:5050/master/state

三.验证自动发现及负载均衡

通过配备nginx服务得证实自动发现同负载均衡两件功能。

1)mesos-homepage

  • (1).
    从首页可以见到mesos-master的leader是:10.11.4.157;

  • (2). mesos-agent:activated状态的agent有3个;

  • (3). mesos-master管理的3独agent的资源已集中。

图片 19

3. 下发marathon-lb容器

3)marathon连接mesos-master

#默认marathon无相关配置master文件
[root@master-node1 ~]# vim /etc/marathon/conf/master
zk://10.11.4.156:2181,10.11.4.157:2181,10.11.4.158:2181/mesos 

2. keepalived配置文件

#各slave节点的keepalived配置文件根据情况做微小调整
[root@slave-node1 ~]# vim /usr/local/keepalived/etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {
   notification_email {
     root@localhost.local
   }
   notification_email_from root@localhost.local
   smtp_server 10.11.4.146
   smtp_connect_timeout 30
   router_id MARATHON_DEVEL
}

vrrp_script chk_marathonlb {
    script "/usr/local/keepalived/etc/chk_marathonlb.sh"
    interval 1
    weight 2          //脚本检测返回值为”0”时,权重上升
    rise 1
}

vrrp_instance VI_1 {
    state BACKUP
    interface br0
    virtual_router_id 201
    priority 101
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 987654
    }
    virtual_ipaddress {
        10.11.4.145
    }
    track_script {
        chk_marathonlb
    }
}

1. docker安装配置

[root@slave-node1 ~]# yum remove docker docker-common docker-selinux docker-engine

#镜像驱动使用device-mapper
[root@slave-node1 ~]# yum install -y yum-utils device-mapper-persistent-data lvm2

#添加repository
[root@slave-node1 ~]# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
[root@slave-node1 ~]# yum makecache fast

[root@slave-node1 ~]# yum install docker-ce -y

#配置mirror
[root@slave-node1 ~]# curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://xxxxxxxx.m.daocloud.io

#安装brctl,方便查看bridge 
[root@slave-node1 ~]# yum install bridge-utils-1.5-9.el7.x86_64 -y

#开机启动
[root@slave-node1 ~]# systemctl enable docker
[root@slave-node1 ~]# systemctl start docker

4. 验证

5)开机启动

[root@slave-node1 ~]# systemctl enable mesos-slave
[root@slave-node1 ~]# systemctl disable mesos-master
[root@slave-node1 ~]# systemctl start mesos-slave

一.环境

2. 拓扑说明

主机名

IP

OS

安装服务

master-node1

10.11.4.156

CentOS-7-x86_64-1511

zookeeper, mesos-master, marathon

master-node2

10.11.4.157

CentOS-7-x86_64-1511

zookeeper, mesos-master, marathon

master-node3

10.11.4.158

CentOS-7-x86_64-1511

zookeeper, mesos-master, marathon

slave-node1

10.11.4.146

CentOS-7-x86_64-1511

mesos-slave, docker

slave-node2

10.11.4.147

CentOS-7-x86_64-1511

mesos-slave, docker

slave-node3

10.11.4.148

CentOS-7-x86_64-1511

mesos-slave, docker

1)设置iptables

#marathon-lb生成的haproxy容器映射到宿主机的tcp 9090端口,可以在相应宿主机通过”netstat -tunlp | grep haproxy”查看;
#需要在所有的宿主机,即slave节点放行tcp 9090端口,因为在没有指定特定主机的时候(在slave启动参数中设置机器属性 --attributes=VALUE),通过marathon下发的marathon-lb容器是随机下发到任意slave节点的;
#不重启iptables,如果重启则docker daemon也需要重启,否则iptables相关的docker的forward规则会丢失;或者在没有容器的情况下提前放行相应端口再做容器相关操作
[root@slave-node1 ~]# iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport 9090 -j ACCEPT

1)marathon-homepage

  • (1). 在首页中点击右侧上比问号,选择”About”;

图片 20

  • (2). marathon-leader:10.11.4.157:8080;
  • (3). marathon连接到mesos
    leader:10.11.4.157:5050。

图片 21

1. 编生成nginx服务的json文件

#在任意marathon master节点上编写json文件
[root@master-node1 ~]# vim marathon-nginx.json

#“labels”中的“HAPROXY_GROUP”,与相关的marathon-lb绑定即可,“group”在下发marathon-lb容器时已经定义;
#“labels”中"HAPROXY_0_VHOST"主要起标签作用;对于web服务可以加上VHOST标签,让marathon-lb设置WEB虚拟主机;标签名字自定义,目的是为了便于区别应用容器,一般可以用业务域名来描述标签;
#"instances",实例数;
#"healthChecks",对应示例健康状态检测点;
#"portMappings"中的"containerPort"是容器应用端口;"hostPort"是映射的宿主机的端口(设置为”0”即随机);"servicePort"是marathon-lb配置的haproxy代理端口(设置为”0”即随机),设置"servicePort"对一组实例服务非常有用;
{
  "id":"web",
  "labels": {
     "HAPROXY_GROUP":"external",
     "HAPROXY_0_VHOST":"web.nginx.com"
  },
  "cpus":0.2,
  "mem":20.0,
  "instances": 2,
  "healthChecks": [{ "path": "/" }],
  "container": {
    "type":"DOCKER",
    "docker": {
     "image": "nginx",
     "network": "BRIDGE",
     "portMappings":[{"containerPort":80,"hostPort":0,"servicePort":0,"protocol":"tcp"}]
    }
  }
}

3. 设置iptables

# tcp2181,2888,3888与zookeeper相关;
# tcp5050是mesos-master的访问端口;tcp5051是mesos-slave的访问端口;
# tcp8080是marathon的访问端口。
[root@master-node1 ~]# vim /etc/sysconfig/iptables
-A INPUT -p tcp -m state --state NEW -m tcp --dport 2181 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 2888 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 3888 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 5050 -j ACCEPT
#-A INPUT -p tcp -m state --state NEW -m tcp --dport 5051 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 8080 -j ACCEPT

[root@master-node1 ~]# service iptables restart

参考文档:

本文主要干基于zookeeper+mesos+marathon的docker集群管理平台的布操作,原理可见上面参考文档。 

二.部署marathon-lb

1. mesos

登陆mesos
web:http://10.11.4.156:5050

#登陆10.11.4.157/158都好,通过zookeeper选主,登陆任一地方都见面超越反到leader页面。

1)方式1:通过curl调用json配置

#调用保存有json文件的maste节点8080端口下的json文件,即调用marathon的api
[root@master-node1 ~]# curl -X POST http://10.11.4.156:8080/v2/apps -d@/root/marathon-lb.json -H "Content-type:application/json"

3. marathon颁发应用

2)方式2:通过marathon web下发json配置

图片 22

2)mesos-Frameworks

  • (1). 在mesos框架中,marathon框架已给识别,marathon的leader是:10.11.4.157;
  • (2). 虽然mesos-master与marathon的leader相同,但双边的leader是zookeeper独立选举的,并从未一直关联,是可不同的。

图片 23

2. 拓扑编写marathon-lb的json文件

#在任意marathon master节点上编写关于marathon-lb的json文件
[root@master-node1 ~]# vim marathon-lb.json

#”network”采用HOST模式,与宿主机共享namespace;
#”args”参数将3个marathon master节点的ip:8080都带上,即marahon的api接口地址,因为不确定marathon下发marathon-lb容器时,会下发到哪一台宿主机;
#”group”参数为”external”,可以定义多个不同的”group”(即不同的marathon-lb),针对不同的应用可以绑定到不同的”group”;
#请注意json文件的格式,如标点符号等,marathon web下的”JSON Mode”框有检查语法正确与否的功能。
{
  "id":"marathon-lb",
  "cpus": 1,
  "mem": 128,
  "instances": 1,
  "constraints": [["hostname", "UNIQUE"]],
  "container": {
  "type":"DOCKER",
  "docker": {
     "image": "mesosphere/marathon-lb",
     "privileged": true,
     "network": "HOST"
    }
  },
   "args": ["sse", "-m", "http://10.11.4.156:8080", "-m", "http://10.11.4.157:8080", "-m", "http://10.11.4.158:8080", "--group", "external"]
}

一.环境

2. 下发nginx服务

#采用上述方式1下发服务即可;
#nginx镜像已经提前准备
[root@master-node1 ~]# curl -X POST http://10.11.4.156:8080/v2/apps -d@/root/marathon-nginx.json -H "Content-type:application/json"

2. mesos-slave安装配置

 本文主要依据marathon-lb实现mesos+marathon平台的底劳务由发现及负载均衡。

参考文档:

1)启动并查阅vip

#验证过程中,marathon-lb所在的slave1节点宕机,marathon为了保持服务,将marathon-lb重新下发到在salve2节点
[root@slave-node2 ~]# systemctl daemon-reload
[root@slave-node2 ~]# systemctl restart keepalived
[root@slave-node2 ~]# ip a show br0

图片 24

三.Slave节点

盖slave-node1为例,slave-node2/node3配置根据环境微调。

1)marathon web

marathon-lb作为同栽丰富服务,已经发,运行正常,如下:

图片 25

marathon-lb已下到slave节点10.11.4.146:31187,如下:

图片 26

二.环境Master节点

因为master-node1为条例,master-node2/node3配置根据条件微调。

1. 安装keepalived

Keepalived服务要安装配备在所有marathon-lb可能发到之slave节点。

keepalived版本:keepalived-1.3.6

切切实实的安装步骤请见:http://www.cnblogs.com/netonline/p/7598744.html

PS:注意每keepalived节点之间打招呼采用组播,iptables需要放行组播或vrrp相关协商。

3. 软件版本

服务

版本

作用

zookeeper

3.4.10

保持各master之间的通信,选举leader

mesos-master

1.3.0

管理接入mesos的各个framework & slave,并将slave上的资源按照相应策略分配给framework

mesos-slave

1.3.0

任务执行节点

marathon

1.4.7

调度器,用于下发任务,可保持长应用

docker

17.06.1.ce

具体执行docker下发任务

3)访问haproxy提供的劳务

(1)访marathon-lb所当slave节点的10002端口(在marathon
ui服务之configuration可以查询分配的servicePort);

URL:http://10.11.4.146:10002

图片 27

图片 28

PS:10002端口需要在相应节点不另行开iptables的情下放行,可以实行iptables
-I INPUT -m state –state NEW -m tcp -p tcp –dport 10002 -j
ACCEPT

(2)查看marathon-lb
haproxy的配置;

URL:http://10.11.4.146:9090/_haproxy_getconfig

图片 29

PS:或者登陆到marathon-lb容器中查阅haproxy.cfg文件(效果等同)。

(3)翻marathon-lb
haproxy的状态页;

URL:http://10.11.4.146:9090/haproxy?stats

图片 30

3)mesos-Agents

  • (1). 在Agnets中可知看到3个agent;
  • (2). 同时能顾每个agent的资源;

图片 31

  • (3). 点击任一agent
    id,能观看又详尽的agent信息。

图片 32

2)访问服务

#web服务下的两个instance都被重置过,这里修改新instance容器的index.html文件
[root@slave-node2 ~]# echo "This is Nginx Server: 10.11.4.147:31288" > index.html
[root@slave-node2 ~]# docker cp /root/index.html 9489b51370fd:/usr/share/nginx/html
[root@slave-node2 ~]# echo "This is Nginx Server: 10.11.4.147:31646" > index.html
[root@slave-node2 ~]# docker cp /root/index.html 2aee995a6ce7:/usr/share/nginx/html

(1)访问vip的10002端口;

URL:http://10.11.4.145:10002

图片 33

图片 34

(2)通过vip访问marathon-lb状态页。

URL:http://10.11.4.145:9090/haproxy?stats

图片 35

  1. mesos:http://mesos.apache.org/
  2. mesosphere社区版:https://github.com/mesosphere/open-docs
  3. mesosphere仓库:https://github.com/mesosphere/open-docs/blob/master/downloads/mesos.md
  4. docker-ce安装:https://docs.docker.com/engine/installation/linux/docker-ce/centos/
  5. 原理&安装参考1:http://www.cnblogs.com/kevingrace/p/5685313.html
  6. 规律&安装参考2:http://www.xuliangwei.com/xubusi/422.html

2)访问容器instance提供的劳务

#可以先将2个nginx instance的web页面提前修改;
#如marathon ui展示,1个nginx容器在slave节点10.11.4.146:31005
#在10.11.4.146,即slave-node1节点编写index.html文件,使用”docker cp”将文件覆盖对应容器的默认web站点目录”/usr/share/nginx/html”下的index.html文件
[root@slave-node1 ~]# echo "This is Nginx Server: 10.11.4.146:31005" >> index.html
[root@slave-node1 ~]# docker cp /root/index.html 2c7448e2d185:/usr/share/nginx/html

图片 36

#如marathon ui展示,另1个nginx容器在slave节点10.11.4.147:31071;
#10.11.4.147,即slave-node2节点
[root@slave-node2 ~]# echo "This is Nginx Server: 10.11.4.147:31071" >> index.html
[root@slave-node2 ~]# docker cp /root/index.html 11060abfad4f:/usr/share/nginx/html

图片 37

6)开机启动

[root@master-node1 ~]# systemctl enable mesos-master marathon
[root@master-node1 ~]# systemctl disable mesos-slave
[root@master-node1 ~]# systemctl start mesos-master marathon

4)mesos-slave配置ip&hostname

#其余两个节点也配置本机地址即可
[root@slave-node1 ~]# echo "10.11.4.146" > /etc/mesos-slave/ip
[root@slave-node1 ~]# echo "10.11.4.146" > /etc/mesos-slave/hostname

#修改hosts
[root@master-node1 ~]# echo "10.11.4.146 slave-node1" >> /etc/hosts

5)mesos-master&marathon配置ip&hostname

#hostname直接配置的本机ip,是为了防止出现dns无法解析的问题;
#其余两个节点也配置本机地址即可
[root@master-node1 ~]# echo "10.11.4.156" > /etc/mesos-master/ip
[root@master-node1 ~]# echo "10.11.4.156" > /etc/mesos-master/hostname

#marathon配置hostname;
#其余两个节点也配置本机地址即可
[root@master-node1 ~]# echo "10.11.4.156" > /etc/marathon/conf/hostname

#修改hosts
[root@master-node1 ~]# echo "10.11.4.156 master-node1" >> /etc/hosts

1. 拓扑

图片 38

2)mesos-master&marathon关联zookeeper

[root@master-node1 src]# cd ~

#mesos-master选主;
#完全替换默认配置
[root@master-node1 ~]# vim /etc/mesos/zk
zk://10.11.4.156:2181,10.11.4.157:2181,10.11.4.158:2181/mesos

#marathon选主;
#默认marathon无相关配置目录/文件
[root@master-node1 ~]# mkdir -p /etc/marathon/conf/
[root@master-node1 ~]# vim /etc/marathon/conf/zk
zk://10.11.4.156:2181,10.11.4.157:2181,10.11.4.158:2181/marathon 

3. 设置iptables

# tcp5051是mesos-slave的访问端口。
[root@slave-node1 ~]# vim /etc/sysconfig/iptables
-A INPUT -p tcp -m state --state NEW -m tcp --dport 5051 -j ACCEPT

[root@slave-node1 ~]# service iptables restart

# iptabes重启后重新加载配置文件中的配置,默认配置中没有docker0网桥的nat表规则;
#重启docker将相关规则加载到iptables中,再保存规则到配置文件中;
#如果iptables中没有docker0网桥的nat表规则,在创建带有端口映射的容器时,会报错:"ExitCode": 128,iptables相关规则不能创建
[root@slave-node1 ~]# systemctl restart docker
[root@slave-node1 ~]# service iptables save