개요
worker node의 operating system을 update시 운영중인 service에 영향을 주지 않고 update하는 방법을 알아보겠습니다.
Node가 갑자기 종료되었을 때 현상
k8s에서는 5분간 worker node가 살아나지 않으면 Node가 죽었다고 판단하여 해당 node에 할당되 pod를 종료 처리 합니다.
그리고 replicaset으로 생성된 pod는 다른 node에 다시 생성하고 replicaset으로 생성하지 않는 pod는 사라지게 됩니다.
Node를 정상적으로 종료 하는 방법
drain 사용
#kubectl drain worker1
위 명령어는 worker1에 pod를 scheduling 할 수 없게 만듭니다. 그리고 할당된 pod를 정상 종료 시키고 pod를 다른 node에 옮깁니다.
참고로 daemon-set이 배포되어있으면 drain이 안됨으로 강제로 drain이되게 명령을 내려주어야합니다.
#kubectl drain --ignore-daemonsets worker1
위 명령어를 실행하고 나면 node의 STATUS에 SchedulingDisabled가 됩니다. 즉 더이상 새로운 Pod가 해당 node에 scheduling되지 않는 것을 뜻합니다.
drain은 어떻게 scheduling을 막을까?
taint를 설정하여 scheduilng을 막습니다.
taint는 node에 설정된 조건과 동일한 조건을 가진 pod만 schuduilng 할 떄 사용하는 기능입니다.
아래는 drain을 한 worker1의 taint 정보 입니다.
Drain Node를 복구 하는 방법
#kubectl uncordon worker1
위명령어는 worker1에 pod를 scheduling 할 수 있게 합니다.
Node에 scheduling 막는 방법
#kubectl cordon worker1
위 명령어를 단순히 node에 scheduling만을 막고 싶을 때 사용 합니다.
Drain와 cordon의 차이점
cordon: node에 새 pod 배치를 방지합니다. 기존 pod는 영향받지 않습니다.
drain: node에 새 pod 배치를 방지하고, 또한 해당 node에서 실행 중인 모든 pod를 다른 node로 옮깁니다.
정리
Node를 OS를 업데이트 하고 싶을때는 drain을 사용하여 Pod를 모두 안전하게 다른 곳으로 이동 후 update하면됩니다.
Next Post
'Cloud > k8s-CKA' 카테고리의 다른 글
[CKA] 22. k8s cluster backup 방법 (0) | 2023.05.07 |
---|---|
[CKA] 21. k8s cluster upgrade (0) | 2023.05.05 |
[CKA] 19. multi container pods (0) | 2023.04.20 |
[CKA] 18. Environment Variables (0) | 2023.03.28 |
[CKA] 17. command and argument (0) | 2023.03.25 |