1. Node 스케줄링 중단 및 허용
- 컨테이너를 포함한 Pod는 node에서 실행됨
- node는 Control-plane에 의해 관리
- 특정 node의 스케줄링 중단(cordon) 및 허용(uncordon)
# node의 스케줄링 중단
$ kubectl cordon <NODE_NAME>
# node의 스케줄링 허용
$ kubectl uncordon <NODE_NAME>
2. Node 비우기
- 특정 node에서 실행중인 pod 비우기(drain) 및 제거(delete)
kubectl drain <NODE_NAME> --ignore-daemonsets --force
✍ --ignore-daemonsets : daemonset-managed pod들은 ignore
✍ --force=false : RC, RS, Job, DaemonSet 또는 StatefulSet에서 관리하지 않는 Pod까지 제거
※ 문제1: 노드 비우기
- 작업 클러스터 : k8s
- k8s-worker2 노드를 스케줄링 불가능하게 설정하고, 해당 노드에서 실행 중인 모든 Pod을 다른 node로 reschedule 하세요.
- 작업 클러스터 위치 확인
- k8s-worker2 노드에서 실행중인 pod들을 drain
3-1. 다른 node로 reschedule된 것을 확인
3-2. k8s-worker2 노드 상태가 SchedulingDisabled된 것을 확인
3. Node Taint & Toleration
- worker node에 taint가 설정된 경우 동일 값의 toleration이 있는 Pod만 배치됨
- toleration이 있는 Pod는 동일한 taint가 있는 node를 포함하여 모든 node에 배치됨
- effect 필드 종류
- NoSchedule : toleration이 맞지 않으면 배치 되지 않음
- PreferNoSchedule : toleration이 맞지 않으면 배치되지 않으나, 클러스터 리소스가 부족하면 할당됨
- NoExecute : toleration이 맞으면 동작중인 pod를 종료
※ 문제2 : Ready 노드 확인하기
- 작업 클러스터 : hk8s
- Ready 상태(NoSchedule로 Taint된 node는 제외)인 node를 찾아 그 수를 /var/CKA2022/notaint_ready_node에 기록하세요.
- 작업 클러스터 확인
- Ready 상태인 node를 확인
- NoSchedule로 Taint된 node를 찾아 확인
- NoSchedule로 Taint된 node를 제외한 node는 1개이므로 1을 /var/CKA2022/notaint_ready_node에 기록한 후 확인