在 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'' 上的活动网络接口。
  • 将当前节点设置为Activeavailability 的 AVAILABILITY,这意味着它可以接收任务 从调度程序。
  • 为参与 swarm 来保持 swarm 及其上运行的所有服务的一致视图。
  • 默认情况下,为 swarm 生成自签名根 CA。
  • 默认情况下,为 worker 和 manager 节点生成令牌以加入 群。
  • 创建一个名为ingress用于发布服务端口 在 Swarm 外部。
  • 为您的网络创建覆盖默认 IP 地址和子网掩码

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

$ 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 模式使用默认地址池10.0.0.0/8用于 Global Range (Overlay) 网络。每 未指定子网的网络将从此池中按顺序分配一个子网。在 在某些情况下,可能需要为网络使用不同的默认 IP 地址池。

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

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

Docker 从--default-addr-pool选择。例如,命令行选项--default-addr-pool 10.10.0.0/16表示 Docker 将从该/16address 范围。如果--default-addr-pool-mask-len未指定或显式设置为 24,这将导致 256/24形式的网络10.10.X.0/24.

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

命令的格式为:

$ 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 类)为10.20.0.0network 看起来像这样:

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

用于创建默认 IP 地址池的命令/16(B 类)的10.20.0.010.30.0.0networks 和 创建/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 net1将导致10.20.0.0/26作为net1, 和docker network create -d overlay net2将导致10.20.0.64/26作为net2.这种情况一直持续到 所有子网都已耗尽。

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

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

配置播发地址

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

如果您未指定通告地址,Docker 会检查系统是否具有 单个 IP 地址。如果是这样,Docker 会将 IP 地址与侦听端口一起使用2377默认情况下。如果系统有多个 IP 地址,则必须指定 正确--advertise-addr启用 Manager 间通信和叠加 联网:

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

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

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

查看 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

--quietflag 以仅打印令牌:

$ docker swarm join-token --quiet worker

SWMTKN-1-49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx14ie39trti4wxv-8vxv8rssmk743ojnwacrr2e7c

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

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

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

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

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

$ 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

了解更多信息