Container-Speicherschnittstellentreiberfamilie: Wenn ein Node ausfällt, können Block-Volumes, die mit dem Node verbunden sind, nicht mit einem anderen Node verbunden werden.
摘要: Wenn ein Node ausfällt (aufgrund eines Node-Absturzes, Node-Down- oder Ausschaltszenarios), können die Block-Volumes, die mit dem Node verbunden sind, nicht mit einem anderen Node verbunden werden. ...
症状
Wenn ein Node ausfällt (aufgrund eines Node-Absturzes, Node-Down- oder Ausschaltszenarios), können die Block-Volumes, die mit dem Node verbunden sind, nicht mit einem anderen Node verbunden werden.
Das Problem ist nur für Block-Volumes spezifisch.
Das Problem tritt bei NFS-Volumes nicht auf.
Das Problem betrifft die folgenden Treiber:
- CSI-Treiber für PowerFlex
- CSI-Treiber für PowerMax
- CSI-Treiber für PowerScale
- CSI-Treiber für Unity
Dieses Problem hat keine Auswirkungen auf den CSI-Treiber für PowerStore.
Das Problem wird auf GitHub #282
Steps to Reproduce gemeldet:
- Erstellen Sie einen PVC1 und erstellen Sie POD1.
- Überprüfen Sie den Node, auf dem POD1 erstellt wurde, und schalten Sie den Node von vSphere aus.
- Wenn der Node nicht bereit ist, versuchen Sie, POD1 zu löschen (er bleibt im Beendigungsstatus hängen, da der Node nicht bereit ist.)
- Versuchen Sie, POD2 mit demselben PVC1 zu erstellen. POD2 befindet sich im Container-Erstellungsstatus mit diesem Fehler in der Beschreibungsausgabe.
Warning FailedAttachVolume 43s attachdetach-controller Multi-Attach error for volume "csivol-18eb3daee0" Volume is already used by pod(s) iscsipod1-p
Erwartetes Ergebnis: POD sollte gelöscht werden, auch wenn der Node nicht bereit ist.
Ergebnis: POD bleibt im Beendigungsstatus hängen, weil der Node nicht bereit ist.
Die folgende Ausgabe zeigt, wie der ursprüngliche Pod beendet wird und der neue Pod in Container Creating hängen bleibt:
kubectl get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES iscsipod1-p 1/1 Terminating 0 9m43s iscsipod2-p 0/1 ContainerCreating 0 55s
Mit dem folgenden Befehl wird angezeigt, dass der Node nicht bereit ist:
kubectl get nodes
NAME STATUS ROLES AGE VERSION
Node1 Ready control-plane,master 163d v1.23.0
Node2 Ready 162d v1.23.0
Node3 NotReady 162d v1.23.0
Mit dem folgenden Befehl wird angezeigt, dass der PVC immer noch an das PV gebunden ist:
kubectl get pvc -n NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE iscsipvc1-p Bound csivol-18eb3daee0 5Gi RWO powerstore-iscsi 10m
Mit dem folgenden Befehl wird die Warnung angezeigt:
kubectl describe pod -n
...
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
原因
解决方案
- Erzwingen Sie das Löschen des Pod, der auf dem ausgefallenen Node ausgeführt wurde.
kubectl delete po --force --grace-period=0
- Löschen Sie den Volume-Anhang zu dem Node, der ausgefallen ist.
kubectl delete volumeattachment
Das Volume kann jetzt mit dem neuen Node verbunden werden.
Lösung:
Diese Lösung wird aktualisiert, sobald eine Korrektur veröffentlicht wurde.