【问题标题】:How to delete volumes in swarm cluster?如何删除 swarm 集群中的卷?
【发布时间】:2017-04-09 02:52:52
【问题描述】:

我有一个带有一个管理器和另一个普通节点的 swarm 集群,当我创建一个 swarm 服务时,我正在使用挂载类型、挂载源和挂载目标创建。它在管理器和节点中创建具有相同名称的卷并启动容器并且我的服务已启动。

当我发布服务时,与服务一起创建的卷没有被删除,这仍然很好。

我面临的问题是,当我删除具有相同端点的卷时,它只是删除了 swarm manager 中的卷,创建服务时在节点中创建的卷仍然存在。

我希望管理器删除与 swarm 服务一起创建的所有卷。有办法吗??

【问题讨论】:

  • docker 的版本是什么,这是经典的swarm 还是swarm 模式?鉴于时差,我猜 OP 和赏金正在寻找不同的东西。
  • Bounty 关注 Swarm 模式。 Docker - >=17.x

标签: docker docker-swarm docker-volume


【解决方案1】:

经过这么多的分析,这里是理论。

如果您指示 swarm 使用卷创建服务,则 Swarm 仅在集群内(即在多个节点上)执行创建服务的操作,是的,当您发送卷详细信息时,它确实也会创建卷,但在释放时释放时无法检查工作节点是否存在卷的服务它是docker中的错误

我已经为它在 docker 中提出了 bug。

到目前为止,除了在释放 swarm 服务后手动从工作节点释放卷之外别无他法。

【讨论】:

  • 你有你提出的那个问题的 URL 链接吗?
【解决方案2】:

据我所知,卷仅在创建容器的节点上创建。您的服务是否有可能无法在一个节点上启动,在另一个节点上结束并且不知何故 swarm 没有清理?如果是这样,请在 github 中写一个问题。

更新(来自 cmets):

根据docker service create documentation

命名卷是一种机制,用于将容器所需的持久数据与用于创建容器的映像和主机分离。命名卷由 Docker 创建和管理,即使当前没有容器在使用命名卷,它也会持续存在。命名卷中的数据可以在容器和主机之间共享,也可以在多个容器之间共享。 Docker 使用卷驱动程序来创建、管理和挂载卷。您可以使用 Docker 命令备份或恢复卷。

因此,如果您使用命名卷,正确的答案是为什么它们会在管理器上被删除以及它们曾在哪里创建?

【讨论】:

  • 良好的故障排除思路。我虽然一样。当您指示 swarm 创建具有副本 10 的服务时,它会拆分并决定每个节点上必须运行多少个容器。如果像你说的那样分配了任何服务,它只会在节点中创建卷。即使一切顺利,容器也成功运行,但无法释放工作节点中的卷,我已经手动验证了很多次。
  • 在经理上他们被删除了?如果您有一个命名卷,它应该持续存在吗? “命名卷是一种机制,用于将容器所需的持久数据与用于创建容器的映像和主机解耦。命名卷由 Docker 创建和管理,即使当前没有容器正在使用,命名卷也会持续存在它。命名卷中的数据可以在容器和主机之间共享,也可以在多个容器之间共享。Docker 使用卷驱动程序来创建、管理和挂载卷。”
  • 你是绝对正确的她。我也从这个角度思考过,从 docker 的角度来看,他们将卷、网络和容器识别为单独的服务。容量和网络可以在容器之间共享。我同意,在那种情况下,为什么他们在管理器节点中删除是十亿美元的问题?如果他们正在删除,他们应该在集群中删除,否则他们不应该在管理器中删除也是我对此的论点。
猜你喜欢
  • 1970-01-01
  • 2019-05-11
  • 2020-10-29
  • 1970-01-01
  • 1970-01-01
  • 2019-05-05
  • 1970-01-01
  • 2019-03-13
  • 1970-01-01
相关资源
最近更新 更多