Kubernetes가 ContainerCreating에서 멈췄습니다.

Kubernetes가 ContainerCreating에서 멈췄습니다.

내 Kubernetes 클러스터의 Pod가 생성을 실행한 후 "ContainerCreating" 상태에서 멈췄습니다. 이 작업이 중단된 이유를 진단하기 위해 이 작업에 대한 로그를 보려면 어떻게 해야 합니까? kubectl logs컨테이너가 보류 중이 아닌 상태에 있어야 하므로 작동하지 않는 것 같습니다.

답변1

kubectl describe pods나열할 것이다일부(전부는 아니지만 대부분) 이미지 가져오기, 컨테이너 시작을 포함하여 포드와 관련된 이벤트입니다.

답변2

더 많은 정보는 이벤트를 통해 제공될 수 있습니다.

kubectl get events --all-namespaces  --sort-by='.metadata.creationTimestamp'

그러나 이 버그로 인해 정렬 이벤트가 올바르게 작동하지 않을 수 있습니다.https://github.com/kubernetes/kubernetes/issues/29838


또는:

Kubernetes 1.18부터 모든 새로운 객체에는 서버 측 적용을 위한 메타데이터가 있으므로 이벤트를 정렬하는 새로운 방법을 제공합니다.

kubectl get events --sort-by=".metadata.managedFields[0].time"

에서:https://github.com/kubernetes/kubernetes/issues/29838#issuecomment-789660546


제 경우에는 포드와 관련된 이벤트가 있었습니다.

default       13s         Warning   FailedMount               Pod          Unable to mount volumes for pod "restore-db-123-1-5f24s_default(9b7df264-2976-11ea-bb8f-42010a9a002c)": timeout expired waiting for volumes to attach or mount for pod "default"/"restore-db-123-1-5f24s". list of unmounted volumes=[nfsv]. list of unattached volumes=[nfsv default-token-hxrng]

답변3

제 경우에는 docker의 인터넷 액세스가 차단되었습니다. 프록시를 사용하여 해결되었습니다(sandylss의 의견을 사용하여):

  1. minikube stop
  2. minikube delete
  3. export http_proxy=http://user:pass@ip:port
  4. export https_proxy=http://user:pass@ip:port
  5. export no_proxy=192.168.99.0/24
  6. minikube start --logtostderr --v=0 --bootstrapper=localkube --vm-driver hyperv 
      --hyperv-virtual-switch "Primary Virtual Switch" --docker-env HTTP_PROXY=$http_proxy \
      --docker-env HTTPS_PROXY=$https_proxy --docker-env NO_PROXY=$no_proxy
    
  7. export no_proxy=$no_proxy,$(minikube ip)
  8. export NO_PROXY=$no_proxy,$(minikube ip)

그런 다음 docker가 인터넷에 액세스할 수 있는지 확인하려면 다음을 실행하세요.

$ docker pull tutum/hello-world

클러스터에서(를 사용하여 클러스터에 연결 minikube ssh) 다운로드가 시작되면 프로세스를 중지하세요.

두 번째 문제는 느린 인터넷 연결이었습니다. 필요한 Docker 이미지는 약 100MB이므로 Docker 컨테이너와 Kubernetes Pod는 모두 30분 동안 그대로 \pause유지 됩니다.ContainerCreating

docker가 이미지를 다운로드 중인지 확인하려면 다음을 실행하세요.

$ ls -l /var/lib/docker/tmp

다운로드 중인 임시 이미지 파일을 표시하는 클러스터에서 그렇지 않으면 비어 있습니다.

Minikube에서 개발하고 VPN을 사용하는 경우 docker는 다음을 통해 VPN을 사용할 수 있습니다.바이올리니스트. 즉, docker는 fiddler의 ip:port에 연결되고 fiddler는 VPN에 연결됩니다. 그렇지 않으면 호스트와 minikube VM 간에 VPN이 공유되지 않습니다.

답변4

내가 이 문제를 겪은 적이 있는 이유는 내 리소스 선언이 실수로 매우 작았기 때문입니다.

리소스: 제한: CPU: 1000m 메모리: 1024M 요청: CPU: 1000m 메모리: 1024M

리소스: 제한: CPU: 1000m 메모리: 1024m 요청: CPU: 1000m 메모리: 1024m

m을 활용하면 리소스 사용에 매우 큰 차이가 발생합니다. 내 컨테이너에 충분한 메모리를 할당하지 않았기 때문에 ContainerCreating에서 멈췄습니다.

관련 정보