在 swarm 模式下运行 Docker Engine

当您首次安装并开始使用 Docker Engine 时,Swarm 模式是 默认情况下处于禁用状态。启用 Swarm 模式时,您将使用 通过命令管理的服务。docker service

有两种方法可以在 Swarm 模式下运行引擎:

在本地计算机上以 Swarm 模式运行引擎时,您可以创建并 根据您创建的镜像或其他可用镜像测试服务。在 您的生产环境中,Swarm 模式提供了一个容错平台,其中包含 集群管理功能,让您的服务保持运行和可用。

这些说明假定您已在 一台用作 Swarm 中的管理器节点的计算机。

如果您尚未阅读 Swarm 模式关键概念,请通读 Swarm 模式教程

创建召集

当您运行命令创建 Swarm 时,Docker Engine 开始以 Swarm 模式运行。

运行 docker swarm init 在当前节点上创建单节点 swarm。引擎设置 swarm 如下:

  • 将当前节点切换到 Swarm 模式。
  • 创建名为 的 召集。default
  • 将当前节点指定为群的领导管理器节点。
  • 使用计算机主机名命名节点。
  • 将 Manager 配置为侦听端口 '2377'' 上的活动网络接口。
  • 将当前节点设置为 availability,这意味着它可以接收任务 从调度程序。Active
  • 为参与 swarm 来保持 swarm 及其上运行的所有服务的一致视图。
  • 默认情况下,为 swarm 生成自签名根 CA。
  • 默认情况下,为 worker 和 manager 节点生成令牌以加入 群。
  • 创建以发布服务端口命名的覆盖网络 在 Swarm 外部。ingress
  • 为您的网络创建覆盖默认 IP 地址和子网掩码

的输出提供了 connection 命令,以便在 您将新的 worker 节点加入 Swarm:docker swarm init

$ docker swarm init
Swarm initialized: current node (dxn1zf6l61qsb1josjja83ngz) is now a manager.

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

    docker swarm join \
    --token SWMTKN-1-49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx14ie39trti4wxv-8vxv8rssmk743ojnwacrr2e7c \
    192.168.99.100:2377

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

配置默认地址池

默认情况下,Swarm 模式对全局范围(覆盖)网络使用默认地址池。每 未指定子网的网络将从此池中按顺序分配一个子网。在 在某些情况下,可能需要为网络使用不同的默认 IP 地址池。10.0.0.0/8

例如,如果默认范围与网络中已分配的地址空间冲突,则 然后,最好确保网络使用不同的范围,而无需 Swarm 用户指定 每个子网替换为命令。10.0.0.0/8--subnet

要配置自定义默认地址池,必须在 swarm 初始化时使用命令行选项定义池。此命令行选项使用 CIDR 表示法来定义子网掩码。 要为 Swarm 创建自定义地址池,您必须定义至少一个默认地址池和一个可选的默认地址池子网掩码。例如,对于 ,请使用 值 。--default-addr-pool10.0.0.0/2727

Docker 从选项指定的地址范围分配子网地址。例如,命令行选项指示 Docker 将从该地址范围分配子网。如果未指定或显式设置为 24,则会导致 256 个形式的网络。--default-addr-pool--default-addr-pool 10.10.0.0/16/16--default-addr-pool-mask-len/2410.10.X.0/24

子网范围来自 , (如 )。其中的大小 16 表示可以在该范围内创建的网络数量。该选项可能会多次出现,每个选项都为 docker 提供额外的地址以用于覆盖子网。--default-addr-pool10.10.0.0/16default-addr-pool--default-addr-pool

命令的格式为:

$ docker swarm init --default-addr-pool <IP range in CIDR> [--default-addr-pool <IP range in CIDR> --default-addr-pool-mask-length <CIDR value>]

为网络创建具有 /16(B 类)的默认 IP 地址池的命令如下所示:10.20.0.0

$ docker swarm init --default-addr-pool 10.20.0.0/16

该命令用于为 和 networks 创建带有 a (B 类) 的默认 IP 地址池,并 为每个网络创建一个子网掩码,如下所示:/1610.20.0.010.30.0.0/26

