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时可以使用:

  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--49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx14ie39trti4wxv-8vxv8rssmk743ojnwacrr2e7c \
  8. 192.168.99.100:
  9.  
  10. 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提供用于覆盖子网的额外地址。

命令格式为:

  1. $ 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地址池,如下所示:

  1. $ docker swarm init --default-addr-pool 10.20.0.0/

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

  1. $ 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以支持管理器间通信和覆盖网络:

  1. $ 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。在节点已经加入群之后轮换连接令牌不会影响节点的群成员关系。令牌更改确保一个旧的令牌不能被任何试图加入群的新节点使用。
要检索连接命令,包括工作节点的连接令牌,请运行:

  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--49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx14ie39trti4wxv-8vxv8rssmk743ojnwacrr2e7c \
  7. 192.168.99.100:
  8.  
  9. This node joined a swarm as a worker.

要查看链接命令和管理节点的令牌,运行:

  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--59egwe8qangbzbqb3ryawxzk3jn97ifahlsrw01yar60pmkr90-bdjfnkcflhooyafetgjod97sz \
  7. 192.168.99.100:

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

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

小心使用连接令牌,因为它们是加入集群所必需的密钥。特别是,将密钥签入版本控制是一种不好的做法,因为它允许任何访问应用程序源代码的人向集群中添加新节点。Manager令牌特别敏感,因为它们允许一个新的Manager节点加入并获得对整个集群的控制。
我们建议你在以下情况下更换连接令牌:

  • 如果一个令牌意外地签入到版本控制系统中,分组聊天或意外地打印到日志中。
  • 如果你怀疑某个节点已被破坏。
  • 如果你希望保证没有新的节点可以加入群。

此外,对于任何密钥(包括集群连接令牌),最好实现一个常规的轮换计划。我们建议你至少每6个月轮换一次你的令牌。
运行swarm join-token --rotate使旧的令牌无效并生成一个新令牌。指定要为工作节点还是管理节点轮换令牌:

  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--2kscvs0zuymrsc9t0ocyy1rdns9dhaodvpl639j2bqx55uptag-ebmn5u927reawo27s3azntd44 \
  7. 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. JAVA-将内容写入文件并导出到压缩包

    取出数据库表中的内容写入到文件,并将所有文件写入到压缩包最终导出到指定的某目录下        //导出的压缩包格式  xxxx_date        Date currentTime = new ...

  2. 启动SpringBoot项目

    Eclipse创建Spring Boot项目 1.访问http://start.spring.io/ 解压引入Maven项目 2.建议的目录结构 com +- example +- myproject ...

  3. 设计模式-组合模式(Composite)

    一.概念 将对象组合成树形结构以表示“部分-整体”的层次结构.组合模式使得用户对单个对象和组合对象的使用具有一致性. 二.模式动机 组合模式,通过设计一个抽像的组件类,使它既代表叶子对象,又代表组合对 ...

  4. java设计模式-----21、备忘录模式

    概念: Memento模式也叫备忘录模式又叫做快照模式(Snapshot Pattern)或Token模式,是GoF的23种设计模式之一,属于行为模式,它的作用是保存对象的内部状态,并在需要的时候(u ...

  5. 如何在idea中设置Tomcat虚拟路径

    设置项目的根路径: 设置指定文件的在Tomcat中的虚拟路径: 代码: String fileName = MyFileUtil.getFileName(uploadFileName); File f ...

  6. LeetCode DB : Delete Duplicate Emails

    Write a SQL query to delete all duplicate email entries in a table named Person, keeping only unique ...

  7. JavaSE——序列化和反序列化

    序列化: 序列化对应写的操作.(读与写都是站在应用的角度上) 序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化.可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间 ...

  8. php用smarty来做简易留言系统,明细步骤简单操作

    留言信息是之前用php做过的一个例子,现在把它用smarty模板来做 大概是这样子 点击发布信息 然后填写内容,发送后会返回表格,写的内容都会出现在表格里 数据库的数据是这样的: 先建两个文件.php ...

  9. HCTF2018 pwn题复现

    相关文件位置 https://gitee.com/hac425/blog_data/tree/master/hctf2018 the_end 程序功能为,首先 打印出 libc 的地址, 然后可以允许 ...

  10. onlyoffice文档协作的权限开发,利用casbin和golang语言

    登录用户,对于已经进行了权限设置的文档,将根据权限数据库,比对用户名,当与用户有关时,就显示相对应的权限,当都与登录用户无关时,则显示拒绝访问: 对于未登录用户,已经设置了权限的文档,都将显示拒绝访问 ...