美文网首页
Docker学习(10) Docker Swarm(上)

Docker学习(10) Docker Swarm(上)

作者: August________ | 来源:发表于2019-11-05 00:17 被阅读0次

Docker学习(10) Docker Swarm

  • Swarm有两个核心组件
    • 安全集群
    • 编排引擎

Docker Swarm——简介

  • Docker Swarm包含两个方面:
    1. 企业级的docker的安全集群
    2. 微服务应用的编排引擎

集群方面

  • 将一个或多个docker节点组织起来,使得用户能够以集群的方式管理
  • Swarm默认内置:
    • 分布式集群存储、加密网络、公用TLS、安全集群接入令牌、
    • 一套简化的数字证书管理的API
    • 用户可以添加或删除节点

编排方面:

  • 提供一套丰富的API使得部署和管理的微服务应用变得简单
  • 通过将应用定义在声明式配置文件中,可以使用原生的docker完成部署。
  • 可以执行滚动升级,回滚以及扩缩容操作。

Docker Swarm——详解

Swarm介绍

  • Swarm是由一个或多个docker节点组成的
  • 节点被分配为管理节点(Manager)或工作节点(Worker)
    • 管理节点负责集群的控制面——进行诸如监控集群状态、分发任务至工作节点
    • 工作节点负责接收管理节点的任务并执行。
  • Swarm的配置和状态信息保存在一套位于所有管理节点的分布式etcd数据库中,该数据库运行于内存中,并保存数据的最近状态。
  • Swarm使用的TLS进行通讯加密,节点认证和角色授权,在后台运行。

搭建Swarm安全集群

  • 3个管理节点和3个工作节点
主机名 IP
mgr1 192.168.13.138
mgr2 192.168.13.139
mgr3 192.168.13.140
wrk1 192.168.13.141
wrk2 192.168.13.142
wrk3 192.168.13.143
  • 每个节点安装docker,并且可以相互通信。配置域名解析
lhf@mgr1:~$ cat /etc/hosts
127.0.0.1   localhost
127.0.1.1   mgr1
mgr1            192.168.13.138
mgr2            192.168.13.139
mgr3        192.168.13.140
wrk1        192.168.13.141
wrk2        192.168.13.142
wrk3        192.168.13.143

  • 网络方面需要在路由器和防火墙开放端口
    • 2377/tcp:用于客户端与docker进行通讯
    • 7946/tcp与7946/udp:用于控制面gossip分发
    • 4789/udp:用于基于VXLAN的覆盖网络
  • 搭建Swarm称之为初始化Swarm,大体流程
    • 初始化第一个管理节点——加入额外的管理节点——加入工作节点
  1. 初始化一个全新的管理节点
  • 不包含任何swarm中的docker节点,称之为单引擎模式。一旦加入swarm集群,就切换到swarm模式
  • 将mgr1初始化为一个全新的swarm
lhf@mgr1:~$ docker swarm init \
> --advertise-addr 192.168.13.138:2377 \
> --listen-addr 192.168.13.138:2377
Swarm initialized: current node (jnx5231xf6jpjuqo5hyzjo5x4) is now a manager.

To add a worker to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-4melegr14a21wwq6rlxdh5rv7b6pynyqxpzfol4av05ezjs1ts-9kyktqukrh19zf3wv2coc3hld 192.168.13.138:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

  • docker swarm init 将自身设置为第一个管理节点。同时使用该节点启动swarm模式
  • --advertise-addr 指定其他节点来连接当前管理节点的IP和端口
  • --listen-addr 指定用于承载Swarm流量的IP和端口
  1. 列出swarm的节点
lhf@mgr1:~$ docker node ls
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
jnx5231xf6jpjuqo5hyzjo5x4 *   mgr1                Ready               Active              Leader              19.03.4

  1. 添加新的工作节点和管理节点
lhf@mgr1:~$ docker swarm join-token worker 
To add a worker to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-4melegr14a21wwq6rlxdh5rv7b6pynyqxpzfol4av05ezjs1ts-9kyktqukrh19zf3wv2coc3hld 192.168.13.138:2377

lhf@mgr1:~$ docker swarm  join-token manager
To add a manager to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-4melegr14a21wwq6rlxdh5rv7b6pynyqxpzfol4av05ezjs1ts-9624stu8q8fy2c46227704t9v 192.168.13.138:2377

  1. 登录到wrk1节点,使用包含工作节点接入Token的docker swarm join命令接入Swarm
lhf@wrk1:~$ docker swarm join \
> --token SWMTKN-1-4melegr14a21wwq6rlxdh5rv7b6pynyqxpzfol4av05ezjs1ts-9kyktqukrh19zf3wv2coc3hld \
> 192.168.13.138:2377 \
> --advertise-addr 192.168.13.141:2377 \
> --listen-addr 192.168.13.141:2377
This node joined a swarm as a worker.
  1. 在wrk2和wrk3重复上述操作将两个节点作为工作节点加入Swarm中
  • wrk2节点
lhf@wrk2:~$ docker swarm join \
> --token SWMTKN-1-4melegr14a21wwq6rlxdh5rv7b6pynyqxpzfol4av05ezjs1ts-9kyktqukrh19zf3wv2coc3hld \
> 192.168.13.138:2377 \
> --advertise-addr 192.168.13.142:2377 \
> --listen-addr 192.168.13.142:2377
This node joined a swarm as a worker.
  • wrk3节点
