如何使用 docker volume update 命令管理集群卷的可用性

DockerBeginner
立即练习

介绍

在这个实验中,你将学习如何使用 docker volume update 命令管理 Docker 集群卷的可用性。你将从创建一个集群卷开始,这对于在 Docker Swarm 的节点之间共享数据至关重要。

创建完成后,你将探索如何更改卷的可用性状态。这包括将可用性更新为 pause(暂停),这会阻止新任务使用该卷,然后更新为 drain(排空),其目的是将任务从卷不可用的节点上移走。最后,你将学习如何将可用性设置回 active(活跃),使新任务和现有任务都能充分利用该卷。这个实验为你提供了在 Swarm 环境中控制集群卷访问和使用的实践经验。

创建一个集群卷

在这一步中,你将学习如何在 Docker 中创建一个集群卷。集群卷是一种可以被 Docker Swarm 中不同节点上的多个容器访问的卷。这对于需要共享数据的应用程序(如数据库或文件服务器)非常有用。

在创建集群卷之前,你需要确保已经初始化了 Docker Swarm。如果你还没有初始化 Swarm,可以使用以下命令进行初始化:

docker swarm init

你应该会看到表明 Swarm 已初始化的输出信息。

现在,让我们来创建一个集群卷。你将使用 docker volume create 命令,并带上 --driver local 标志,同时指定卷的名称。local 驱动是默认驱动,适用于在单个节点上创建卷。对于集群卷,Docker Swarm 会处理跨节点的分发和访问。

docker volume create my-cluster-volume

运行该命令后,你应该会在控制台看到创建的卷的名称:

my-cluster-volume

要验证卷是否已创建,你可以使用 docker volume ls 命令列出现有的卷:

docker volume ls

你应该会在输出中看到 my-cluster-volume

将集群卷的可用性更新为暂停状态

在这一步中,你将学习如何将集群卷的可用性更新为 pause(暂停)。当卷的可用性设置为 pause 时,需要该卷的新任务将不会被调度到该卷不可用的节点上。使用该卷的现有任务将继续运行。此状态对于在不中断当前运行的服务的情况下暂时阻止对卷的新使用非常有用。

你将使用 docker volume update 命令来更改上一步中创建的 my-cluster-volume 的可用性。--availability 标志用于指定所需的可用性状态。

docker volume update --availability pause my-cluster-volume

执行该命令后,你应该会看到确认更新的输出:

my-cluster-volume

要验证卷的可用性是否已更新为 pause,你可以使用 docker volume inspect 命令检查该卷,并查找 Availability 字段。

docker volume inspect my-cluster-volume

inspect 命令的输出中,在 Spec 部分查找 Availability 字段。它应该显示为 pause

[
  {
    "CreatedAt": "...",
    "Driver": "local",
    "Labels": {},
    "Mountpoint": "/var/lib/docker/volumes/my-cluster-volume/_data",
    "Name": "my-cluster-volume",
    "Options": null,
    "Scope": "local",
    "Spec": {
      "Availability": "pause"
    },
    "Status": {}
  }
]

将集群卷的可用性更新为排空状态

在这一步中,你将学习如何将集群卷的可用性更新为 drain(排空)。当卷的可用性设置为 drain 时,需要该卷的新任务将不会被调度到该卷不可用的节点上。此外,Docker Swarm 会尝试关闭正在使用该卷的现有任务,并将它们重新调度到该卷可用的节点上。此状态对于在对卷进行维护或移除之前,平稳地将服务从该卷迁移出去非常有用。

你将再次使用 docker volume update 命令,但这次要将 --availability 标志设置为 drain

docker volume update --availability drain my-cluster-volume

你应该会看到输出打印出卷名作为确认信息:

my-cluster-volume

要验证卷的可用性是否已更新为 drain,你可以使用 docker volume inspect 命令检查该卷,并查看 Availability 字段。

docker volume inspect my-cluster-volume

在输出中,确认 Spec 部分的 Availability 字段现在为 drain

[
  {
    "CreatedAt": "...",
    "Driver": "local",
    "Labels": {},
    "Mountpoint": "/var/lib/docker/volumes/my-cluster-volume/_data",
    "Name": "my-cluster-volume",
    "Options": null,
    "Scope": "local",
    "Spec": {
      "Availability": "drain"
    },
    "Status": {}
  }
]

将集群卷的可用性更新为活跃状态

在最后这一步中,你将学习如何将集群卷的可用性更新回 active(活跃)状态。当卷的可用性设置为 active 时,需要该卷的新任务可以被调度到该卷可用的任何节点上。这是卷的默认状态,表示它已准备好供服务使用。

你将最后一次使用 docker volume update 命令,将 --availability 标志设置为 active

docker volume update --availability active my-cluster-volume

你应该会看到输出打印出卷名作为确认信息:

my-cluster-volume

要验证卷的可用性是否已成功设置回 active,你可以使用 docker volume inspect 命令检查该卷,并查看 Availability 字段。

docker volume inspect my-cluster-volume

在输出中,确认 Spec 部分的 Availability 字段现在为 active

[
  {
    "CreatedAt": "...",
    "Driver": "local",
    "Labels": {},
    "Mountpoint": "/var/lib/docker/volumes/my-cluster-volume/_data",
    "Name": "my-cluster-volume",
    "Options": null,
    "Scope": "local",
    "Spec": {
      "Availability": "active"
    },
    "Status": {}
  }
]

你现在已经成功创建了一个集群卷,并练习了在 pause(暂停)、drain(排空)和 active(活跃)状态之间更新其可用性。

总结

在本次实验中,你学习了如何使用 docker volume update 命令管理 Docker 集群卷的可用性。首先,你使用 docker volume create 创建了一个集群卷。

随后,你探索了如何修改卷的可用性状态。你学会了将可用性设置为 pause(暂停),这样可以阻止新任务使用该卷,同时允许现有任务继续运行。接着,你了解了如何将可用性更改为 drain(排空),此操作会尝试停止使用该卷的任务,并将它们重新调度到其他地方。最后,你学会了将可用性设置回 active(活跃),使新任务能够使用该卷。这些步骤展示了在 Docker Swarm 环境中管理集群卷访问的灵活性。