• 云原生之容器化:Docker三剑客之Docker Swarm


    1、何谓Docker Swarm?

    Docker Swarm 是 Docker 的集群管理工具。它将 Docker 主机池转变为单个虚拟 Docker 主机。 Docker Swarm 提供了标准的 Docker API,所有任何已经与 Docker 守护程序通信的工具都可以使用 Swarm 轻松地扩展到多个主机。

    支持的工具包括但不限于以下各项:

    • Dokku
    • Docker Compose
    • Docker Machine
    • Jenkins

    2、原理

    如下图所示,swarm 集群由管理节点(manager)和工作节点(work node)构成。

    swarm mananger:负责整个集群的管理工作包括集群配置、服务管理等所有跟集群有关的工作。
    work node:即图中的 available node,主要负责运行相应的服务来执行任务(task)。
    
    • 1
    • 2

    在这里插入图片描述

    3、使用

    1、创建 swarm 集群管理节点(manager)

    环境:

    节点IP
    manager192.168.1.200
    node1192.168.1.211
    node2192.168.1.212

    初始化 swarm 集群,进行初始化的这台机器,就是集群的管理节点。

    docker-machine ssh swarm-manager
    docker swarm init --advertise-addr 192.168.1.200
    
    • 1
    • 2

    以上输出,证明已经初始化成功。需要把以下这行复制出来,在增加工作节点时会用到:

    docker swarm join --token SWMTKN-1-4oogo9qziq768dma0uh3j0z0m5twlm10iynvz7ixza96k6jh9p-ajkb6w7qd06y1e33yrgko64sk 192.168.1.200:2377

    2、创建 swarm 集群工作节点(worker)

    分别进入192.168.1.211和192.168.1.212两个机器里,指定添加至上一步中创建的集群,这里会用到上一步复制的内容。

    运行的命令如下:

    docker swarm join --token SWMTKN-1-4oogo9qziq768dma0uh3j0z0m5twlm10iynvz7ixza96k6jh9p-ajkb6w7qd06y1e33yrgko64sk 192.168.1.200:2377
    
    • 1

    3、查看集群信息

    进入管理节点,执行:docker info 可以查看当前集群的信息。

    docker info
    
    • 1

    在这里插入图片描述

    通过上图知道当前运行的集群中,有三个节点,其中有一个是管理节点。

    在管理节点查看集群信息

    docker node ls
    
    • 1

    在这里插入图片描述

    4、部署服务到集群中

    注意:跟集群管理有关的任何操作,都是在管理节点上操作的

    以下例子,在一个工作节点上创建一个名为 helloworld 的服务,这里是随机指派给一个工作节点:

    docker service create --replicas 1 --name helloworld alpine ping docker.com
    
    • 1

    5、查看服务部署情况

    查看 helloworld 服务运行在哪个节点上,可以看到目前是在 work1 节点:

    docker service ps helloworld
    
    • 1

    查看 helloworld 部署的具体信息:

    docker service inspect --pretty helloworld
    
    • 1

    6、扩展集群服务

    我们将上述的 helloworld 服务扩展到两个节点。

    docker service scale helloworld=2
    
    • 1

    查看是否扩展

    docker service ps helloworld
    
    • 1

    7、删除服务

    docker service rm helloworld
    
    • 1

    查看是否已删除:

    docker service ps helloworld
    
    • 1

    8、滚动升级服务

    以下实例,我们将介绍 nginx 版本如何滚动升级至更高版本。

    创建一个 1.15.1 版本的 nginx。

    docker service create --replicas 1 --name redis --update-delay 10s nginx:1.15.1
    
    • 1

    滚动升级 nginx 。

    docker service update --image nginx:1.16.0 nginx

    查看 nginx 的版本

    docker service ps nginx
    
    • 1

    9、停止某个节点接收新的任务

    查看所有的节点:

    docker node ls
    
    • 1

    在这里插入图片描述

    目前所有的节点都是 Active, 可以接收新的任务分配。

    停止节点 work1:

    docker node update --availability drain work1
    
    • 1

    注意:work1 状态变为 Drain。不会影响到集群的服务,只是 -work1 节点不再接收新的任务,集群的负载能力有所下降。

    可以通过以下命令重新激活节点:

    docker node update --availability active work1
    
    • 1
  • 相关阅读:
    从零学算法264
    潘多拉 IOT 开发板学习(RT-Thread)—— 实验1 LED 闪烁实验(学习笔记)
    宠物医院必备,介绍一款宠物疫苗接种管理软件
    选择振弦采集仪进行岩土工程监测时,根据不同工况选择合适的种类
    HTTP中的强缓存与协商缓存
    毫末速度:中国自动驾驶落地最快的1000天
    迅为RK3568开发板helloworld 驱动实验-驱动编写
    Java CC链全分析
    “MIME 媒体类型“用来标识网络传输内容的格式标准
    VUE+ts项目配置--alias别名配置
  • 原文地址:https://blog.csdn.net/flq18210105507/article/details/126261088