무중단 서비스를 유지하면서 EKS nodegorup의 spec을 변경해야 하는 경우 적용
사전작업
- 서비스 이중화 : 서비스의 replicas를 2 이상 설정하여 가용성울 보장한다.
- request 값 확인 : 변경하려는 node의 spec이 서비스들의 request에 부족하지 않은지 확인한다.
- topologySpreadConstraints 확인 : hostName으로 최대한 노드 이름 기준으로 POD가 분산 되어 뜰 수 있도록 확인한다.
Node Spec 변경
신규 노드그룹 추가
테라폼 코드를 활용하거나, EKS console에서 Add node group 메뉴를 통해 원하는 스펙의 노드그룹을 추가한다.
기존 노드 taint 설정
기존 노드에 taint(NoSchedule)을 설정하여 이동하려는 POD가 기존 노드 그룹에 뜨는걸 방지한다.
node_name_1은 ip-xx-xx-xx-xx.ap-northeast-2.compute.internal 과 같은 형태이다.
$ kubectl taint nodes node_name_1 key=value:NoSchedule
$ kubectl taint nodes node_name_2 key=value:NoSchedule
기존 노드 Drain 설정
1번 노드에 drain 설정하여 POD를 신규 노드 그룹으로 이동시킨다.
$ kubectl drain node_name_1 –ignore-daemonsets
위와 같이 local storage를 사용하는 POD를 삭제할 수 없다는 메시지가 나오는 경우 아래와 같은 옵션을 추가하여 POD를 이동시킨다.
이때 이동하는 POD의 data는 전부 삭제되기 때문에 주의해야 한다.
$ kubectl drain node_name_1 –ignore-daemonsets –delete-emptydir-data
1번 노드에서 이동한 POD들이 정상적으로 뜬걸 확인 후 2번 노드도 동일하게 작업한다.
$ kubectl drain node_name_2 –ignore-daemonsets
기존 노드 그룹 삭제 처리
POD 들이 완전히 이동한 걸 확인 후 기존 노드 그룹은 삭제처리한다.
EKS console 혹은 테라폼 코드를 활용한다.
참고
https://aws.amazon.com/ko/premiumsupport/knowledge-center/eks-worker-node-actions/
https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/migrate-stack.html
https://halfmoon95.tistory.com/entry/EKS-Pod-%EC%88%98-%EC%A0%9C%ED%95%9C
'AWS' 카테고리의 다른 글
EC2 서버간 시간 동기화(Amazon Time Sync Service) (0) | 2023.01.03 |
---|---|
postgreSQL RDS dump 뜨기(pg_dumpall) (0) | 2023.01.03 |
ALB + Tomcat 환경에서 client ip 로깅하기 (0) | 2023.01.03 |
AWS Access key 종류 (0) | 2023.01.03 |
EC2 EBS 볼륨 증설(ubuntu os) (0) | 2023.01.03 |