이 글은 아래 자료를 참고하여 작성되었습니다.
Udemy [Certified Kubernetes Administrator (CKA) with Practice Tests]
1. Scheduler가 Pod을 Scheduling하는 방법
- Kubernetes의 스케줄러는 모든 Pod를 순회하면서 NodeName 필드가 설정되지 않은 Pod를 찾아낸다. => 스케줄링의 후보
- 스케줄러는 알고리즘을 사용하여 Pod에 가장 적합한 노드를 선택한 후, 해당 Pod의 NodeName 속성을 노드의 이름으로 설정하여 스케줄링을 완료한다. 이 과정에서 바인딩 객체를 생성하여 Pod를 노드에 바인딩하게 된다.
- 클러스터에 스케줄러가 없으면, Pod는 계속 대기(pending) 상태로 남게 된다. 이러한 상황에서는 Pod를 수동으로 할당해야 하며, 이는 자동 스케줄링보다 관리와 유지보수가 어렵다.
2. 스케줄러가 없을 때 Manul Scheduling 하는 방법
- Pod을 생성할 때: Pod 정의 파일에서 NodeName 필드를 노드의 이름으로 설정하면 Pod는 해당 노드에 할당된다. 이 방법은 Pod를 생성할 때만 적용할 수 있다.
- 이미 생성된 Pod을 특정 노드에 할당하고 싶을 때:
- Kubernetes는 생성된 Pod의 NodeName 속성을 수정하는 것을 허용하지 않는다. 이 경우, 바인딩 객체를 생성하고 Pod의 바인딩 API에 POST 요청을 보내는 방식을 사용하여 Pod를 특정 노드에 할당할 수 있다. 이는 실제 스케줄러가 수행하는 작업과 유사하다.
- 이미 존재하는 Pod을 삭제하고, yaml에 nodeName을 변경하여 새로운 node에 띄울 수 있다.
kubectl delete pod my-pod
kubeclt create pod -f pod.yaml # pod.yaml의 spec.nodeName이 업데이트 되어 있음
# replace --force를 활용하면 한번에 가능
kubectl replace --force -f pod.yaml # pod.yaml의 spec.nodeName이 업데이트 되어 있음
## 참고: pod의 status변화를 모니터링하고 싶을 때 -w or --watch 옵션을 주면 된다
kubectl get pods -w
3. YAML 예제
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: my-container
image: nginx
nodeName: my-node
'Kubernetes' 카테고리의 다른 글
24. Scheduling - Taints & Tolerations (1) | 2024.11.24 |
---|---|
23. Scheduling - Labels and Selectors (0) | 2024.10.27 |
21. Core Concepts - Kube Proxy (1) | 2024.09.25 |
20. Core Concepts - Kubelet (3) | 2024.09.25 |
19. Core Concepts - Kube Scheduler (0) | 2024.09.25 |