Scheduler 없이 파드가 동작하는 방식
Kubernetes에서 Scheduler가 따로 설정되어있지 않는 경우, 기본적으로 kube-scheduler라는 컴포넌트가 파드를 어떤 노드에 배치할지 결정한다.
만약 클러스터에 스케줄러가 아예 없거나 비활성화 되어있는 경우, 파드는 Pending 상태로 멈춰있게된다.
Kubernetes 스케줄러의 내부 동작 방식
1. 파드가 생성된다. (처음 생성된 파드는 spec.nodeName이 비어있음)
2. kube-scheduler는 nodeName이 없는 파드를 감지
3. 스케줄링 알고리즘을 통해 적절한 노드를 선택
4. spec.nodeName에 선택된 노드의 이름을 설정
5. 내부적으로 Binding 객체를 생성하여 할당한다.
수동 스케줄링 방법
nodeName 필드를 직접 지정
파드 생성 시 nodeName 필드를 직접 지정하면 Kubernetes는 해당 노드에 파드를 배치한다.
apiVersion: v1
kind: Pod
metadata:
name: nginx-manual
spec:
containers:
- name: nginx
image: nginx
nodeName: node1
Binding 객체로 수동 스케줄링
이미 만들어진 파드라면 nodeName을 수정할 수 없기 때문에 Binding 객체를 만들어 API로 직접 배정해야한다.
apiVersion: v1
kind: Binding
metadata:
name: nginx-manual
target:
apiVersion: v1
kind: Node
name: node01
위 파일을 yaml 파일로 저장한 후 JSON으로 변환해야하며 kubernetes API를 직접 호출해 적용하면된다.
'CKA' 카테고리의 다른 글
(TIL) Taints and Tolerations (0) | 2025.03.25 |
---|---|
(TIL) Kubernetes Labels & Selectors (0) | 2025.03.23 |
(TIL) kubectl apply의 내부 동작 (0) | 2025.03.23 |
(TIL) Kubernetes의 imperative, declarative (0) | 2025.03.22 |
(TIL) Kubernetes namespace (0) | 2025.03.22 |