Docker swarm集群搭建及使用
Docker Swarm 文档
一、概述
Docker Swarm 是 Docker 的原生集群工具。它将 Docker 主机池转变为单个虚拟 Docker 主机。Docker Swarm 提供了标准的 Docker API,所有任何已经与 Docker 守护程序通信的工具都可以使用 Swarm 来透明地扩展到多个主机上运行。本文档将介绍如何设置和管理 Docker Swarm 集群。
二、初始化 Swarm
要创建 Swarm 并将其自身加入为管理节点,请在任何 Docker 主机上运行以下命令:
1 |
|
MANAGER-IP 是您希望其他节点用于连接到管理节点的 IP 地址或接口。运行此命令后,该节点将成为 Swarm 的第一个管理节点。
Docker Swarm 命令行选项
选项 | 默认值 | 描述 |
---|---|---|
--advertise-addr |
公告地址(格式:<ip|interface>[:port]) | |
--autolock |
启用管理器自动锁定(需要解锁密钥才能启动已停止的管理器) | |
--availability |
active | 节点的可用性(active, pause, drain) |
--cert-expiry |
2160h0m0s | 节点证书的有效期(ns|us|ms|s|m|h) |
--data-path-addr |
API 1.31+ 用于数据路径流量的地址或接口(格式:<ip|interface>) | |
--data-path-port |
API 1.40+ 用于数据路径流量的端口号(1024 - 49151)。如果未设置值或设置为0,则使用默认端口(4789)。 | |
--default-addr-pool |
API 1.39+ 默认地址池,CIDR格式 | |
--default-addr-pool-mask-length |
24 | API 1.39+ 默认地址池子网掩码长度 |
--dispatcher-heartbeat |
5s | 调度器心跳周期(ns|us|ms|s|m|h) |
--external-ca |
一个或多个证书签名端点的规范 | |
--force-new-cluster |
强制从当前状态创建新集群 | |
--listen-addr |
0.0.0.0:2377 | 监听地址(格式:<ip|interface>[:port]) |
--max-snapshots |
API 1.25+ 保留的额外Raft快照数 | |
--snapshot-interval |
10000 | API 1.25+ Raft快照之间的日志条目数 |
--task-history-limit |
5 | 任务历史记录保留限制 |
示例
1 |
|
要将管理器节点添加到此swarm,请运行docker swarm join-token manager
并按照说明进行操作。
docker swarm init
命令生成两个随机令牌:一个工作节点令牌和一个管理器节点令牌。当您将新节点加入swarm时,节点将基于您传递给swarm join
的令牌作为工作节点或管理器节点加入。
创建swarm后,您可以使用swarm join-token
显示或轮换令牌。
保护管理器密钥和数据(–autolock)
--autolock
标志启用管理器的自动锁定,并使用加密密钥保护所有管理器存储的私钥和数据。此加密密钥在输出中打印,并且在没有它的情况下无法访问私钥和数据。请确保安全地存储此密钥,以便在管理器重新启动后重新激活它。要将管理器重新激活,请将密钥传递给docker swarm unlock
命令。您可以通过运行docker swarm update --autolock=false
来禁用自动锁定。禁用后,加密密钥不再需要启动管理器,它将自行启动而无需用户干预。
配置节点健康检查频率(–dispatcher-heartbeat)
--dispatcher-heartbeat
标志设置节点报告其健康状况的频率。
使用外部证书颁发机构(–external-ca)
此标志设置swarm以使用外部CA来颁发节点证书。该值采用protocol=X,url=Y
的形式。protocol
的值指定应使用哪种协议将签名请求发送到外部CA。
三、加入 Swarm
Docker Swarm 加入令牌
加入令牌是允许节点加入 Swarm 的密钥。有两种不同的加入令牌可用,一种用于工作节点角色,另一种用于管理器节点角色。当运行 swarm join
时,使用 --token
标志传递令牌。节点仅在加入 Swarm 时使用加入令牌。
注意 这是一个集群管理命令,必须在 Swarm 管理器节点上执行。要了解有关管理器和工作节点的信息,请参阅文档中的 Swarm 模式部分。
1 |
|
此命令与 Swarm 编排器协同工作。
选项
选项 | 描述 |
---|---|
-q, --quiet |
仅显示令牌 |
--rotate |
轮换加入令牌 |
示例 可以使用 swarm join-token
查看或轮换加入令牌。
作为便利,您可以将 worker
或 manager
作为参数传递给 join-token
,以打印完整的 docker swarm join
命令,以将新节点加入 Swarm:
1 |
|
要将工作节点添加到此 Swarm,请运行以下命令:
1 |
|
要将管理器节点添加到此 Swarm,请运行以下命令:
1 |
|
使用 --rotate
标志为指定角色生成新的加入令牌:
–rotate
由于令牌允许新节点加入 Swarm,因此您应该保密它们。对于管理器令牌要特别小心,因为它们允许新的管理器节点加入 Swarm。恶意管理器可能会破坏 Swarm 的操作。
如果令牌被签入版本控制、被盗或节点被攻陷,请轮换 Swarm 的加入令牌。您可能还希望定期轮换令牌,以确保任何未知的令牌泄露都不会允许恶意节点加入 Swarm。
要轮换加入令牌并打印新生成的令牌,请运行 docker swarm join-token --rotate
并传递角色:manager
或 worker
。
轮换加入令牌意味着将无法使用旧令牌将新节点加入 Swarm。轮换不会影响 Swarm 中的现有节点,因为加入令牌仅用于授权新节点加入 Swarm。
使用 --rotate
后,只有新的令牌才可用于具有指定角色的加入。
1 |
|
成功轮换工作节点加入令牌。
要将工作节点添加到此 Swarm,请运行以下命令:
1 |
|
-q
(或 --quiet
)标志仅打印令牌:
–quiet
仅打印令牌。不打印完整的加入命令。
1 |
|
四、部署服务,及相关操作
以下是在 Docker Swarm 上部署服务的步骤:
- 创建服务
在 Swarm 管理节点上,使用 docker service create
命令创建一个服务。以下是一个简单的示例:
1 |
|
在上面的命令中:
--name
参数指定了服务的名称。--publish
参数将服务内部的端口(本例中为 80)映射到集群节点上的端口(本例中为 8080)。--replicas
参数指定了要运行的副本数量(本例中为 3)。<your-image-name>
是您的服务将使用的 Docker 镜像名称。查看服务列表
使用以下命令可以查看 Swarm 上运行的所有服务列表:
1 |
|
这将列出所有服务的 ID、名称、副本数量、镜像名称等信息。
- 查看服务详情
使用以下命令可以查看特定服务的详细信息:
1 |
|
将 my-service
替换为您要查看的服务的名称。这将输出有关服务的详细信息,包括配置、状态等。
- 扩展或缩小服务
您可以根据需要动态扩展或缩小服务的副本数量。以下是一个示例:
1 |
|
这将将 my-service
的副本数量扩展到 5。您也可以使用较小的数字来缩小服务规模。
- 删除服务
如果您不再需要某个服务,可以使用以下命令将其从 Swarm 中删除:
1 |
|
将 my-service
替换为您要删除的服务的名称。
- 更新服务
您还可以更新正在运行的服务,例如更新容器镜像、环境变量或端口映射等。使用 docker service update
命令,可以在不中断服务的情况下应用这些更改。以下是一个简单的示例:
1 |
|
在上面的命令中,--image
参数指定了更新的 Docker 镜像名称。Swarm 将自动重新部署更新后的服务,并保持所需的副本数量。
五、离开 Swarm
要从 Swarm 中移除节点,请在要离开的节点上运行以下命令:
1 |
|
请注意,–force 标志将立即离开 Swarm,而不会等待当前任务完成。如果您不希望立即离开,请省略此标志。
六、总结
Docker Swarm 提供了强大的集群管理工具,可帮助您轻松地将应用程序扩展到多个 Docker 主机上。通过初始化 Swarm、加入 Swarm、部署服务、管理服务、扩展服务和离开 Swarm,您可以有效地管理 Swarm 集群并最大限度地利用资源。