卷卷的GKE/Multi-Attach错误的卷声明已经完全附加

Ben*_*Ben 8 google-cloud-platform kubernetes google-kubernetes-engine persistent-volumes

问题似乎已经解决了很久以前,因为答案和评论没有提供真正的解决方案,我想从有经验的用户那里得到一些帮助

错误如下(当描述pod,它保持ContainerCreating状态):

Multi-Attach error for volume "pvc-xxx" Volume is already exclusively attached to one node and can't be attached to another 
Run Code Online (Sandbox Code Playgroud)

这一切都在GKE上运行.我有一个以前的集群,问题从未发生过.我在创建这个新集群时重用了相同的磁盘 - 不确定它是否相关

这是完整的yaml配置文件(我将离开相关的代码部分进行评论以突出显示它;它不是在有效使用时)

如果有明显的解决方法,请提前感谢

Jan*_*art 8

根据您的描述,您正在经历的是应该发生的事情.

您正在使用gcePersistentDisk您的PV/PVC的定义.的accessModeReadWriteOnce-这意味着该PV只能连接到单个节点(强调节点这里,可存在于同一运行多个荚节点使用相同的PV).你无能为力; gcePersistentDisk就像一个远程块设备,它不可能同时安装在多个节点上(除非只读).

有一个很好的表,显示哪些PV支持ReadWriteMany(即,同时在多个节点上写访问 ):

重要!卷只能一次使用一种访问模式安装,即使它支持很多.例如,GCEPersistentDisk可以由单个节点或ReadOnlyMany由许多节点挂载为ReadWriteOnce,但不能同时挂载.

  • 回到这个;强烈建议在您的广告连播/部署中使用nodeSelector?为了使其降落在相关节点上。另外,当您最终更改节点时会发生什么?您可能需要手动附加磁盘吗?感觉像使用磁盘比一开始看起来要难,而且远不是“自动化”的。以这个例子(https://cloud.google.com/kubernetes-engine/docs/tutorials/persistent-disk)为例,对于初学者来说,或多或少,他们只是没有暴露出这两个非常潜在的问题。有点让人误解 (2认同)

小智 7

您的部署 yaml 显示 5 个副本,这在ReadWriteOnce模式下无法与 GCE PD 一起使用。GCE PD 只能在ReadOnlyMany模式下挂接到多个节点。

如果您需要跨所有副本共享、可写的存储,那么您应该考虑像 NFS 或 Gluster 这样的多写入器解决方案。

如果您希望每个副本都有自己的磁盘,那么您可以使用 StatefulSets,每个副本都有一个 PVC。