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. Weex 学习文档、跳转路径、控制台输出、we转js汇总

    最近在学习阿里的weex框架,网上教程真是不少,但是有用的确实是少的很.其中大多数都是讲如何配置移动端的,很少有讲到weex语法的.要知道,如果真需要用weex编写js页面的话,很有可能是移动端开发者 ...

  2. java图片压缩(Thumbnails)

    package com.hzxc.groupactivity.server.util; import java.awt.image.BufferedImage; import java.io.*; i ...

  3. 非常可乐(杭电hdu1495)bfs

      非常可乐 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

  4. Java Servlet 过滤器与 springmvc 拦截器的区别?

    前言:在工作中,遇到需要记录日志的情况,不知道该选择过滤器还是拦截器,故总结了一下. servlet 过滤器 定义 java过滤器能够对目标资源的请求和响应进行截取.过滤器的工作方式分为四种 应用场景 ...

  5. if语句格式及流程

    if语句是条件判断功能 1. if 条件: if语句块 执行流程:判断条件是否为真. 如果真. 执行if语句块 2. if 条件: if语句块 else: else语句块 执行流程:判断条件是否为真. ...

  6. ES6 箭头函数下的this指向

    在javscript中,this 是在函数运行时自动生成的一个内部指针,它指向函数的调用者. 箭头函数有些不同,它的this是继承而来, 默认指向在定义它时所处的对象(宿主对象),而不是执行时的对象. ...

  7. linux 查找匹配文件中包含指定字符的 前五行,这里是指所有匹配的前五行

    最近被问到 一个关于查找匹配字符的信息显示问题: 系统/etc/sysctl.conf文件会定义系统内核的一些配置,请查找和net有关的信息,并只打印前面5行信息. 解决方式大概试两种写法均可: 1. ...

  8. MySQL主从复制——主库已有数据的解决方案

    在上篇文章中我们介绍了基于Docker的Mysql主从搭建,一主多从的搭建过程就是重复了一主一从的从库配置过程,需要注意的是,要保证主从库my.cnf中server-id的唯一性.搭建完成后,可以在主 ...

  9. LeetCode题解之Longest Continuous Increasing Subsequence

    1.题目描述 2.问题分析 从每一个num[i]往前扫描即可. 3.代码 int findLengthOfLCIS(vector<int>& nums) { ){ return n ...

  10. Mongodb集群与分片 1

    分片集群   Mongodb中数据分片叫做chunk,它是一个Collection中的一个连续的数据记录,但是它有一个大小限制,不可以超过200M,如果超出产生新的分片.   下面是一个简单的分片集群 ...