Docker swarm集群搭建及使用

Docker Swarm 文档

一、概述

Docker Swarm 是 Docker 的原生集群工具。它将 Docker 主机池转变为单个虚拟 Docker 主机。Docker Swarm 提供了标准的 Docker API,所有任何已经与 Docker 守护程序通信的工具都可以使用 Swarm 来透明地扩展到多个主机上运行。本文档将介绍如何设置和管理 Docker Swarm 集群。

二、初始化 Swarm

要创建 Swarm 并将其自身加入为管理节点,请在任何 Docker 主机上运行以下命令:

1
docker swarm init --advertise-addr <MANAGER-IP>

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
docker swarm init --advertise-addr 192.168.99.121

要将管理器节点添加到此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
docker swarm join-token [OPTIONS] (worker|manager)

此命令与 Swarm 编排器协同工作。

选项

选项 描述
-q, --quiet 仅显示令牌
--rotate 轮换加入令牌

示例 可以使用 swarm join-token 查看或轮换加入令牌。

作为便利,您可以将 workermanager 作为参数传递给 join-token,以打印完整的 docker swarm join 命令,以将新节点加入 Swarm:

1
docker swarm join-token worker

要将工作节点添加到此 Swarm,请运行以下命令:

1
docker swarm join --token SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-1awxwuwd3z9j1z3puu7rcgdbx 172.17.0.2:2377

要将管理器节点添加到此 Swarm,请运行以下命令:

1
2
docker swarm join-token manager
docker swarm join --token SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-7p73s1dx5in4tatdymyhg9hu2 172.17.0.2:2377

使用 --rotate 标志为指定角色生成新的加入令牌:
–rotate

由于令牌允许新节点加入 Swarm,因此您应该保密它们。对于管理器令牌要特别小心,因为它们允许新的管理器节点加入 Swarm。恶意管理器可能会破坏 Swarm 的操作。

如果令牌被签入版本控制、被盗或节点被攻陷,请轮换 Swarm 的加入令牌。您可能还希望定期轮换令牌,以确保任何未知的令牌泄露都不会允许恶意节点加入 Swarm。

要轮换加入令牌并打印新生成的令牌,请运行 docker swarm join-token --rotate 并传递角色:managerworker

轮换加入令牌意味着将无法使用旧令牌将新节点加入 Swarm。轮换不会影响 Swarm 中的现有节点,因为加入令牌仅用于授权新节点加入 Swarm。

使用 --rotate 后,只有新的令牌才可用于具有指定角色的加入。

1
docker swarm join-token --rotate worker

成功轮换工作节点加入令牌。

要将工作节点添加到此 Swarm,请运行以下命令:

1
docker swarm join --token SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-b30ljddcqhef9b9v4rs7mel7t 172.17.0.2:2377

-q(或 --quiet)标志仅打印令牌:
–quiet

仅打印令牌。不打印完整的加入命令。

1
2
docker swarm join-token -q worker
SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-b30ljddcqhef9b9v4rs7mel7t

四、部署服务,及相关操作

以下是在 Docker Swarm 上部署服务的步骤:

  • 创建服务

在 Swarm 管理节点上,使用 docker service create 命令创建一个服务。以下是一个简单的示例:

1
2
3
4
5
docker service create \
--name my-service \
--publish 8080:80 \
--replicas 3 \
<your-image-name>

在上面的命令中:

  • --name 参数指定了服务的名称。

  • --publish 参数将服务内部的端口(本例中为 80)映射到集群节点上的端口(本例中为 8080)。

  • --replicas 参数指定了要运行的副本数量(本例中为 3)。

  • <your-image-name> 是您的服务将使用的 Docker 镜像名称。

  • 查看服务列表

使用以下命令可以查看 Swarm 上运行的所有服务列表:

1
docker service ls

这将列出所有服务的 ID、名称、副本数量、镜像名称等信息。

  • 查看服务详情

使用以下命令可以查看特定服务的详细信息:

1
docker service inspect my-service

my-service 替换为您要查看的服务的名称。这将输出有关服务的详细信息,包括配置、状态等。

  • 扩展或缩小服务

您可以根据需要动态扩展或缩小服务的副本数量。以下是一个示例:

1
docker service scale my-service=5

这将将 my-service 的副本数量扩展到 5。您也可以使用较小的数字来缩小服务规模。

  • 删除服务

如果您不再需要某个服务,可以使用以下命令将其从 Swarm 中删除:

1
docker service rm my-service

my-service 替换为您要删除的服务的名称。

  • 更新服务

您还可以更新正在运行的服务,例如更新容器镜像、环境变量或端口映射等。使用 docker service update 命令,可以在不中断服务的情况下应用这些更改。以下是一个简单的示例:

1
2
3
docker service update \
--image <new-image-name> \
my-service

在上面的命令中,--image 参数指定了更新的 Docker 镜像名称。Swarm 将自动重新部署更新后的服务,并保持所需的副本数量。

五、离开 Swarm

要从 Swarm 中移除节点,请在要离开的节点上运行以下命令:

1
docker swarm leave --force

请注意,–force 标志将立即离开 Swarm,而不会等待当前任务完成。如果您不希望立即离开,请省略此标志。

六、总结

Docker Swarm 提供了强大的集群管理工具,可帮助您轻松地将应用程序扩展到多个 Docker 主机上。通过初始化 Swarm、加入 Swarm、部署服务、管理服务、扩展服务和离开 Swarm,您可以有效地管理 Swarm 集群并最大限度地利用资源。


Docker swarm集群搭建及使用
https://flyfishs.top/2024/05/07/Docker-swarm集群搭建及使用/
作者
飞鱼
发布于
2024年5月7日
许可协议