美文网首页
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