• Docker集群管理(一)—— 基础docker+swarm+shipyard


    目的

    学习docker的集群管理,摸索出高可用的docker微服务架构方案。本篇文章只初步的了解下swarm(docker新版已集成了swarm)的使用,了解docker的发现服务的基础方法(docker hub 提供的内置方法,其他的比如:etcd、consul、zookeeper)

    环境

    三台虚拟主机:
    192.168.139.128 (master,node1)

    192.168.139.129(node2)

    192.168.138.130(node3)

    操作系统:centos7.3

    Docker version 1.13.1, build 092cba3

    一、安装Docker

    docker的安装(略)
    由于后面的shipyard需要docker的tcp方式访问,需要修改docker的配置:

    vi /lib/systemd/system/docker.service
    

    修改 ExecStart:

    ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock -D -H tcp://0.0.0.0:2375
    

    重启docker

    systemctl daemon-reload
    systemctl start docker.service
    

    当然实际用于生产环境这种方式并不安全,可用于测试。新版本doker swarm 支持TSL安全方式,后面的文章会讲到。

    二、安装Swarm

    swarm是一个docker集群管理工具。(swarm is a simple tool which controls a cluster of Docker hosts and exposes it as a single "virtual" host.)

    1.拉取镜像

    swarm官方镜像
    rethinkdb官方镜像

    docker pull swarm
    

    2.配Swarm集群

    在任意的docker节点创建一个全世界唯一的token(集群ID),记住这个token后面需要用到。(这里用的发现服务是dockhub内置的,当然还有其他的比如etcd、consul等。)

    docker run --rm swarm create
    

    我这里获取到的token是:3c739bd3a589da0788978f502ea318ea

    启动swarm manger

    docker run -ti -d -p 2376:2375 --restart=always --name shipyard-swarm-manager swarm:latest manage --host tcp://0.0.0.0:2375 token://3c739bd3a589da0788978f502ea318ea
    

    启动swarm agent,将当前docker节点加入到集群中:

    这里我把三台服务器(VM)加入节点到集群,在每个docker节点上分开执行。

    docker run -ti -d --restart=always --name shipyard-swarm-agent swarm:latest join --addr 192.168.139.128:2375 token://3c739bd3a589da0788978f502ea318ea
    
    docker run -ti -d --restart=always --name shipyard-swarm-agent swarm:latest join --addr 192.168.139.129:2375 token://3c739bd3a589da0788978f502ea318ea
    
    docker run -ti -d --restart=always --name shipyard-swarm-agent swarm:latest join --addr 192.168.139.130:2375 token://3c739bd3a589da0788978f502ea318ea
    

    可以使用命令查看docker节点情况(任意docker节点上都可以执行):

    docker run --rm swarm list token://3c739bd3a589da0788978f502ea318ea
    

    可以使用命令查看docker集群的详情(可在任意docker节点上执行,IP地址是装了swarm master主机的IP):

    docker -H 192.168.139.128:2376 info
    

    三、安装Shipyard

    1.拉取镜像

    docker pull rethinkdb
    docker pull shipyard/shipyard
    

    2.启动rethinkdb

    docker run -ti -d --restart=always --name shipyard-rethinkdb -p 8082:8080 -p 28015:28015 -p 29015:29015 -v /opt/rethinkdb:/data rethinkdb
    

    这里暴露8082端口用于查看rethinkdb的使用情况:打开http://192.168.139.128:8082显示如下:

    4.启动shipyard

    docker run -ti -d --restart=always --name shipyard-controller --link shipyard-rethinkdb:rethinkdb --link shipyard-swarm-manager:swarm -p 8081:8080 shipyard/shipyard server -d tcp://swarm:2375
    

    访问http://192.168.138.128::8001 可打开swarm的管理界面了
    查看容器:
    容器
    查看镜像:
    镜像
    查看节点:
    节点

    可能遇到的问题

    1.访问shipyard管理界面时候打不开?

    答:由于采用了rethinkdb数据库,数据库未准备好之前是不能打开的,需要等大约1分钟。

    2.shipyard能打开,但是没有容器和镜像?

    答:需要设置防火墙或关闭防火墙。

      firewall-cmd --zone=public --permanent --add-port=2375/tcp
      firewall-cmd --reload
    

    3.在shipyard中找不到某些docker节点?

    答:可能由于访问discovery.hub.docker.com的网络不稳定原因(超时),尝试重启swarm agent容器。

    ERRO[0011] Post https://discovery.hub.docker.com/v1/clusters/3c739bd3a589da0788978f502ea318ea?ttl=180: net/http: TLS handshake timeout
    

    答:需要设置防火墙或关闭防火墙。

    还需要解决的问题

    • 发现服务不稳定,尝试使用其他发现服务(etcd、consul、zookeeper).
    • 使用新版Docker内置的swarm的创建集群
    • 使用Docker的STL安全连接
    • 实现Docker集群的高可用架构(生产环境)
  • 相关阅读:
    BZOJ1912 [Apio2010]patrol 巡逻
    BZOJ2432 [Noi2011]兔农
    BZOJ1010 [HNOI2008]玩具装箱toy
    BZOJ3240 [Noi2013]矩阵游戏
    洛谷【P1303】A*B Problem
    洛谷【2142】高精度减法
    洛谷【P1100】高低位交换
    OIer应该知道的二进制知识
    洛谷【P3908】异或之和
    洛谷【P2431】正妹吃月饼
  • 原文地址:https://www.cnblogs.com/ikodota/p/docker_swarm_shipyard.html
Copyright © 2020-2023  润新知