管理swarm(15) – 以swarm模式运行Docker Engine

当你首次安装并开始使用Docker Engine,默认情况下swarm模式是关闭的。当你激活swarm模式,你开始可以使用docker service命令来管理服务。
有两种方法来激活swarm模式:

  • 创建一个新的swarm,本文将介绍
  • 加入一个已存在的swarm
  • 当你在你本地机器运行docker engine的swarm模式,你可以基于你之前创建的镜像或其它可用镜像来创建和测试服务。在生产环境中,swarm模式提供了集群管理的容错功能来保持你服务一直可用。
    本文假设你已经在你机器安装了Docker Engine 1.12或更高版本。

    创建一个swarm

    当你运行创建swarm的命令,Docker Engine就开始以swarm模式运行了。
    执行docker swarm init命令在当前节点创建一个单节点的swarm。Docker Engine设置swarm的步骤为:

  • 切换当前节点进入swarm模式
  • 创建一个名为default的swarm
  • 将当前节点指定为该swarm的leader管理器节点。
  • 以机器主机名命名节点
  • 配置管理节点监听端口2377
  • 设置当前节点为Active状态,意味着当前节点可以接收来自调度器的任务
  • 创建一个内部的分布式数据存储来维护swarm的一致状态
  • 默认下为swarm生成一个自签名根CA证书
  • 默认下生成一个token用来worker和manager节点加入swarm
  • 创建一个名为ingress的覆盖网络用来发布服务端口,以连接swarm外部网络
  • docker swarm init命令的输出提供了worker节点加入swarm的命令:

    1. $ docker swarm init
    2. Swarm initialized: current node (dxn1zf6l61qsb1josjja83ngz) is now a manager.
    3.  
    4. To add a worker to this swarm, run the following command:
    5.  
    6.     docker swarm join \
    7.     --token SWMTKN-1-49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx14ie39trti4wxv-8vxv8rssmk743ojnwacrr2e7c \
    8.     192.168.99.100:2377
    9.  
    10. To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

    配置advertise地址

    管理节点使用一个advertise地址来允许swarm中的其它节点进入Swarmkit API和覆盖网络。其它节点必须能够通过advertise地址连接管理节点。
    如果你没有指定一个advertise地址,Docker会检查系统是否只有一个IP地址,如果是,Docker就使用这个IP地址监听2377端口。如果系统有多个IP地址,你就必须指定一个正确的–advertise-addr来启用内部管理间通信和覆盖网络。

    1. $ docker swarm init --advertise-addr <MANAGER-IP>

    注意有时候其它节点连接管理节点的地址不绑定在管理节点本身系统上,即使用ifconfig看不到能用于连接管理节点的地址时,也需要手动指定正确的advertise地址。例如在云服务器中有多个不同的区域,主机有用于内部通过的内部地址和用于外部通过的外部地址。在这种情况下,需要指定其它节点能连接管理节点的地址。

    查看join命令或更新swarm join token

    节点需要一个秘密token来加入swarm。worker节点用来加入swarm的token与manager节点的token不一样。节点只在加入swarm的时候使用token。当在一个节点加入swarm后更新token不会影响节点的swarm成员资格。更改token只是为了确保其它新的节点不能使用旧的token来尝试加入swarm。
    要获取用于worker节点加入swarm的token,执行:

    1. $ docker swarm join-token worker
    2.  
    3. To add a worker to this swarm, run the following command:
    4.  
    5.     docker swarm join \
    6.     --token SWMTKN-1-49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx14ie39trti4wxv-8vxv8rssmk743ojnwacrr2e7c \
    7.     192.168.99.100:2377
    8.  
    9. This node joined a swarm as a worker.

    要获取用于manager节点加入swarm的token,执行:

    1. $ docker swarm join-token manager
    2.  
    3. To add a worker to this swarm, run the following command:
    4.  
    5.     docker swarm join \
    6.     --token SWMTKN-1-49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx14ie39trti4wxv-8vxv8rssmk743ojnwacrr2e7c \
    7.     192.168.99.100:2377

    传递–quiet参数只打印token:

    1. $ docker swarm join-token --quiet worker
    2.  
    3. SWMTKN-1-49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx14ie39trti4wxv-8vxv8rssmk743ojnwacrr2e7c

    我们建议在以下情况来更新token:

  • 如果token不小心进入到了版本管理系统,群组聊天或打印到了日志文件中
  • 如果你怀疑节点已被入侵
  • 如果你想确保没有新的节点可以加入swarm
  • 除此之外,我们建议你定时的更新token。建议至少6个月更新一个token。
    运行swarm join-token –rotate以使旧token无效并生成新token。 指定更新的是worker节点token还是manager节点:

    1. $docker swarm join-token  --rotate worker
    2.  
    3. To add a worker to this swarm, run the following command:
    4.  
    5.     docker swarm join \
    6.     --token SWMTKN-1-2kscvs0zuymrsc9t0ocyy1rdns9dhaodvpl639j2bqx55uptag-ebmn5u927reawo27s3azntd44 \
    7.     172.17.0.2:2377
    标签:DockerSwarm 发布于:2019-11-20 06:46:21