Kubernetes를 사용하다보면, Pod가 Terminating 상태에서 종료(즉, Pod의 삭제)되지 않고 계속 머물러있는 경우가 종종 발생한다.
이렇게 Pod의 Terminating 교착 상태가 된 원인은 정확히 알 수는 없고,
단지 이런 경우에 Pod를 종료시킬 수 없어서 당혹스럽다.
Ian Miell 이라는 사람이 상황별로 교착 상태에 빠진 Pod를 종료하는 방법을 정리한 Web Docs가 있어서 나한테 맞게 다시 메모를 해봤다.
$ kubectl delete -n istio-system deployment grafana
##
## 위 delete 명령을 수행 후, 1분이 넘도록 Pod가 Terminating 상태라면
## 이 Pod는 계속 Terminating 상태로 남고, 아래 예시처럼 Delete되지 않을 것이다.
##
$ kubectl get -A pod
NAMESPACE NAME READY STATUS RESTARTS AGE
istio-system grafana-68cc7d6d78-7kjw8 1/1 Terminating 0 37d
... 중간 생략 ...
$
위 현상을 세분화해서 해결 방법을 설명해보겠다.
Pod의 상세 정보를 확인
##
## (A) 강제로 Pod를 삭제하는 방법
##
$ kubectl delete pods <pod> --grace-period=0 --force
## 웬만하면, 위 명령으로 Pod가 삭제되지만
## 만약 계속 Pod의 찌끄러기가 남아 있다면, 아래 (B) 절차를 추가로 수행해야 한다.
##
## (B) 위 명령을 수행하고도 Pod이 Stuck 상태 또는 Unknown 상태로 남아 있다면
## 아래의 방법으로 Pod를 끝장낼 수 있다.
##
$ kubectl patch pod <pod> -p '{"metadata":{"finalizers":null}}'
Reference
Kubernetes.io에 Pod의 강제 종료에 대한 상세한 설명을 있으니, 시간이 있다면 꼼꼼히 읽어보면 도움이 된다.
https://kubernetes.io/docs/tasks/run-application/force-delete-stateful-set-pod/
그리고 위에서 finalizers를 강제로 null로 patch했는데, finalizers에 관한 상세한 설명이 궁금하면 아래 kubernetes web docs를 읽어보는 것이 좋다.
https://kubernetes.io/docs/concepts/overview/working-with-objects/finalizers/
게시물 작성자: sejong.jeonjo@gmail.com
'kubernetes' 카테고리의 다른 글
Kubernetes 또는 OCP에서 REST API 사용 (0) | 2022.01.22 |
---|---|
Kubernetes 또는 OCP에 SR-IOV 네트워크 추가 (0) | 2022.01.13 |
Kubernetes Metrics Server 설치 (0) | 2021.11.26 |
[TODO] Read - Istio Memo (0) | 2021.11.23 |
kubernetes pod 내부의 iptables 구성 확인 (ISTIO ENVOY를 사용한 경우) (0) | 2021.11.22 |