728x90
🛠️ 쿠버네티스에서의 클러스터 유지보수
- 쿠버네티스의 클러스터는 여러 개의 노드로 구성되어 있다.
- 각 노드는 하나의 인스턴스로 구성되어 각자에 맞는 OS와 Kubelet 버전이 있을 것이다.
- 만약 이 OS 혹은 kubelet 버전을 업데이트하거나, 하드웨어를 교체하는 등 노드의 유지보수 작업이 수행될 때 파드의 서비스 중단 없이 안전하게 노드를 유지 보수하려면 어떻게 해야 할까?
- 쿠버네티스에는 pod의 스케줄링 정책을 커스텀하게 설정할 수 있는 여러 명령어를 제공한다.
- 이를 통해 업데이트가 필요한 노드의 파드를 다른 노드로 옮기고 안전하게 업데이트를 진행할 수 있다.
📌 drain
kubectl drain <nodeName> --ignore-daemonsets
- drain은 '물을 빼다'라는 뜻으로 쿠버네티스에서는 해당 노드의 파드를 제거하여 노드를 비우는 명령어로 사용된다.
- `kubectl drain` 명령어를 사용하게 되면 해당 노드는 SchedulingDisabled 상태가 되고, 노드에 더 이상 새로운 파드가 스케줄링(추가)되지 않는다.
- 또한, 해당 노드의 이미 스케줄링 되어있던 파드가 없어지고 다른 노드에 스케줄링된다.
- --ignore-daemonsets
- Replicaset, Statefulset 등에 의해 관리되고 있는 파드의 경우 다른 노드에 자동으로 스케줄링된다.
- 그러나, Daemonset의 경우 각 노드에 파드를 하나씩 실행하는 특성 때문에 노드가 클러스터에서 제거되면 해당 노드에서 실행 중인 파드는 그대로 제거되며 다른 파드에 추가적으로 스케줄링되지는 않는다.
- Standalone 파드의 경우 별도로 관리받고있지 않으므로 파괴된다.
- kubelet에 의해 관리되고 있는 Static 파드의 경우에는 해당 노드에 계속 남아있게 된다.
📌 cordon & uncordon
kubectl cordon <nodeName>
kubectl uncordon <nodeName>
- cordon의 경우 '어떠한 경계의 저지선`이라는 뜻으로 쿠버네티스에서 해당 노드에 이미 스케줄링되어 있는 파드는 건드리지 않고 추가적인 스케줄링을 제한하는 명령어로 사용된다.
- drain과의 차이점은 drain의 경우 기존에 스케줄링되어있는 파드 역시 제거하지만 cordon의 경우 새로 추가되는 파드만을 막는 데에 있다.
- cordon 명령어를 사용하면 해당 노드는 SchedulingDisabled 상태가 된다.
- 이후 uncordon을 사용하면 SchedulingDisabled에서 벗어나 다시 노드에 새로운 파드를 스케줄링할 수 있게 된다.
참고
Udemy - Certified Kubernetes Administrator (CKA) with Practice Tests
뤼튼
https://velog.io/@koo8624/Kubernetes-Drain-Cordon-and-Uncordon
728x90
'[DevOps] > Kubernetes' 카테고리의 다른 글
| CKA 기출 문제 복기 및 접근법 정리[24.11.24 응시] (0) | 2024.11.27 |
|---|---|
| CKA 시험 접수 -> 응시 -> 합격 후기(1트 합격) (9) | 2024.11.26 |
| kubernetes - initContainer : 초기화를 위한 컨테이너 (0) | 2024.01.17 |
| 쿠버네티스 배포 전략 간단히 알아보기 (2) | 2023.12.15 |
| kubernetes - DaemonSet, Static Pod (0) | 2023.12.04 |