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--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的子网。这种情况一直持续到所有子网耗尽为止。
有关详情,请参阅以下网页:
- 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--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引擎的更多相关文章
- docker swarm英文文档学习-12-在集群模式中的Raft共识
Raft consensus in swarm mode 在集群模式中的Raft共识 当Docker引擎在集群模式下运行时,manager节点实现Raft 共识算法来管理全局集群状态.Docker s ...
- docker swarm英文文档学习-8-在集群中部署服务
Deploy services to a swarm在集群中部署服务 集群服务使用声明式模型,这意味着你需要定义服务的所需状态,并依赖Docker来维护该状态.该状态包括以下信息(但不限于): 应该运 ...
- docker swarm英文文档学习-6-添加节点到集群
Join nodes to a swarm添加节点到集群 当你第一次创建集群时,你将单个Docker引擎置于集群模式中.为了充分利用群体模式,可以在集群中添加节点: 添加工作节点可以增加容量.当你将服 ...
- docker swarm英文文档学习-7-在集群中管理节点
Manage nodes in a swarm在集群中管理节点 List nodes列举节点 为了查看集群中的节点列表,可以在管理节点中运行docker node ls: $ docker node ...
- docker swarm英文文档学习-4-swarm模式如何运行
1)How nodes work Docker引擎1.12引入了集群模式,使你能够创建一个由一个或多个Docker引擎组成的集群,称为集群.集群由一个或多个节点组成:在群模式下运行Docker引擎1. ...
- docker swarm英文文档学习-3-开始
https://docs.docker.com/engine/swarm/swarm-tutorial/ 1)Getting started with swarm mode 本教程向你介绍Docker ...
- docker swarm英文文档学习-11-上锁你的集群来保护你的加密密钥
Lock your swarm to protect its encryption key上锁你的集群来保护你的加密密钥 在Docker 1.13及更高版本中,默认情况下,群管理器使用的Raft日志在 ...
- docker swarm英文文档学习-9-使用Docker Configs存储配置数据
Store configuration data using Docker Configs 使用Docker Configs存储配置数据 Docker 17.06引入了集群服务配置,允许你在服务镜像或 ...
- docker swarm英文文档学习-10-使用Docker密钥管理敏感数据
Manage sensitive data with Docker secrets使用Docker secrets管理敏感数据 About secrets 对于Docker Swarm服务来说,sec ...
随机推荐
- MyCat安装配置
Mycat : 数据库分库分表中间件 http://www.mycat.io/ mycat运行需要JVM,所以先安装java环境,JDK1.7以上.数据库采用mysql5.7,或者8.0 下载 下载地 ...
- Java集合类源码解析:LinkedHashMap
前言 今天继续学习关于Map家族的另一个类 LinkedHashMap .先说明一下,LinkedHashMap 是继承于 HashMap 的,所以本文只针对 LinkedHashMap 的特性学习, ...
- Java JDBC的基础知识(五)
本文主要记录JDBC基础知识之后的部分内容.另外,我看到<Java核心基础2>中第四章是主要介绍数据库编程的.里面有一些说明和应用特别灵活,有些部分也太容易理解,建议大家看一下.这篇是依然 ...
- 理解Java反射
一.反射简介 Java让我们在运行时识别对象和类的信息,主要有2种方式:一种是传统的RTTI,它假定我们在编译时已经知道了所有的类型信息:另一种是反射机制,它允许我们在运行时发现和使用类的信息. 1. ...
- Codeforces343D(SummerTrainingDay06-F dfs序+线段树)
D. Water Tree time limit per test:4 seconds memory limit per test:256 megabytes input:standard input ...
- Code Signal_练习题_variableName
Correct variable names consist only of English letters, digits and underscores and they can't start ...
- DOM基础练习代码(二)
上一篇给大家的三段代码不知到大家有没有练习呢?今天再给大家带来两段DOM的练习! 4.封装函数,实现children功能,最好哎原型链上编程 Element.prototype.getChildren ...
- Ubuntu16.04搭建kubernetes v1.11.2集群
1.节点介绍 master cluster-1 cluster-2 cluster-3 hostname k8s-55 k8s-5 ...
- NodeJS配置TaoBao源
npm install -g cnpm --registry=https://registry.npm.taobao.org
- 安卓基础之Get方式发送http请求
本文参考作者:超超boy 链接:https://www.cnblogs.com/jycboy/p/post01.html 一.在android用Get方式发送http请求,使用的是java标准类. 主 ...