zoukankan      html  css  js  c++  java
  • Docker 集群Swarm创建和Swarm Web管理

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

    一、环境配置

    1、安装环境

    # cat /etc/redhat-release 
    CentOS Linux release 7.3.1611 (Core) 
    # docker version
    Client:
     Version:      1.12.3
     API version:  1.24
     Go version:   go1.6.3
     Git commit:   6b644ec
     Built:        
     OS/Arch:      linux/amd64
    
    Server:
     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             anywhere
      Chain 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 MASQUERADE
        COMMIT
        # 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 ACCEPT
        COMMIT
        # 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 ExecStart
    ExecStart=/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 images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    docker.io/swarm     latest              36b1e23becab        4 months ago        15.85 MB

    2、创建Swarm

    # docker swarm init --advertise-addr  192.168.23.56:2377
    Swarm 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:2377
    
    To 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:2377
    This node joined a swarm as a worker.

    4、查看集群节点

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

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

    三、Swarm 的Web管理(PortainerShipyard、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 将容器目录挂载(映射)到物理机对应位置,这里指定通讯方式为sock
    portainer/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 shi
    7122d3f37464        shipyard/shipyard:latest       "/bin/controller --de"   About an hour ago   Up About an hour    0.0.0.0:8080->8080/tcp                           shipyard-controller
    b350b117d76d        swarm:latest                   "/swarm j --addr 172."   About an hour ago   Up About an hour    2375/tcp                                         shipyard-swarm-agent
    a7feb0759efe        swarm:latest                   "/swarm m --replicati"   About an hour ago   Up About an hour    2375/tcp                                         shipyard-swarm-manager
    3e784b0b2140        shipyard/docker-proxy:latest   "/usr/local/bin/run"     About an hour ago   Up About an hour    0.0.0.0:2375->2375/tcp                           shipyard-proxy
    49f9700f0811        alpine                         "sh"                     About an hour ago   Up About an hour                                                     shipyard-certs
    7fe4c0e821c1        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-discovery
    e3750c5de7e2        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功能

  • 相关阅读:
    14_java之变量|参数|返回值|修饰符
    NYOJ 202 红黑树 (二叉树)
    NYOJ 138 找球号(二) (哈希)
    NYOJ 136 等式 (哈希)
    NYOJ 133 子序列 (离散化)
    NYOJ 129 树的判定 (并查集)
    NYOJ 117 求逆序数 (树状数组)
    NYOJ 93 汉诺塔 (数学)
    HDU 2050 折线分割平面 (数学)
    天梯赛L2-008 最长对称子串 (字符串处理)
  • 原文地址:https://www.cnblogs.com/adolfmc/p/9007115.html
Copyright © 2011-2022 走看看