如何使用 docker swarm update 命令修改集群设置

DockerDockerBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在这个实验中,你将学习如何管理和修改 Docker Swarm 的设置。你将从在你的机器上初始化一个 Docker Swarm 开始,使其成为一个集群管理器。

初始化完成后,你将探索如何使用 docker swarm inspect 命令查看集群的当前配置。这将使你能够了解默认设置。然后,本实验将指导你使用 docker swarm update 命令更新集群的关键参数,具体是节点证书过期时间和任务历史记录保留限制。最后,你将通过再次检查集群设置来验证你的更改是否已成功应用。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/SystemManagementGroup(["System Management"]) docker/ContainerOperationsGroup -.-> docker/inspect("Inspect Container") docker/SystemManagementGroup -.-> docker/system("Manage Docker") subgraph Lab Skills docker/inspect -.-> lab-555246{{"如何使用 docker swarm update 命令修改集群设置"}} docker/system -.-> lab-555246{{"如何使用 docker swarm update 命令修改集群设置"}} end

初始化 Docker Swarm

在这一步中,你将学习如何初始化一个 Docker Swarm。Docker Swarm 是一组运行 Docker 的机器,它们组成一个集群。加入集群后,你可以继续运行你熟悉的 Docker 命令,集群会将这些命令分发到各个节点上执行。

要初始化一个集群,你可以使用 docker swarm init 命令。这个命令会将当前机器转变为集群管理器。

打开终端并运行以下命令来初始化 Docker Swarm:

docker swarm init

你应该会看到类似以下的输出,这表明集群已成功初始化,并提供了一个将其他节点加入该集群的命令:

Swarm initialized: current node (xxxxxxxxxxxx) is now a manager.

To add a worker to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 192.168.99.100:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

这个命令使当前机器成为集群管理器。在实际场景中,为了实现高可用性,通常会有多个管理器,但在这个实验中,一个管理器就足够了。

查看当前集群设置

在这一步中,你将学习如何查看 Docker Swarm 的当前设置。这有助于你了解当前的配置,并在更新设置后验证更改是否生效。

要查看集群设置,你可以使用 docker swarm inspect 命令。该命令会提供有关集群的详细信息,包括其 ID、创建日期和各种配置设置。

打开终端并运行以下命令来检查 Docker Swarm:

docker swarm inspect

输出将是一个包含集群配置的 JSON 对象。查找 Spec 部分,其中包含可配置的设置。注意 OrchestrationDispatcher 字段,因为这些字段包含与任务历史记录和节点证书相关的设置。

例如,你可能会看到类似以下的输出(具体值会有所不同):

[
  {
    "ID": "xxxxxxxxxxxx",
    "Version": {
      "Index": 10
    },
    "CreatedAt": "2023-10-27T10:00:00.000000000Z",
    "UpdatedAt": "2023-10-27T10:00:00.000000000Z",
    "Spec": {
      "Orchestration": {
        "TaskHistoryRetentionLimit": 5
      },
      "Raft": {
        "SnapshotInterval": 10000,
        "KeepOldSnapshots": 0,
        "LogEntriesForSlowFollowers": 500,
        "ElectionTick": 3,
        "HeartbeatTick": 1
      },
      "Dispatcher": {
        "HeartbeatPeriod": 5000000000
      },
      "CAConfig": {
        "NodeCertExpiry": 7776000000000000,
        "ExternalCAs": null,
        "SigningCACert": "...",
        "SigningCAKey": "...",
        "ForceRotate": 0
      },
      "TaskDefaults": {
        "LogDriver": null
      }
    },
    "TLSInfo": {
      "TrustRoot": "...",
      "CertIssuerSubject": "CN=swarm-ca",
      "CertIssuerPublicKey": "..."
    },
    "RootRotationInProgress": false
  }
]

Spec 部分,你可以在 Orchestration 下找到 TaskHistoryRetentionLimit,在 CAConfig 下找到 NodeCertExpiry。这些就是我们将在下一步中修改的设置。

更新节点证书有效期

在这一步中,你将学习如何更新 Docker Swarm 中节点证书的有效期。节点证书用于集群节点之间的安全通信。默认情况下,这些证书在 3 个月后过期。你可以根据安全策略和运营需求调整这个期限。

要更新节点证书的有效期,你可以使用 docker swarm update 命令,并搭配 --cert-expiry 标志。--cert-expiry 的值是一个持续时间字符串,例如,24h 表示 24 小时,720h 表示 30 天(720 小时),或者 0 表示禁用过期(不建议在生产环境中使用)。

让我们将节点证书的有效期更新为 30 天(720 小时)。打开终端并运行以下命令:

docker swarm update --cert-expiry 720h

你应该会看到确认更新的输出:

Swarm updated.

这个命令会更新集群配置,以设置新的证书有效期。此次更新后颁发的新节点证书将具有新的有效期。现有证书仍将根据其原始颁发日期和之前的有效期设置过期,除非你强制进行证书轮换。

更新任务历史记录保留限制

在这一步中,你将学习如何更新 Docker Swarm 中的任务历史记录保留限制。任务历史记录保留限制决定了集群历史中保留多少已完成或失败的任务。保留任务历史记录有助于调试和监控,但保留过多记录可能会消耗过多资源。

要更新任务历史记录保留限制,你可以使用 docker swarm update 命令,并搭配 --task-history-limit 标志。--task-history-limit 的值是一个整数,表示要保留的任务数量。

让我们将任务历史记录保留限制更新为 10。打开终端并运行以下命令:

docker swarm update --task-history-limit 10

你应该会看到确认更新的输出:

Swarm updated.

此命令会更新集群配置,以保留最后 10 个已完成或失败任务的历史记录。

验证更新后的集群设置

在这最后一步中,你将验证在前面步骤中更新的集群设置是否已成功应用。你将再次使用 docker swarm inspect 命令,并检查 NodeCertExpiryTaskHistoryRetentionLimit 的值。

打开终端并运行以下命令来检查 Docker Swarm:

docker swarm inspect

检查输出的 JSON。找到 Spec 部分,然后查看 CAConfig 下的 NodeCertExpiryOrchestration 下的 TaskHistoryRetentionLimit 的值。

你应该会看到 NodeCertExpiry 现在设置为 2592000000000000(这表示 30 天,以纳秒为单位),并且 TaskHistoryRetentionLimit 设置为 10

例如,输出的相关部分应该如下所示:

[
    {
        ...
        "Spec": {
            "Orchestration": {
                "TaskHistoryRetentionLimit": 10
            },
            ...
            "CAConfig": {
                "NodeCertExpiry": 2592000000000000,
                ...
            },
            ...
        },
        ...
    }
]

通过检查集群配置,你可以确认更新已成功完成。

总结

在本次实验中,你学习了如何使用 docker swarm init 命令初始化 Docker Swarm,将当前机器转变为集群管理器。接着,你探索了如何使用 docker swarm inspect 命令查看当前的集群设置,该命令会提供详细的集群配置 JSON 输出,其中包括包含可配置设置的 Spec 部分。

在完成初始化和检查之后,你练习了更新特定的集群设置。你学习了如何使用 docker swarm update 命令修改节点证书有效期和任务历史记录保留限制。最后,你再次使用 docker swarm inspect 命令并检查输出中更新后的配置,验证了这些更改已成功应用。