CSN 스토리지 Pod 컨테이너가 ContainerCreating
인 상태로 멈춤
이 문서에서는 CSN 스토리지 Pod를 ContainerCreating
인 상태로 렌더링할 수 있는, 드물게 발생하는 문제에 대해 자세히 설명합니다. 또한 이 이슈를 해결하기 위한 해결 방법을 제공합니다.
원인
런타임 업그레이드는 Baremetal 노드의 운영 체제를 대체하는데, 이로 인해 IQN(iSCSI 정규화된 이름)이 다시 생성되고 드물지만 iscsi 로그인 실패가 발생할 수 있습니다. iscsi 실패는 포털 로그인에 성공하지 못한 특정 노드에서 발생합니다. 이 가이드에서는 이 특정 이슈에 대한 솔루션을 제공합니다.
이 가이드에서는 이러한 이슈를 해결하기 위해 Volumeattachment를 삭제하고 Pod를 다시 시작하는 프로세스를 간략하게 설명합니다.
Process
Pod가 ContainerCreating
상태로 유지되는 이유를 확인합니다.
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
여기서는 이슈가 발생한baremetal_machine
만 집중적으로 살펴봅니다.
다음 실행 명령을 실행하여 containerCreating에서 멈춘 Pod 이슈를 해결합니다.
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="
실행 명령은 다음 스크립트를 실행합니다.
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
이 명령은 Pod에서 pvc를 검색한 다음 volumeattachment
개체를 삭제합니다. 그런 다음 Pod를 삭제합니다. 이 Pod는 나중에 성공한 볼륨 연결 개체와 함께 다른 노드에서 다시 생성됩니다.
아직도 질문이 있으면 고객 지원팀에 문의하세요. 지원 플랜에 대한 자세한 내용은 Azure 지원 플랜을 참조하세요.