Docker 集群Swarm创建和Swarm Web管理

来源:互联网 发布:数易生日计算法 编辑:程序博客网 时间:2024/05/16 09:21

关于Docker Swarm更多的介绍请查看《Docker管理工具-Swarm部署记录》

 

一、环境配置

1、安装环境

# cat /etc/redhat-release CentOS Linux release 7.3.1611 (Core) # docker versionClient: Version:      1.12.3 API version:  1.24 Go version:   go1.6.3 Git commit:   6b644ec Built:         OS/Arch:      linux/amd64Server: Version:      1.12.3 API version:  1.24 Go version:   go1.6.3 Git commit:   6b644ec Built:         OS/Arch:      linux/amd64

2、安装iptables,并关闭firewall防火墙,

# yum install iptables-services -y &&  systemctl enable iptables &&  service iptables save# systemctl disable firewalld.service# systemctl stop firewalld.service

关闭firewall防火墙,如果不开启iptables nat,Docker容器将无法正常启动。

  • 运行 sudo iptables -L | grep DOCKER 若输出

    DOCKER     all  --  anywhere             anywhereChain DOCKER (1 references)

    则没问题。

  • 否则,运行 iptables-save > /etc/sysconfig/iptables 并编辑添加相应的内容:

    • *nat:PREROUTING ACCEPT [27:11935]:INPUT ACCEPT [0:0]:OUTPUT ACCEPT [598:57368]:POSTROUTING ACCEPT [591:57092]:DOCKER - [0:0]-A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER-A OUTPUT ! -d 127.0.0.0/8 -m addrtype --dst-type LOCAL -j DOCKER-A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADECOMMIT# Completed on Sun Sep 20 17:35:31 2015# Generated by iptables-save v1.4.21 on Sun Sep 20 17:35:31 2015*filter:INPUT ACCEPT [139291:461018923]:FORWARD ACCEPT [0:0]:OUTPUT ACCEPT [127386:5251162]:DOCKER - [0:0]-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 ACCEPTCOMMIT# Completed on Sun Sep 20 17:35:31 2015

 

3、所有主机节点docker开启2375监听,docker版本不同,配置方式不一样

vim /etc/sysconfig/docker

......OPTIONS='-H 0.0.0.0:2375 -H unix:///var/run/docker.sock'           //在OPTIONS参数项后面的''里添加内容

 

或者

# cat  /usr/lib/systemd/system/docker.service  |grep ExecStartExecStart=/usr/bin/dockerd   -H 0.0.0.0:2375  -H unix:///var/run/docker.sock

 

重启docker服务

systemctl daemon-reload    ##使配置文件生效systemctl restart docker

 

二、Swarm安装和集群创建

1、Swarm镜像下载

# docker pull swarm# docker imagesREPOSITORY          TAG                 IMAGE ID            CREATED             SIZEdocker.io/swarm     latest              36b1e23becab        4 months ago        15.85 MB

 

2、创建Swarm

# docker swarm init --advertise-addr  192.168.23.56:2377Swarm initialized: current node (4cejtuairtof6d0wjq88merwb) is now a manager.To add a worker to this swarm, run the following command:    docker swarm join \    --token SWMTKN-1-3kntv9pmgo1w2uk4yqk79v0lw0z35uw2k5j6rw7cns2v0xv3tn-2zqnn7e2zf1azaad2teeh9arw \    192.168.23.56:2377To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

上面命令执行后,该机器自动加入到swarm集群。这个会创建一个集群token,获取全球唯一的 token,作为集群唯一标识。后续将其他节点加入集群都会用到这个token值。

其中,--advertise-addr参数表示其它swarm中的worker节点使用此ip地址与manager联系。命令的输出包含了其它节点如何加入集群的命令。

 

3、添加集群节点

 

[root@kbsonlong ~]# docker swarm join \>     --token SWMTKN-1-3kntv9pmgo1w2uk4yqk79v0lw0z35uw2k5j6rw7cns2v0xv3tn-2zqnn7e2zf1azaad2teeh9arw \>     192.168.23.56:2377This node joined a swarm as a worker.

 

4、查看集群节点

[root@along ~]# docker node listID                           HOSTNAME     STATUS  AVAILABILITY  MANAGER STATUS4cejtuairtof6d0wjq88merwb *  along.party  Ready   Active        Leader9388mi6e3fnk9l70g24cljhr5    kbsonlong    Ready   Active
[root@along ~]# docker node listID                           HOSTNAME     STATUS  AVAILABILITY  MANAGER STATUS4cejtuairtof6d0wjq88merwb *  along.party  Ready   Active        Leader9388mi6e3fnk9l70g24cljhr5    kbsonlong    Ready   Active        //将kbsonlong  节点下线。如果要删除node1节点,命令是"docker node rm --force kbsonlong  "[root@along ~]# docker node update --availability drain kbsonlong  kbsonlong[root@along ~]# docker node listID                           HOSTNAME     STATUS  AVAILABILITY  MANAGER STATUS4cejtuairtof6d0wjq88merwb *  along.party  Ready   Active        Leader9388mi6e3fnk9l70g24cljhr5    kbsonlong    Ready   Drain         [root@along ~]#//可以看到kbsonlong节点状态变为Drain,那么该节点就不会接受task任务分发,就算之前已经接受的任务也会转移到别的节点上。 //再次修改为active状态(及将下线的节点再次上线)[root@along ~]# docker node update --availability active kbsonlongkbsonlong[root@along ~]# docker node listID                           HOSTNAME     STATUS  AVAILABILITY  MANAGER STATUS4cejtuairtof6d0wjq88merwb *  along.party  Ready   Active        Leader9388mi6e3fnk9l70g24cljhr5    kbsonlong    Ready   Active        [root@along ~]#

 

