본문 바로가기

개발하자

Kubernetes - 포드가 컨테이너에 남아 생성 상태

반응형

Kubernetes - 포드가 컨테이너에 남아 생성 상태

나는 쿠베르네테스가 아직 배울 것이 많은 모든 것에 익숙하지 않다.

두 노드 Kubernetes 클러스터를 생성하고 두 노드(마스터 및 작업자)가 작업을 수행할 준비가 되어 있습니다.

[monkey@k8s-dp1 nginx-test]# kubectl get nodes
NAME      STATUS    ROLES     AGE       VERSION
k8s-dp1   Ready     master    2h        v1.9.1
k8s-dp2   Ready     <none>    2h        v1.9.1

또한, 모든 쿠버네티스 포드는 괜찮아 보입니다.

[monkey@k8s-dp1 nginx-test]# kubectl get pods --all-namespaces
NAMESPACE     NAME                              READY     STATUS    RESTARTS   AGE
kube-system   etcd-k8s-dp1                      1/1       Running   0          2h
kube-system   kube-apiserver-k8s-dp1            1/1       Running   0          2h
kube-system   kube-controller-manager-k8s-dp1   1/1       Running   0          2h
kube-system   kube-dns-86cc76f8d-9jh2w          3/3       Running   0          2h
kube-system   kube-proxy-65mtx                  1/1       Running   1          2h
kube-system   kube-proxy-wkkdm                  1/1       Running   0          2h
kube-system   kube-scheduler-k8s-dp1            1/1       Running   0          2h
kube-system   weave-net-6sbbn                   2/2       Running   0          2h
kube-system   weave-net-hdv9b                   2/2       Running   3          2h

그러나 클러스터에 새 배포를 생성하려고 하면 배포가 생성되지만 해당 포드가 적절한 실행 상태로 전환되지 않습니다(예:

[monkey@k8s-dp1 nginx-test]# kubectl apply -f https://k8s.io/docs/tasks/run-application/deployment.yaml
deployment "nginx-deployment" created

[monkey@k8s-dp1 nginx-test]# kubectl get pods --all-namespaces
NAMESPACE     NAME                                READY     STATUS              RESTARTS   AGE
default       nginx-deployment-569477d6d8-f42pz   0/1       ContainerCreating   0          5s
default       nginx-deployment-569477d6d8-spjqk   0/1       ContainerCreating   0          5s
kube-system   etcd-k8s-dp1                        1/1       Running             0          3h
kube-system   kube-apiserver-k8s-dp1              1/1       Running             0          3h
kube-system   kube-controller-manager-k8s-dp1     1/1       Running             0          3h
kube-system   kube-dns-86cc76f8d-9jh2w            3/3       Running             0          3h
kube-system   kube-proxy-65mtx                    1/1       Running             1          2h
kube-system   kube-proxy-wkkdm                    1/1       Running             0          3h
kube-system   kube-scheduler-k8s-dp1              1/1       Running             0          3h
kube-system   weave-net-6sbbn                     2/2       Running             0          2h
kube-system   weave-net-hdv9b                     2/2       Running             3          2h

문제가 무엇인지 파악하는 방법은 잘 모르겠지만 예를 들어 a를 실행하면 다음과 같은 의심스러운 이벤트가 표시됩니다.

<invalid>   <invalid>    1         nginx-deployment-569477d6d8-f42pz.15087c66386edf5d   Pod
             Warning   FailedCreatePodSandBox   kubelet, k8s-dp2        Failed create pod sandbox.

하지만 나는 여기서 어디로 가야 할지 모르겠다. 나는 또한 nginx 도커 이미지 자체가 에 나타나지 않는다는 것을 알 수 있다.

문제에 대해 자세히 알아보려면 어떻게 해야 합니까? 내가 쿠버네티스 조직에서 뭔가 근본적인 것을 놓쳤나요?

--- 새로운 정보 ---

도움이 될 경우의 배경 정보를...

Kubernetes 노드가 Cent에서 실행 중입니다.윈도우즈 10 Hyper-v에서 호스팅되는 OS 7 VM

--- 새로운 정보 ---

실행 중에는 다음 경고가 표시됩니다.

Warning  NetworkNotReady         1m                             kubelet, k8s-dp2  network is not ready: [runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized]

--- 새로운 정보 ---

업무 시간이 끝난 다음 날 밤 Kubernetes를 실행하는 Hyper-v VM의 전원을 끄고 오늘 아침 사무실로 돌아오면서 Kubernetes VM의 전원을 다시 켜서 약 15분 동안 다음 명령을 실행했습니다.

이러한 nginx 포드에 대해서는 어제와 동일하게 표시되었지만 지금은 명령어가 nginx 포드를 포함한 모든 포드를 표시하고 있습니다. 즉, 마스터 노드와 작업자 노드 VM을 모두 완전히 재부팅한 후 문제가 자동으로 해결되었습니다.

이제 다시 전체 재부팅을 다시 수행했는데 모든 포드가 실행 중으로 표시되어 좋습니다.




자세한 정보를 보려면 사용




Kubernetes 마스터 노드와 Kubernetes 작업자 노드를 실행하는 두 VM을 모두 전체 재부팅하면 포드가 모두 다음과 같이 표시됩니다(참고: 처음 재부팅한 후 문제의 포드가 상태로 전환되는 데 약 15-20분이 걸렸고 이후 재부팅 시 문제의 포드가 상대적으로 훨씬 빠른 3-5분이 소요되었습니다).




노력하다




를 사용하면 모든 이벤트가 표시됩니다. 경우에 따라 배포가 원격에서 도커 이미지를 계속 가져올 수 있으므로 상태는 계속 다음과 같이 표시됩니다.




나는 어제 같은 문제에 직면했다. ContainerCreating 상태에서 이러한 포드를 설명할 때 문제는 CNI, 실패 및 포드가 ContainerCreating 상태를 유지하는 것이었습니다. 그래서 나는 컨트롤 플레인에서 CNI를 삭제하고 재배치한다. 모든 포드는 1분 이내에 작동 상태로 변경됩니다.




디팟을 삭제할 수 있습니다. 디팟은 자동으로 다시 생성됩니다.

kubectl delete pod -n namespace podname



이 경우 배포 네임스페이스에 Secret 또는 Say ConfigMap이 누락되었기 때문입니다.




배포에서 명령을 실행하여 진행 중인 이벤트를 확인하거나 배포가 회전하는 포드에서 명령을 실행할 수 있습니다.

클러스터에 리소스가 부족할 수 있습니다. 실행 중인 포드에서 사용 중인 명령을 확인하여 포드 중 하나가 리소스를 모두 사용하는지 확인합니다.

이것이 충분히 도움이 되었으면 좋겠다.




동일한 문제가 있었지만 내 쪽의 문제는 클러스터가 이미지를 가져오는 데 너무 많은 시간이 걸린다는 것이었습니다. 빠른 클러스터 다시 시작이 프로세스를 더 빠르게 만드는 데 도움이 될 수 있습니다.




이 명령어가 ContainerCreating Status와 관련된 문제를 찾는 데 많은 도움이 되었다는 것을 공유합니다.

kubectl get events --sort-by=.metadata.creationTimestamp



오류:

kubectl -n 데모 포드 로그 kaniko-pod -- 서버에서 오류를 추적합니다(BadRequest): 포드의 컨테이너 "kaniko-demo"가 시작 대기 중입니다: 컨테이너 생성

kubectl apply -f /home/filename/filename/filename-rewayy/k3s/kubnetes-deployment-01.vilename/filename-filename-pod 변경되지 않은 포드/kaniko-pod 생성됨


반응형