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--49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx14ie39trti4wxv-8vxv8rssmk743ojnwacrr2e7c \
192.168.99.100: 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/

要为10.20.0.0和10.30.0.0网络创建一个a /16 (B类)的默认IP地址池,并为每个网络创建一个/26的子网掩码,如下所示:

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

在本例中,docker network create -d overlay net1将产生10.20.0.0/26作为分配给net1的子网,docker network create -d overlay net2将产生10.20.0.64/26作为分配给net2的子网。这种情况一直持续到所有子网耗尽为止。
有关详情,请参阅以下网页:

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--49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx14ie39trti4wxv-8vxv8rssmk743ojnwacrr2e7c \
192.168.99.100: 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--59egwe8qangbzbqb3ryawxzk3jn97ifahlsrw01yar60pmkr90-bdjfnkcflhooyafetgjod97sz \
192.168.99.100:

传递--quiet标志去要求打印令牌消息:

$ docker swarm join-token --quiet worker

SWMTKN--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--2kscvs0zuymrsc9t0ocyy1rdns9dhaodvpl639j2bqx55uptag-ebmn5u927reawo27s3azntd44 \
192.168.99.100:

docker swarm英文文档学习-5-在swarm模式中运行Docker引擎的更多相关文章

  1. docker swarm英文文档学习-12-在集群模式中的Raft共识

    Raft consensus in swarm mode 在集群模式中的Raft共识 当Docker引擎在集群模式下运行时,manager节点实现Raft 共识算法来管理全局集群状态.Docker s ...

  2. docker swarm英文文档学习-8-在集群中部署服务

    Deploy services to a swarm在集群中部署服务 集群服务使用声明式模型,这意味着你需要定义服务的所需状态,并依赖Docker来维护该状态.该状态包括以下信息(但不限于): 应该运 ...

  3. docker swarm英文文档学习-6-添加节点到集群

    Join nodes to a swarm添加节点到集群 当你第一次创建集群时,你将单个Docker引擎置于集群模式中.为了充分利用群体模式,可以在集群中添加节点: 添加工作节点可以增加容量.当你将服 ...

  4. docker swarm英文文档学习-7-在集群中管理节点

    Manage nodes in a swarm在集群中管理节点 List nodes列举节点 为了查看集群中的节点列表,可以在管理节点中运行docker node ls: $ docker node ...

  5. docker swarm英文文档学习-4-swarm模式如何运行

    1)How nodes work Docker引擎1.12引入了集群模式,使你能够创建一个由一个或多个Docker引擎组成的集群,称为集群.集群由一个或多个节点组成:在群模式下运行Docker引擎1. ...

  6. docker swarm英文文档学习-3-开始

    https://docs.docker.com/engine/swarm/swarm-tutorial/ 1)Getting started with swarm mode 本教程向你介绍Docker ...

  7. docker swarm英文文档学习-11-上锁你的集群来保护你的加密密钥

    Lock your swarm to protect its encryption key上锁你的集群来保护你的加密密钥 在Docker 1.13及更高版本中,默认情况下,群管理器使用的Raft日志在 ...

  8. docker swarm英文文档学习-9-使用Docker Configs存储配置数据

    Store configuration data using Docker Configs 使用Docker Configs存储配置数据 Docker 17.06引入了集群服务配置,允许你在服务镜像或 ...

  9. docker swarm英文文档学习-10-使用Docker密钥管理敏感数据

    Manage sensitive data with Docker secrets使用Docker secrets管理敏感数据 About secrets 对于Docker Swarm服务来说,sec ...

随机推荐

  1. 【转】SAP HANA学习资料大全[非常完善的学习资料汇总]

    Check out this SDN blog if you plan to write HANA Certification exam http://scn.sap.com/community/ha ...

  2. Substrings(hdu1238)字符串匹配

    Substrings Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Sub ...

  3. Spring全家桶系列–SpringBoot与Mybatis结合

    //本文作者:cuifuan Mybatis 是一个持久层ORM框架,负责Java与数据库数据交互,也可以简易理解为中介,相对于它,还有个中介是hibernate,不过在mybatis中sql语句的灵 ...

  4. oracle 11g 分区表创建(自动按年、月、日分区)

    前言:工作中有一张表一年会增长100多万的数据,量虽然不大,可是表字段多,所以一年下来也会达到 1G,而且只增不改,故考虑使用分区表来提高查询性能,提高维护性. oracle 11g 支持自动分区,不 ...

  5. 【13】享元模式(FlyWeight Pattern)

    一.引言 在软件开发过程,如果我们需要重复使用某个对象的时候,若重复地使用new创建这个对象的话,就需要多次地去申请内存空间了,这样可能会出现内存使用越来越多的情况,这样的问题是非常严重.享元模式可以 ...

  6. 服务注册中心Eureka vs Zookeeper vs Consul

    前言 在现在云计算和大数据快速发展的今天,业务快速发展和变化.我们以前的单一应用难以应对这种快速的变化, 因此我们需要将以前单一的大应用不断进行差分,分成若干微小的应用或者服务,这就是微服务的思想.但 ...

  7. C# 免客户端访问Oracle的DLL

    代码示例: OracleConnection con = new OracleConnection();               con.ConnectionString ="user ...

  8. webstorm技巧

    webstorm安装后的一些设置技巧: 如何更改主题(字体&配色):File -> settings -> Editor -> colors&fonts -> ...

  9. 高德地图 JS API - 根据地名实现标记定位

    德地图 JS API 使用前的准备工作请参考官方网站说明: https://lbs.amap.com/api/javascript-api/guide/abc/prepare 根据地名实现地图标记定位 ...

  10. Android GetMethodID 函数的说明

    GetFieldID是得到java类中的参数ID,GetMethodID得到java类中方法的ID,它们只能调用类中声明为 public的参数或方法.使用如下: jfieldID topicField ...