[kubernetes] Kubernetes에서 제거 된 포드는 어떻게 되나요?

방금 내 포드 중 일부가 kubernetes에 의해 제거되는 것을 봤습니다. 그들에게 무슨 일이 일어날까요? 그냥 그렇게 어슬렁 거리거나 수동으로 삭제해야하나요?



답변

내가 사용하는 빠른 해결 방법은 사건 후 제거 된 모든 포드를 수동으로 삭제하는 것입니다. 다음 명령을 사용할 수 있습니다.

kubectl get pods --all-namespaces -o json | jq '.items[] | select(.status.reason!=null) | select(.status.reason | contains("Evicted")) | "kubectl delete pods \(.metadata.name) -n \(.metadata.namespace)"' | xargs -n 1 bash -c


답변

네임 스페이스에서 실패 상태의 포드를 삭제하려면 default

kubectl -n default delete pods --field-selector=status.phase=Failed


답변

제거 된 포드는 수동으로 삭제해야합니다. 다음 명령을 사용하여 Error상태의 모든 포드를 삭제할 수 있습니다 .

kubectl get pods --all-namespaces --field-selector 'status.phase==Failed' -o json | kubectl delete -f -


답변

소프트 또는 하드 제거 임계 값 이 충족되었는지 여부에 따라 Pod의 컨테이너가 유예 기간 유무에 관계없이 종료되고 PodPhase으로 표시되고 FailedPod가 삭제됩니다. 애플리케이션이 배포의 일부로 실행되는 경우 Kubernetes에 의해 생성되고 예약 된 다른 포드가있을 것입니다. 아마도 제거 임계 값을 초과하지 않는 다른 노드에있을 것입니다.

제거가 반드시 임계 값으로 인해 발생할 필요는 없지만 노드kubectl drain비우기 위해 또는 Kubernetes API 를 통해 수동으로 호출 할 수도 있습니다 .


답변

Completed유지하려는 상태의 포드가있는 경우 :

kubectl get pods --all-namespaces --field-selector 'status.phase==Failed' -o json | kubectl delete -f -


답변

Kube-controller-manager기본적으로 작동하는 K8 설치와 함께 존재합니다. 기본값은 GC가 시작되기 전에 최대 12500 개의 종료 된 포드입니다.

K8s 문서에서 직접 :
https://kubernetes.io/docs/reference/command-line-tools-reference/kube-controller-manager/#kube-controller-manager

–terminated-pod-gc-threshold int32 기본값 : 12500
종료 된 포드 가비지 수집기가 종료 된 포드 삭제를 시작하기 전에 존재할 수있는 종료 된 포드의 수입니다. <= 0이면 종료 된 포드 가비지 수집기가 비활성화됩니다.


답변

누군가가 모든 네임 스페이스에 대해 제거 된 모든 포드를 자동으로 삭제하려는 경우 :

  • Powershell
    Foreach( $x in (kubectl get po --all-namespaces --field-selector=status.phase=Failed --no-headers -o custom-columns=:metadata.name)) {kubectl delete po $x --all-namespaces }
  • 세게 때리다
kubectl get po --all-namespaces --field-selector=status.phase=Failed --no-headers -o custom-columns=:metadata.name | xargs kubectl delete po --all-namespaces