暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Docker swarm(3)部署服务

运维笔记本 2020-01-17
702

部署服务

我们使用 docker service
命令来管理 Swarm 集群中的服务,该命令只能在管理节点运行。

1.新建服务

进入集群管理节点:

    docker-machine ssh manager1


    使用 docker 中国镜像


    docker search alpine
    docker pull registry.docker-cn.com/library/alpine

    现在我们在上一节创建的 Swarm 集群中运行一个名为 helloworld 服务。

      docker@manager1:~$ docker service create --replicas 1 --name helloworld alpine ping ityouknow.com
      rwpw7eij4v6h6716jvqvpxbyv
      overall progress: 1 out of 1 tasks
      1/1: running [==================================================>]
      verify: Service converged

      命令解释:

      • docker service create 命令创建一个服务
      • --name 服务名称命名为 helloworld
      • --replicas 设置启动的示例数
      • alpine 指的是使用的镜像名称,ping ityouknow.com指的是容器运行的bash

      使用命令 docker service ps helloworld
      可以查看服务进展

        docker@manager1:~$ docker service ps helloworld
        ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
        rgroe3s9qa53 helloworld.1 alpine:latest worker1 Running Running about a minute ago

        使用 docker service ls
        来查看当前 Swarm 集群运行的服务。

          docker@manager1:~$ docker service ls
          ID NAME MODE REPLICAS IMAGE PORTS
          yzfmyggfky8c helloworld replicated 0/1 alpine:latest

          2.监控集群状态

          登录管理节点 manager1

          docker-machine ssh manager1

          运行 docker service inspect --pretty <SERVICE-ID>
          查询服务概要状态,以 helloworld 服务为例:

            docker@manager1:~$  docker service inspect --pretty helloworld


            ID: rwpw7eij4v6h6716jvqvpxbyv
            Name: helloworld
            Service Mode: Replicated
            Replicas: 1
            Placement:
            UpdateConfig:
            Parallelism: 1
            On failure: pause
            Monitoring Period: 5s
            Max failure ratio: 0
            ...
            Rollback order: stop-first
            ContainerSpec:
            Image: alpine:latest@sha256:7b848083f93822dd21b0a2f14a110bd99f6efb4b838d499df6d04a49d0debf8b
            Args: ping ityouknow.com
            Resources:
            Endpoint Mode: vip
            • 运行 docker service inspect helloworld
              查询服务详细信息, --pretty 格式化输出
            • 运行docker service ps <SERVICE-ID>
              查看那个节点正在运行服务:
              docker@manager1:~$  docker service ps helloworld
              NAME IMAGE NODE DESIRED STATE LAST STATE
              helloworld.1.8p1vev3fq5zm0mi8g0as41w35 alpine worker1 Running Running 3 minutes

              在工作节点查看任务的执行情况

                docker-machine ssh  worker1

                在节点执行docker ps 查看容器的运行状态。

                  docker@worker1:~$   docker ps
                  CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
                  96bf5b1d8010 alpine:latest "ping ityouknow.com" 4 minutes ago Up 4 minutes helloworld.1.rgroe3s9qa53lf4u4ky0tzcb8

                  这样的话,我们在 Swarm 集群中成功的运行了一个 helloworld 服务,根据命令可以看出在 worker1 节点上运行。

                  3.弹性伸缩实验

                  我们来做一组实验来感受 Swarm 强大的动态水平扩展特性,首先动态调整服务实例个数。

                  调整实例个数

                  增加或者减少服务的节点数

                  调整 helloworld 的服务实例数为2个

                    docker service update --replicas 2 helloworld

                    查看那个节点正在运行服务:

                      docker service ps helloworld
                      ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
                      rgroe3s9qa53 helloworld.1 alpine:latest manager1 Running Running 8 minutes ago
                      a61nqrmfhyrl helloworld.2 alpine:latest worker2 Running Running 9 seconds ago

                      调整 helloworld 的服务实例数为1个

                        docker service update --replicas 1 helloworld

                        再次查看节点运行情况:

                          docker service ps helloworld
                          ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
                          a61nqrmfhyrl helloworld.2 alpine:latest worker2 Running Running about a minute ago

                          再次调整 helloworld 的服务实例数为3个

                            docker service update --replicas 3 helloworld
                            helloworld
                            overall progress: 3 out of 3 tasks
                            1/3: running [==================================================>]
                            2/3: running [==================================================>]
                            3/3: running [==================================================>]
                            verify: Service converged

                            查看节点运行情况:

                              docker@manager1:~$ docker service ps helloworld
                              ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
                              mh7ipjn74o0d helloworld.1 alpine:latest worker2 Running Running 40 seconds ago
                              1w4p9okvz0xw helloworld.2 alpine:latest manager1 Running Running 2 minutes ago
                              snqrbnh4k94y helloworld.3 alpine:latest worker1 Running Running 32 seconds ago

                              删除集群服务

                                docker service rm helloworld

                                4.总结

                                通过对 Swarm 的学习,强烈感觉到自动化水平扩展的魅力,这样在公司流量爆发的时候,只需要执行一个命令就可以完成实例上线。如果再根据公司的业务流量做自动化控制,那就真正实现了完全自动的动态伸缩。

                                举个例子,我们可以利用脚本监控公司的业务流量,当流量是某个级别的时候我们启动对应的N个节点数,当流量减少的时候我们也动态的减少服务实例个数,既可以节省公司资源,也不用操心业务爆发被流量击垮。Docker 能发展的这么好还是有原因的,容器化是 DevOps 最重要的一个环节,未来容器化的技术会越来越丰富和完善,智能化运维可期待。

                                在运行爬虫程序的时候可以使用Docker Swarm搭建分布式爬虫集群

                                《使用Docker Swarm搭建分布式爬虫集群》


                                最后修改时间:2020-01-18 12:18:49
                                文章转载自运维笔记本,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                                评论