EC2 Fault에 따른 노드 축출

IT/EKS 2022. 9. 2. 09:23
반응형

EC2를 쓰다보면 장비랑 하드웨어에 이상이 생겨서, 내 버츄얼 호스트 세입자를 내쫓아내야하는 케이스가 생긴댜

사이클은 예측하기 어렵지만 지금까지 경험상 대략 반년에 한번 정도는 생겼던 것 같댜

 

뭐 잡론은 접고 바로 스텝부터 밟아보쟈

 

1. 대상 노드 조회

- kubectl get node -l ~~~ -L | grep ~~~

- aws 측에서 node retire 공지가 올 때, 인스턴스 id (i-*) 형태로 온다.

- 이거로 어떤 워커노드에 문제가  생겼는지 조회해서 찾는다.

 

2. 워커노드 오토스케일링 그룹을 +1

- 지금부터 할 작업은 워커노드 1대를 축출하는 작업이다.

- 안에 기동되어 있던 파드는 즉각적으로 다른 노드로 이사가서 기동되고 서비스를 수행해야 한다

- 원래 이 부분은 옵션인 단계이다. 어차피 노드 컨트롤러가 알아서 1대 다시 기동할텐데, 나는 그 시간까지 기다리기 싫으니 미리 돗자리 펴는 것 ㅇㅇ

- 이 부분은 콘솔로 해도 되고, 테라폼으로 해도 되고, 각자 원하는 방법으로 한다. 

 

3. 워커노드 drain 

- 워커노드를 방출하는 단계이다

- kubectl drain 문제되는_노드명 --ignore-daemonsets --force --delete-local-data

- drain 노드를 하게 되면, 해당 노드가 스케줄링 불가 상태로 빠지면서 안에 파드가 모두 축출되기 시작한다.

- drain에는 kubectl cordon 과정도 포함되어 있으니, 굳이 drain에 앞서 cordon을 먼저 할 필요까진 없다.

- ignore daemonsets은 kube system critical 레벨로 기동되는 쿠버프록시나 코어dns, CNI 파드들의 필수 생존 여부를 무시하는 옵션이다. 이 옵션없이 drain하는데 에러가 뜨면 데몬셋 무시로 진행해보도록 하자.

- force는 강제이고, delete local data는 의미에서 뭔지 알 수 있다.

 

4. 노드 삭제

- kubectl delete node 이상한노드명

- 워커노드를 ETCD에서 삭제한다.

- 나머지는 다시 개수를 맞추려고, 1번에서 늘렸던 1개 혹은 2개가 추가로 늘어난 뒤, 스케일링을 줄이면 원래 개수로 맞춰지고 원복할 수 있다 ㅇㅇ

 

 

반응형

설정

트랙백

댓글