容器存储接口驱动程序系列:当节点宕机时,连接到该节点的数据块卷无法连接到另一个节点

摘要: 当节点宕机时(由于节点崩溃、节点停机、断电情形),连接到该节点的数据块卷无法连接到另一个节点。

本文适用于 本文不适用于 本文并非针对某种特定的产品。 本文并非包含所有产品版本。

症状

当节点宕机时(由于节点崩溃、节点停机、断电情形),连接到该节点的数据块卷无法连接到另一个节点。

此问题仅特定于数据块卷。

NFS 卷不会出现此问题。

问题会影响以下驱动程序:

  • 适用于 PowerFlex 的 CSI 驱动程序
  • 适用于 PowerMax 的 CSI 驱动程序
  • 适用于 PowerScale 的 CSI 驱动程序
  • 适用于 Unity 的 CSI 驱动程序

此问题不会影响 PowerStore 的 CSI 驱动程序。

GitHub #282本超链接将引导您访问非 Dell Technologies 运营的网站。

上报告了问题 重现步骤: 

  1. 创建 PVC1 并创建 POD1。
  2. 检查在其中创建 POD1 的节点,然后从 vSphere 关闭节点。
  3. 当节点变为未就绪状态时,尝试删除 POD1(由于节点未就绪,它卡在终止状态。)
  4. 尝试使用相同的 PVC1 创建 POD2。POD2 处于容器创建状态,描述输出中显示此错误。
Warning FailedAttachVolume 43s attachdetach-controller Multi-Attach error for volume "csivol-18eb3daee0" Volume is already used by pod(s) iscsipod1-p 

预期结果:即使节点未就绪,也应删除 POD。

结果:由于节点未就绪,POD 卡在终止状态。

以下输出显示原始 Pod 终止,新 Pod 卡在容器创建中:

kubectl get pods -o wide

NAME        READY STATUS            RESTARTS AGE   IP     NODE    NOMINATED NODE READINESS GATES
iscsipod1-p 1/1   Terminating       0        9m43s <IP>   <Node3> <none>         <none>
iscsipod2-p 0/1   ContainerCreating 0        55s   <none> <Node2> <none>         <none>


以下命令显示节点未就绪:

kubectl get nodes

NAME  STATUS   ROLES                AGE  VERSION
Node1 Ready    control-plane,master 163d v1.23.0
Node2 Ready    <none>               162d v1.23.0
Node3 NotReady <none>              162d v1.23.0


以下命令显示 PVC 仍绑定到 PV:

kubectl get pvc -n <namespace>

NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
iscsipvc1-p Bound csivol-18eb3daee0 5Gi RWO powerstore-iscsi 10m


以下命令会显示警告:

kubectl describe pod -n <namespace>

...
node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 108s default-scheduler Successfully assigned default/iscsipod2-p to lglw3178
Warning FailedAttachVolume 108s attachdetach-controller Multi-Attach error for volume "csivol-18eb3daee0" Volume is already used by pod(s) iscsipod1-p

原因

根本原因是附加器 sidecar 无法为关闭的节点发送 ControllerUnpublishVolume()。请参阅 GitHub #215 中包含的信息 本超链接将引导您访问非 Dell Technologies 运营的网站。

解决方案

解决办法:
  1. 强制删除在关闭的节点上运行的 Pod。
kubectl delete po <pod name> --force --grace-period=0
  1. 删除与发生故障的节点的卷连接。
kubectl delete volumeattachment <volumeattachment>

现在可以将卷连接到新节点。

解决方案:
此解决方案将在发布修复程序时更新。
文章属性
文章编号: 000200778
文章类型: Solution
上次修改时间: 07 7月 2023
版本:  8
从其他戴尔用户那里查找问题的答案
支持服务
检查您的设备是否在支持服务涵盖的范围内。