728x90
📌 쿠버네티스의 스케줄러
- 간단히 말하면 Pod를 노드에 할당하는 기능이다.
- 컨테이너는 클러스터 내의 노드에 적절히 분배하여 실행해야 되어야 하는데 이런 작업을 수행하는 주요 컴포넌트 중 하나가 바로 "스케줄러(Scheduler)"이다.
- 쿠버네티스 스케줄러는 기본적으로 Pod를 클러스터 내의 적절한 노드에 자동으로 할당한다.
- 이를 "자동 스케줄링(Auto Scheduling)"이라고도 한다.
- 스케줄러는 클러스터의 리소스 상태와 각 Pod의 요구사항을 고려하여 최적의 할당을 결정한다.
- Pod 등의 YAML 파일에는 NodeName이란 필드를 명시할 수 있는데 이를 통해 개발자가 해당 파드를 띄울 노드를 직접 선택할 수 있다.
- 일반적으로는 Pod의 스케줄링을 위해 YAML 파일에 nodeName을 명시적으로 지정하지 않아도 된다.
- 위에 언급했듯이 쿠버네티스의 스케줄러가 Pod의 요구사항과 클러스터의 상태를 분석하여 자동으로 적절한 노드에 할당하기 때문이다.
- 이를 통해 개발자는 각각의 Pod에 대한 노드 할당에 대해 신경 쓰지 않고도 효율적인 자원 활용을 달성할 수 있다.
🤖 자동 스케줄러

- minikube로 실행한 쿠버네티스 내 namespace 중 kube-system의 pod 목록을 살펴보면 기본적으로 작동하는 kube-schduler-minikube가 있음을 확인할 수 있다.
- 자동 스케줄러가 있으므로 YAML 파일 작성 시 nodeName을 명시하지 않아도 자동으로 스케줄링된다.
- minikube는 기본적으로 단일 노드만 지원하기 때문에 특정 노드를 지정해서 해당 노드에 파드를 생성하는 테스트가 불가능했다. 따라서 node를 추가하는 명령어를 통해 다중 노드 테스트 환경을 구현했다.
⚒️ minikube 다중 노드 환경 구축

- minikube node list 명령어로 초기 node 리스트룰 출력해보면 minikube라는 node가 하나있다.
- minikube node add --worker 명령어로 워커 노드 하나를 추가한다.
- minikube-m02라는 노드가 추가되었다.
📖 예시

- 위와 같이 spec의 하위 집합에 nodeName을 추가할 수 있다.
- 일부러 존재하지 않는 node 이름으로 설정했다.

- node가 없기 때문에 pending 상태가 유지되다가 자동적으로 삭제되었다.
- describe를 통해 본 파드의 정보에서 Node 부분에 Node02라고 적혀있는 모습을 확인할 수 있다.
- 이번에는 위에서 생성한 m02 노드로 지정해보자.

- nodeName을 minikube-m02로 변경했다.

- kubectl apply 명령어로 수정한 YAML 파일을 실행하니 ContainerCreating 상태에서 Running으로 변경되었으며 Node 역시 설정한 노드(m02)로 지정되었음을 확인할 수 있다.
📌 스케줄링을 결정하는 요인
- 스케줄러는 다양한 요소를 고려하여 스케줄링 결정을 내린다.
- 노드의 리소스 가용성(CPU, 메모리 등), 스토리지 제약 조건, 네트워크 연결성 등이 있다.
- 또한, 사용자가 지정한 노드 선택 기준(annotation, taint, affinity 등)을 고려할 수도 있다.
- 위에서 언급한 것처럼 기본적으로는 nodeName을 사용하여 개발자가 특정 노드에 Pod를 직접 할당할 수 있다.
참고
https://peterica.tistory.com/371?category=1144021
뤼튼
Udemy - Certified Kubernetes Administrator (CKA) with Practice Tests
728x90
'[DevOps] > Kubernetes' 카테고리의 다른 글
| kubernetes - 노드와 파드 간 상호작용 제어 기술(Taint, Toleration, Node Selector, Node Affinity) (2) | 2023.11.23 |
|---|---|
| 쿠버네티스 Labels & Selector 간단 정리 (0) | 2023.11.10 |
| kubernetes - Label & Selector의 역할 쉽게 이해하기 (1) | 2023.10.26 |
| ReplicationController와 ReplicaSet 간단 정리 (3) | 2023.10.25 |
| CKA 필승 노트 (0) | 2023.10.18 |