美文网首页
Docker Swarm集群管理/容器编排

Docker Swarm集群管理/容器编排

作者: DDDDAIPING | 来源:发表于2019-09-29 10:21 被阅读0次
    • Swarm是一个Docker(现在叫Moby)官方提供的一个安全的docker容器集群管理工具,一个微服务应用编排引擎。它通过将容器(container)抽象为服务(service),从而使多个节点(node)成为一个整体对外进行服务。
    • 实现中所使用的镜像及项目git地址:https://github.com/zydp/WeatherInfos

    以下实验是我在本地环境中,对swarm集群进行一些常规的操作。

    • 我的测试环境

    IP: 192.168.6.75 HostName: cs-compiler Role: leader
    IP: 192.168.6.103 HostName: machine12 Role: worker
    IP: 192.168.6.93 HostName: machine13 Role: worker

    • 准备工作
      首先将3台测试机器docker daemon安装好,并确保测试机之间相互能够访问。
      防火墙上提前打开端口:

    2377/tcp 用于客户端与 Swarm 进行安全通信
    7946/tcp 用于控制面 gossip 分发
    7946/udp 用于控制面 gossip 分发
    4789/udp 用于基于 VXLAN 的覆盖网络

    • 防火墙操作命令

    firewall-cmd --zone=public --add-port=2377/tcp --permanent
    firewall-cmd --zone=public --add-port=7946/tcp --permanent
    firewall-cmd --zone=public --add-port=7946/udp --permanent
    firewall-cmd --zone=public --add-port=4789/udp --permanent
    firewall-cmd --reload

    • 在leader上进行swarm集群的初始化
      docker swarm init --advertise-addr 192.168.6.75     // --advertise-addr 集群的交互地址

      swarm初始化输出
    • 图中提到两点,为集群添加worker使用命令:
      docker swarm join --token SWMTKN-1-2abkt4nbd49eop3jurvdiu27iweak5801fnwu52rvn8tx3ov7y-1pag0z4e2jchm4fgfxwsjt9h5 192.168.6.75:2377

    • 为集群添加manager,执行docker swarm join-token manager并根据提示操作
      添加集群worker或是manager是跟据对应不同的join-token去分辨的,我的测试环境中,只预备一台manager。因此,此处不对添加manager进行探讨

    • 使用 docker node ls 查看集群中的节点

      节点状态
    • 可以看到此时集群中只有一个可用的节点,使用命令将另外两台worker也加入到集群中

    worker1: machine12 machine12 worker2:machine13 machine13
    • 加入worker以后的集群节点状态 节点状态
    • 此时我们可以为该集群创建service并对外提供调用服务了

    docker service create --name weather -p 3244:3244 erfengd/weather:latest
    --name 指定服务的名称
    -p    指定对外提供服务的端口
    erfengd/weather 镜像名
    该条命令大意为:使用镜像erfengd/weather创建一个命为weather的服务,该服务使用物理机的3244端口映射到容器的3244端口。 erfengd/weather是我提交到docker-hub的一个天气数据查询的镜像,开箱即用。

    创建service
    • 查看服务状态 docker service ls & docker service ps weather

    docker service ls  查看集群中服务的列表
    docker service ps weather 查看单个服务的概况

    查看服务状态 注意
      当service创建成功时,创建命令中使用-p 所指定的端口,在集群中 所有节点 上都会被占用。 
    worker1 worker2
    并且在manager上,此时已有一个容器在运行中。该容器使用创建服务时所指定的镜像创建 工作容器
    • 扩展集群副本
        通过图<查看服务状态>可以看到,此时该集群中只有一个service,且该service只有一个节点副本,该节点的hostname是cs-compiler,状态是Running。
        此时我们对该服务进行扩展,使用命令 docker service scale weather=3 。使用该命令将该服务的副本伸缩到3节点,如下图: 扩展节点副本 此时我们使用 docker service ls & docker service ps weather 查看service的状态: 扩展后的service状态
    • 下面我们对该集群服务进行测试
    1. 首先我们检索节点日志,以便得知该节点被请求。

    使用命令 docker exec [containerID] tail -f ./logs/wearth.log

    节点日志检索
    1. 使用测试工具Apache Jmeter 进行并发访问,用以监测swarm service对worker节点的调度是否均匀
    Apache Jmeter 请求详情 使用该测试用例,我们在5秒内对swarm中weather service 进行10*10*100次请求 //线程数*请求用例*循环次数 聚合报告 日志检索 从日志中可以看到,10000次请求被分配到weather service所涵盖的3个节点中,并且节点均工作正常。
    • 在这里顺道提一下docker swarm 的调度策略,swarm的调度策略共分三种:

    spread   优先选择CPU、MEM占用率底的节点(default)
    binpack    尽量的将某一个节点全占满(与spread相反)
    random   随机选择一个节点(多用在测试环境)
    在使用swarm manager时可以使用--strategy选项进行指定。官方传送门

    • 节点自动恢复(HA)

    使用命令docker stop e24db70fdbbd 在worker1(machine12)上停止容器后,docker swarm会瞬间再拉起一个容器进行恢复。使用docker ps -a查看容器,则可看到新服务被拉起的过程

    容器被拉起 在服务详情中,也可见到节点machine12掉线一次,且被恢复后machine12的状态为running
    service详情

    以上。

    相关文章

      网友评论

          本文标题:Docker Swarm集群管理/容器编排

          本文链接:https://www.haomeiwen.com/subject/qmjdyctx.html