$ docker swarm init --default-addr-pool 10.20.0.0/16 --default-addr-pool 10.30.0.0/16 --default-addr-pool-mask-length 26

在此示例中,将导致 作为 的分配子网 。 ,并将作为 分配的子网。这种情况一直持续到 所有子网都已耗尽。docker network create -d overlay net110.20.0.0/26net1docker network create -d overlay net210.20.0.64/26net2

有关更多信息,请参阅以下页面:

  • Swarm networking,了解有关默认地址池使用情况的更多信息
  • docker swarm init CLI 参考,了解有关该标志的更多详细信息。--default-addr-pool

配置播发地址

Manager 节点使用通告地址允许 swarm 中的其他节点访问 到 Swarmkit API 和覆盖网络。群中的其他节点必须为 能够访问其通告地址上的 Manager 节点。

如果您未指定通告地址,Docker 会检查系统是否具有 单个 IP 地址。如果是这样,Docker 默认使用带有侦听端口的 IP 地址。如果系统有多个 IP 地址,则必须指定 正确以启用管理器间通信和覆盖 联网:2377--advertise-addr

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

您还必须指定其他节点所在的地址 到达第一个 Manager 节点的地址不是 Manager 看到的地址 有。例如,在跨不同区域的云设置中,主机具有 用于区域内访问的内部地址和满足以下条件的外部地址 用于从该区域外部进行访问。在这种情况下,请指定外部 address 替换为 URL,以便节点可以传播该信息 连接到随后连接到它的其他节点。--advertise-addr--advertise-addr

有关通告地址的更多详细信息,请参阅 CLI 参考docker swarm init

查看 join 命令或更新 swarm join 令牌

节点需要 secret 令牌才能加入群。Worker 节点的 Token 是 与 Manager 节点的令牌不同。节点仅使用 他们加入蜂群的时刻。在节点已经轮换 join token 之后 加入 Swarm 不会影响节点的 Swarm 成员资格。代币轮换 确保任何尝试加入 群。

要检索 join 命令(包括 worker 节点的 join 令牌),请运行:

$ docker swarm join-token worker

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

    docker swarm join \
    --token SWMTKN-1-49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx14ie39trti4wxv-8vxv8rssmk743ojnwacrr2e7c \
    192.168.99.100:2377

This node joined a swarm as a worker.

要查看管理器节点的 join 命令和令牌,请运行:

$ docker swarm join-token manager

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

    docker swarm join \
    --token SWMTKN-1-59egwe8qangbzbqb3ryawxzk3jn97ifahlsrw01yar60pmkr90-bdjfnkcflhooyafetgjod97sz \
    192.168.99.100:2377

传递标志以仅打印令牌:--quiet

$ docker swarm join-token --quiet worker

SWMTKN-1-49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx14ie39trti4wxv-8vxv8rssmk743ojnwacrr2e7c

小心使用联接令牌,因为它们是联接所需的密钥 虫群。特别是,将 secret 签入版本控制是一个不好的 实践,因为它将允许任何有权访问应用程序源的人 代码将新节点添加到 Swarm。经理令牌特别敏感 因为它们允许新的 Manager 节点加入并获得对整个 群。

建议在以下情况下轮换加入令牌:

  • 如果令牌被意外签入到版本控制系统中,则组 chat 或不小心打印到您的日志中。
  • 如果您怀疑某个节点已被盗用。
  • 如果您希望保证没有新节点可以加入 swarm。

此外,最佳实践是实施定期轮换计划 任何密钥,包括 Swarm Join 令牌。我们建议您轮换代币 至少每 6 个月一次。

Run 使旧令牌失效并生成新的 令 牌。指定是否要轮换 或 节点的令牌:swarm join-token --rotateworkermanager

$ docker swarm join-token  --rotate worker

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

    docker swarm join \
    --token SWMTKN-1-2kscvs0zuymrsc9t0ocyy1rdns9dhaodvpl639j2bqx55uptag-ebmn5u927reawo27s3azntd44 \
    192.168.99.100:2377

了解更多信息