lhf@wrk3:~$ docker swarm join \
> --token SWMTKN-1-4melegr14a21wwq6rlxdh5rv7b6pynyqxpzfol4av05ezjs1ts-9kyktqukrh19zf3wv2coc3hld \
> 192.168.13.138:2377 \
> --advertise-addr 192.168.13.143:2377 \
> --listen-addr 192.168.13.143:2377
This node joined a swarm as a worker.
  1. 登录到mgr2节点,使用含有管理节点接入Token的docker swarm join命名,将该节点作为管理节点接入swarm中
liu@mgr2:~$ docker swarm join \
> --token SWMTKN-1-4melegr14a21wwq6rlxdh5rv7b6pynyqxpzfol4av05ezjs1ts-9624stu8q8fy2c46227704t9v \
> 192.168.13.138:2377 \
> --advertise-addr 192.168.13.139:2377 \
> --listen-addr 192.168.13.139:2377
This node joined a swarm as a manager.
  1. mgr3重复上述操作
lhf@mgr3:~$ docker swarm join \
> --token SWMTKN-1-4melegr14a21wwq6rlxdh5rv7b6pynyqxpzfol4av05ezjs1ts-9624stu8q8fy2c46227704t9v \
> 192.168.13.138:2377 \
> --advertise-addr 192.168.13.140:2377 \
> --listen-addr 192.168.13.140:2377
This node joined a swarm as a manager.
  1. 在任意管理节点列出swarm节点
liu@mgr2:~$ docker node ls
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
jnx5231xf6jpjuqo5hyzjo5x4     mgr1                Ready               Active              Leader              19.03.4
8fz1q5m545389ddzc7p78c5kz *   mgr2                Ready               Active              Reachable           19.03.4
paoy4urdcsjwwstrkvkekf7vu     mgr3                Ready               Active              Reachable           19.03.4
kpeq1aqk4s99fe5d5tv1mydsd     wrk1                Ready               Active                                  19.03.4
29jhfuheqfhfetwchyeyk3ohb     wrk2                Ready               Active                                  19.03.4
3d2zo2em16qij9tmdxo2k9cvv     wrk3                Ready               Active                                  19.03.4

  • MANAGER STATUS一列显示三个管理节点分别为"Leader"和"Reachable"

    *号表示当前在哪个节点执行的命令

Swarm管理节点高可用性(HA)

  • swarm管理节点内置了HA的特性——即使一个或多个节点发生故障,剩余的节点也会保持swarm的运转
  • Swarm实现了一种主从方式的多管理节点的HA——主节点(Leader)唯一对Swarm发送控制命令的节点
  • 部署HA的原则:
    • 部署奇数个管理节点
    • 不要部署太多管理节点
  • 部署奇数个管理节点有利于减少脑裂:假如有4个管理节点,当网络发生分区时,可能每个分区有两个管理节点,每个分区都知道曾经有4个人节点。但是当前网络仅有2个节点,每个分区不发指定其他两个节点是否正常运行,无法得知本分区是否掌握多数。

内置的Swarm的安全机制

  • Swarm集群内置的很多安全机制——提供了开箱即用的默认配置:CA设置、接入Token、公用TLS、加密集群存储、加密网络、解密节点ID

锁定Swarm

  • Docker提供了自动锁机制来锁定Swarm,强制要求重启的管理节点提供一个集群解码锁才有权接入集群

  • 在某个管理节点开启锁

liu@mgr2:~$ docker swarm update --autolock=true
Swarm updated.
To unlock a swarm manager after it restarts, run the `docker swarm unlock`
command and provide the following key:

    SWMKEY-1-7qbru6TtXAOrutSvSQIvP+lNgYTmGk05+avDIQEN4Pk

Please remember to store this key in a password manager, since without it you
will not be able to restart the manager.

  • 将解码锁保存起来

  • 重启某个管理节点,查看是否能够自动接入集群

lhf@mgr3:~$ sudo service docker restart
lhf@mgr3:~$ docker node ls
Error response from daemon: Swarm is encrypted and needs to be unlocked before it can be used. Please use "docker swarm unlock" to unlock it.
  • 执行docker swarm unlock 命令来重启管理节点解锁swarm,同时需要提供解码锁
lhf@mgr3:~$ docker swarm unlock
Please enter unlock key: 
lhf@mgr3:~$ docker node ls
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
jnx5231xf6jpjuqo5hyzjo5x4     mgr1                Ready               Active              Leader              19.03.4
8fz1q5m545389ddzc7p78c5kz     mgr2                Ready               Active              Reachable           19.03.4
paoy4urdcsjwwstrkvkekf7vu *   mgr3                Ready               Active              Reachable           19.03.4
kpeq1aqk4s99fe5d5tv1mydsd     wrk1                Ready               Active                                  19.03.4
29jhfuheqfhfetwchyeyk3ohb     wrk2                Ready               Active                                  19.03.4
3d2zo2em16qij9tmdxo2k9cvv     wrk3                Ready               Active                                  19.03.4

相关文章

网友评论

      本文标题:Docker学习(10) Docker Swarm(上)

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