[kubernetes] 포드 내에서 컨테이너 다시 시작

test-1495806908-xn5jn2 개의 컨테이너 가있는 포드 가 있습니다. 나는 그들 중 하나를 다시 시작하고 싶습니다 container-test. 포드 내에서 단일 컨테이너를 다시 시작할 수 있습니까? 그렇지 않은 경우 포드를 어떻게 다시 시작합니까?

pod는 deployment.yamlwith를 사용하여 생성 되었습니다.

kubectl create -f deployment.yaml



답변

단일 컨테이너를 다시 시작할 수 있습니까?

을 통해 kubectl는 아니지만 클러스터 설정에 따라 “속임수”및 docker kill the-sha-goes-here을 사용할 수 있습니다. 이로 인해 kubelet이 “실패한”컨테이너를 다시 시작하게됩니다 (물론 Pod의 다시 시작 정책이 이것이 수행해야하는 작업이라고 가정).

포드 다시 시작하려면 어떻게 해

이는 포드가 생성 된 방법에 따라 다르지만 제공 한 포드 이름에 따라 ReplicaSet의 감독하에있는 것처럼 보이므로 kubectl delete pod test-1495806908-xn5jnkubernetes가 그 자리에 새 포드를 만들 수 있습니다 (새 포드에는 다른 이름이므로 다시 kubectl get pods는 돌아올 것으로 기대하지 마십시오 test-1495806908-xn5jn)


답변

포드를 삭제하고 Kubernetes가 다시 생성하도록하는 대신 특정 컨테이너를 다시 시작하려는 경우가 있습니다.

kubectl exec POD_NAME -c CONTAINER_NAME /sbin/killall5나를 위해 일하는 것.

( 아래 권장 사항에 따라 명령을에서 reboot로 변경했습니다 /sbin/killall5.)


답변

포드와 컨테이너는 모두 임시적이므로 다음 명령을 사용하여 특정 컨테이너를 중지하면 k8s 클러스터가 새 컨테이너를 다시 시작합니다.

kubectl exec -it [POD_NAME] -c [CONTAINER_NAME] -- /bin/sh -c "kill 1"

그러면 SIGTERM컨테이너에서 실행되는 기본 프로세스 인 프로세스 1에 신호 가 전송됩니다 . 다른 모든 프로세스는 프로세스 1의 하위가되며 프로세스 1이 종료 된 후 종료됩니다. 보낼 수있는 다른 신호 는 kill 맨 페이지 를 참조하십시오 .


답변

kubernetes를 사용하는 모든 이유는 컨테이너를 관리하므로 포드에있는 컨테이너의 수명주기에 대해별로 신경 쓸 필요가 없기 때문입니다.

deployment사용 하는 설정이 있기 때문에 replica set. 을 사용하여 포드를 삭제할 수 있으며 kubectl delete pod test-1495806908-xn5jnkubernetes는 다운 타임없이 2 개의 컨테이너가있는 새 포드 생성을 관리합니다. 포드에서 단일 컨테이너를 수동으로 다시 시작하려고하면 kubernetes의 모든 이점이 무효화됩니다.


답변

위의 모든 답변은 포드 삭제에 대해 언급했지만 동일한 서비스의 포드가 많은 경우 각각을 삭제하는 것이 지루할 것입니다.

따라서 다음 솔루션을 제안하고 다시 시작하십시오 .

  • 1) 스케일을 0으로 설정 :

     kubectl scale deployment <<name>> --replicas=0 -n service
    

    위의 명령은 이름이있는 모든 포드를 종료합니다. <<name>>

  • 2) 포드를 다시 시작하려면 복제본을 0 이상으로 설정합니다.

    kubectl scale deployment <<name>> --replicas=2 -n service
    

    위의 명령은 2 개의 복제본으로 포드를 다시 시작합니다.


답변

우리는 매우 편리한 명령 줄을 사용하여 통합 포드에 새로운 이미지를 강제로 재배포합니다.
알파인 컨테이너는 모두 PID 5에서 “sustaining”명령을 실행하는 것으로 나타났습니다. 따라서 SIGTERM신호를 보내면 컨테이너가 다운됩니다. imagePullPolicy로 설정 Always되면 kubelet이 컨테이너를 다시 가져올 때 최신 이미지를 다시 가져옵니다.

kubectl exec -i [pod name] -c [container-name] -- kill -15 5


답변

Dockerfile의에 지정된 프로세스 죽이기 CMD/ ENTRYPOINT나를 위해 일을. (컨테이너가 자동으로 다시 시작됨)

내 컨테이너에서 재부팅이 허용되지 않았으므로이 해결 방법을 사용해야했습니다.