Kontejner podů úložiště CSN se zablokoval ContainerCreating

Tento dokument podrobně popisuje uživatelské prostředí vzácného problému, který může vykreslit pody úložiště CSN ve ContainerCreating stavu. Poskytuje také alternativní řešení problému.

Příčina

Upgrade za běhu nahrazuje operační systém uzlů Baremetal, které znovu vytvoří IQN (kvalifikovaný název iSCSI) a může způsobit selhání přihlášení iscsi ve výjimečných případech. K selhání iscsi dochází na konkrétních uzlech, kde přihlášení k portálům není úspěšné. Tato příručka obsahuje řešení tohoto konkrétního problému.

Tento průvodce stručně popisuje proces odstranění svazku a restartování podu, aby se problém vyřešil.

Zpracovat

Zkontrolujte, proč pod zůstává ve ContainerCreating stavu:

Warning FailedMapVolume 52s (x19 over 23m) kubelet MapVolume.SetUpDevice failed for volume "pvc-b38dcc54-5e57-435a-88a0-f91eac594e18" : rpc error: code = Internal desc = required at least 2 portals but found 0 portals

Tady se zaměříme jenom na baremetal_machine to, kde k problému došlo.

Spuštěním následujícího příkazu spuštění vyřešte problém s zablokováním podu v containerCreating.

az networkcloud baremetalmachine run-command --bare-metal-machine-name <control-plane-baremetal-machine> \
--subscription <subscription> \
--resource-group <cluster-managed-resource-group> \
--limit-time-seconds 60 \
--script "cG9kcz0kKGt1YmVjdGwgZ2V0IHBvZHMgLW4gbmMtc3lzdGVtIHxncmVwIC1pIGNvbnRhaW5lcmNyZWF0aW5nIHwgYXdrICd7cHJpbnQgJDF9JykKCmZvciBwb2RuYW1lIGluICRwb2RzOyBkbwogICAga3ViZWN0bCBkZXNjcmliZSBwbyAkcG9kbmFtZSAtbiBuYy1zeXN0ZW0KCiAgICBwdmNuYW1lPSQoa3ViZWN0bCBnZXQgcG8gJHBvZG5hbWUgLW4gbmMtc3lzdGVtIC1vIGpzb24gfCBqcSAtciAnLnNwZWMudm9sdW1lc1swXS5wZXJzaXN0ZW50Vm9sdW1lQ2xhaW0uY2xhaW1OYW1lJykKCiAgICBwdm5hbWU9JChrdWJlY3RsIGdldCBwdmMgJHB2Y25hbWUgLW4gbmMtc3lzdGVtIC1vIGpzb24gfCBqcSAtciAnLnNwZWMudm9sdW1lTmFtZScpCgogICAgbm9kZW5hbWU9JChrdWJlY3RsIGdldCBwbyAkcG9kbmFtZSAtbiBuYy1zeXN0ZW0gLW9qc29uIHwganEgLXIgJy5zcGVjLm5vZGVOYW1lJykKCiAgICB2b2xhdHRhY2hOYW1lPSQoa3ViZWN0bCBnZXQgdm9sdW1lYXR0YWNobWVudCB8IGdyZXAgLWkgJHB2bmFtZSB8IGF3ayAne3ByaW50ICQxfScpCgogICAga3ViZWN0bCBkZWxldGUgdm9sdW1lYXR0YWNobWVudCAkdm9sYXR0YWNoTmFtZQoKICAgIGt1YmVjdGwgY29yZG9uICRub2RlbmFtZSAtbiBuYy1zeXN0ZW07a3ViZWN0bCBkZWxldGUgcG8gLW4gbmMtc3lzdGVtICRwb2RuYW1lCmRvbmU="

Příkaz spustit spustí následující skript.

pods=$(kubectl get pods -n nc-system |grep -i containercreating | awk '{print $1}')

for podname in $pods; do
    kubectl describe po $podname -n nc-system

    pvcname=$(kubectl get po $podname -n nc-system -o json | jq -r '.spec.volumes[0].persistentVolumeClaim.claimName')

    pvname=$(kubectl get pvc $pvcname -n nc-system -o json | jq -r '.spec.volumeName')

    nodename=$(kubectl get po $podname -n nc-system -ojson | jq -r '.spec.nodeName')

    volattachName=$(kubectl get volumeattachment | grep -i $pvname | awk '{print $1}')

    kubectl delete volumeattachment $volattachName

    kubectl cordon $nodename -n nc-system;kubectl delete po -n nc-system $podname
done

Příkaz načte pvc z podu a pak objekt odstraní volumeattachment . Potom odstraní pod. Pod se později znovu vytvoří na jiném uzlu spolu s úspěšným objektem přílohy svazku.

Pokud máte stále dotazy, obraťte se na podporu. Další informace o plánech podpory najdete v tématu Plány podpory Azure.