##关于Swarm更多的命令行操作,请查看《Docker管理工具-Swarm部署记录》

 

三、Swarm 的Web管理(Portainer、Shipyard、Docerkui)

1、Portainer安装

# docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer-d 参数以detach方式运行-p 将容器工作端口映射至物理机端口 HOST端口:容器端口-v 将容器目录挂载(映射)到物理机对应位置,这里指定通讯方式为sockportainer/portainer 为镜像名称portainner 也支持用TCP通讯,启动命令# docker run -d -p 9000:9000 portainer/portainer -H tcp://<REMOTE_HOST>:<REMOTE_PORT>

 

image

image

image

image

image

image

image

image

image

image

image

image

优点
  1. 支持容器管理、镜像管理
  2. 轻量级,消耗资源少
  3. 基于docker api,安全性高,可指定docker api端口,支持TLS证书认证。
  4. 支持权限分配
  5. 支持集群
缺点
  1. 功能不够强大。
  2. 容器创建后,无法通过后台增加端口。

 

 

2、Shipyard

一键安装脚本

curl -sSL https://shipyard-project.com/deploy | bash -s

注意:由于Shipyard使用shipyard-proxy代理容器,所以需要把docker配置的tcp 0.0.0.0:2375关闭

[root@kbsonlong ~]# docker ps -a |grep shi7122d3f37464        shipyard/shipyard:latest       "/bin/controller --de"   About an hour ago   Up About an hour    0.0.0.0:8080->8080/tcp                           shipyard-controllerb350b117d76d        swarm:latest                   "/swarm j --addr 172."   About an hour ago   Up About an hour    2375/tcp                                         shipyard-swarm-agenta7feb0759efe        swarm:latest                   "/swarm m --replicati"   About an hour ago   Up About an hour    2375/tcp                                         shipyard-swarm-manager3e784b0b2140        shipyard/docker-proxy:latest   "/usr/local/bin/run"     About an hour ago   Up About an hour    0.0.0.0:2375->2375/tcp                           shipyard-proxy49f9700f0811        alpine                         "sh"                     About an hour ago   Up About an hour                                                     shipyard-certs7fe4c0e821c1        microbox/etcd:latest           "/bin/etcd -addr 172."   About an hour ago   Up About an hour    0.0.0.0:4001->4001/tcp, 0.0.0.0:7001->7001/tcp   shipyard-discoverye3750c5de7e2        rethinkdb                      "rethinkdb --bind all"   About an hour ago   Up About an hour    8080/tcp, 28015/tcp, 29015/tcp                   shipyard-rethinkdb[root@kbsonlong ~]#

可以看到启动了7个Shipyard相关的容器

1、shipyard-rethinkdb  :数据存放

2、shipyard-discovery :自动发现

3、shipyard-certs:认证

4、shipyard-proxy:代理

5、shipyard-swarm-manager: swarm管理节点

6、shipyard-swarm-agent: swarm 工作节点 work

7、shipyard-controller:shipyard控制台,即Web页面

 

 

2、添加Swarm work节点,使用Shipyard时添加Swarm节点有点不一样

curl -sSL https://shipyard-project.com/deploy | ACTION=node DISCOVERY=etcd://10.0.1.10:4001 bash -s

 

ACTION

This controls the action for the deployment. Available options are:

  • deploy: Deploy a new Shipyard instance
  • upgrade: Upgrade an existing instance (note: you will need to pass the same environment variables as when you deployed to keep the same configuration)
  • node: Add current Docker engine as a new Swarm node in the cluster
  • remove: Completely removes Shipyard

 

DISCOVERY自动发现

etcd://10.0.1.10:4001  管理节点上的自动发现服务

:8080">:8080">:8080">:8080">http://<server_ip>:8080  admin/shipyard

image

image

image

image

image

优点:
  1. 支持镜像管理、容器管理。
  2. 支持控制台命令
  3. 容器资源消耗监控
  4. 支持集群swarm,可以随意增加节点
  5. 支持控制用户管理权限,可以设置某个容器对某个用户只读、管理权限。
  6. 有汉化版
缺点
  1. 启动容器较多,占用每个节点的一部分资源,

创建的Swarm集群无法使用Swarm service功能

原创粉丝点击