docker swarm英文文档学习-5-在swarm模式中运行Docker引擎
Run Docker Engine in swarm mode在swarm模式中运行Docker引擎
当你第一次安装并开始使用Docker引擎时,默认情况下禁用swarm模式。在启用集群模式时,需要处理通过docker service命令管理的服务的概念。
在集群模式下运行引擎有两种方式:
- 创建一个新的集群,本文将对此进行介绍。
- 加入现有的群体。
当你在本地机器上以集群模式运行引擎时,你可以基于你创建的镜像或其他可用镜像创建和测试服务。在你的生产环境中,swarm模式提供了一个容错平台,该平台具有集群管理功能,可以保持服务的运行和可用性。
这些说明假设你已经在机器上安装了Docker引擎1.12或更高版本,作为集群中的管理器节点。
如果你还没有读过集群模式的关键概念,请阅读swarm mode key concepts和尝试 swarm mode tutorial教程。
Create a swarm创建集群
当你运行创建集群的命令时,Docker引擎将以集群模式运行。
运行docker swarm init在当前节点上创建一个单节点集群。引擎设置集群如下:
- 将当前节点切换到集群模式。
- 创建一个名为default的集群。
- 指定当前节点为集群的leader manager节点。
- 用机器主机名命名节点。
- 将管理器配置为侦听端口2377上的活跃网络接口。
- 将当前节点设置为Active可用性,这意味着它可以从调度程序接收任务。
- 启动参与集群的引擎的内部分布式数据存储,以维护集群及其上运行的所有服务的一致视图。
- 默认情况下,为群集生成自签名根CA。
- 默认情况下,为worker和manager节点生成令牌以加入集群。
- 创建一个名为ingress的覆盖网络,用于发布集群外部的服务端口。
- 为你的网络创建覆盖的默认IP地址和子网掩码
docker swarm init的输出提供了连接命令,当你将新的工作节点加入到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.
Configuring default address pools配置默认地址池
默认情况下,Docker Swarm为全局范围(覆盖)网络使用默认的地址池10.0.0.0/8。没有指定子网的每个网络都将从这个池中依次分配子网。在某些情况下,可能需要为网络使用不同的默认IP地址池。
例如,如果默认的10.0.0.0/8范围与网络中已经分配的地址空间冲突,那么最好确保网络使用不同的范围,而不需要Swarm用户使用--subnet命令指定每个子网。
要配置自定义默认地址池,必须在集群初始化时使--default-addr-pool命令行选项定义池。这个命令行选项使用CIDR符号来定义子网路掩码。要为Swarm创建自定义地址池,必须定义至少一个默认地址池和一个可选的默认地址池子网掩码。例如,对于10.0.0.0/27,使用值27。
Docker从--default-addr-pool选项指定的地址范围分配子网地址。例如,命令行选项default-addr-pool 10.10.0.0/16表示Docker将从/16地址范围分配子网。如果--default-addr-pool-mask-len未指定或显式设置为24,则会生成256个 /24个网络,形式为10.10.X.0/24。
子网范围来自--default-addr-pool,(如10.10.0.0/16)。其中16的大小表示在默认addr池范围内可以创建的网络数量。默认地址池选项可能出现多次,每个选项都为docker提供用于覆盖子网的额外地址。
命令格式为:
$ docker swarm init --default-address-pool <IP range in CIDR> [--default-address-pool <IP range in CIDR> --default-addr-pool-mask-length <CIDR value>]
比如要为10.20.0.0网络创建具有a /16 (B类)的默认IP地址池,如下所示:
$ docker swarm init --default-addr-pool 10.20.0.0/16
要为10.20.0.0和10.30.0.0网络创建一个a /16 (B类)的默认IP地址池,并为每个网络创建一个/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获取关于默认地址池使用情况的更多信息
- 有关安装前规划网络设计的更多信息,请参见UCP Installation Planning
docker swarm init
CLI reference以获得关--default-address-pool标志的更多细节。
Configure the advertise address配置advertise地址
管理节点使用一个advertise地址来允许集群中的其他节点访问Swarmkit API和覆盖网络。集群中的其他节点必须能够访问其advertise地址上的manager节点。
如果没有指定advertise地址,Docker将检查系统是否只有一个IP地址。如果是,Docker默认使用监听端口2377的IP地址。如果系统有多个IP地址,你必须指定正确的--advertising -addr以支持管理器间通信和覆盖网络:
$ docker swarm init --advertise-addr <MANAGER-IP>
如果其他节点到达第一个管理器节点的地址与管理器看到的地址不相同,还必须指定--advertising-addr。例如,在跨不同区域的云设置中,主机既有用于在区域内访问的内部地址,也有用于从该区域外访问的外部地址。在这种情况下,使用--advertising-addr指定外部地址,以便节点可以将该信息传播到随后连接到它的其他节点。
有关advertise地址的详细信息,请参阅docker swarm init
CLI reference。
View the join command or update a swarm join token 查看连接命令或更新集群连接令牌
节点需要一个秘密令牌才能加入集群。工作节点的令牌与管理节点的令牌不同。节点在加入集群时只使用join-token。在节点已经加入群之后轮换连接令牌不会影响节点的群成员关系。令牌更改确保一个旧的令牌不能被任何试图加入群的新节点使用。
要检索连接命令,包括工作节点的连接令牌,请运行:
$ 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.
要查看链接命令和管理节点的令牌,运行:
$ docker swarm join-token manager To add a worker 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
小心使用连接令牌,因为它们是加入集群所必需的密钥。特别是,将密钥签入版本控制是一种不好的做法,因为它允许任何访问应用程序源代码的人向集群中添加新节点。Manager令牌特别敏感,因为它们允许一个新的Manager节点加入并获得对整个集群的控制。
我们建议你在以下情况下更换连接令牌:
- 如果一个令牌意外地签入到版本控制系统中,分组聊天或意外地打印到日志中。
- 如果你怀疑某个节点已被破坏。
- 如果你希望保证没有新的节点可以加入群。
此外,对于任何密钥(包括集群连接令牌),最好实现一个常规的轮换计划。我们建议你至少每6个月轮换一次你的令牌。
运行swarm join-token --rotate使旧的令牌无效并生成一个新令牌。指定要为工作节点还是管理节点轮换令牌:
$ 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