Node 삭제도 pod 우아하게 종료하기
네이버 클라우드 쿠버네티스 서비스를 이용중에
쿠버네티스 버전 업데이트를 진행하던 중 작업중인 POD가 삭제되는 문제가 발생했다.
콘솔에서 제공되는 업데이트 방식은 2가지 존재한다.
ex) 기존 사용 노드 2대 일 때
- 노드풀 업데이트
추가 증가 노드 개수를 2, 서비스 불가 가능 노드 개수 0 으로 진행 할 경우 기존 노드풀에서 새로운 버전의 워커노드를 2대 추가 실행
새로운 워커노드 2대가 실행 완료되면 기존 워커노드 2대 제거
이 과정에서 pod들은 새로운 노드로 새로 생성됨 - 노드풀 추가 및 삭제
새로운 노드 풀 생성 (워커노드 동일하게 2대 설정)
새 워커노드 2대가 실행 완료되면 기존 노드를 1대씩 drain
중지하는 node의 pod가 안전하게 종료되었는지, 새로운 노드에 정상적으로 배포되었는지 확인 하며 기존 워커노드 2대 순차적으로 중지(drain) 후
기존 노드 풀 콘솔에서 삭제
1번 방법으로 처음 진행하였더니 daemon이 현재 작업중에 있고 graceful shotdown 설정을 해 두었으나,
daemon pod가 실행중인 worker node가 삭제되어버려 작업에 유실이 생겼다.
찾아보니 k8s 에서 제공하는 drain 기능을 이용하면 node를 종료하기 전 pod에 안전하게 shutdown 명령을 날려준다하여 2번 방식으로 테스트 한 결과
원하던 대로 daemon이 작업을 마치고 안전하게 종료되었으며, Node 삭제는 불편하지만 관리자가 확인 후 직접 삭제를 진행할 수 있었다.
drain 명령어
kubectl drain {중지할 node 명} --grace-period={graceful shutdown 초} --delete-emptydir-data --ignore-daemonsets
=> 선택한 노드의 pod를 다른곳에 이동 시키고, 스케줄링을 차단한다.
이때 pod의 graceful shutdown을 제공한다.
drain 이후 node 상태를 조회하면 아래와 같이 노드의 status 에서 SchedulingDisabled
를 확인 할 수 있다.
kubectl get nodes
NAME STATUS ROLES AGE VERSION
worker-01 Ready,SchedulingDisabled <none> 4d18h v1.27.9
worker-02 Ready <none> 4d18h v1.27.9