[ 개요 ]
Pod은 일반적으로 kube-scheduler에 의해 자동으로 어떤 Node에 배포될지 결정된다.
- 하지만, 스케줄러가 없다면? 엔지니어의 의도에 따라 배포하고 싶을 경우는 어떻게 해야할까?
[ Scheduler 동작과정 ]
스케줄러는 모든 Pod을 보면서 nodeName 필드가 설정되어있지 않은 Pod을 탐색
- 스케줄링 알고리즘을 실행하여
Pod에 적합한 Node를 식별
- 식별된
Node의 이름으로 nodeName 필드에 추가
[ Scheduler가 없다면? ]
Pod은 계속해서 Pending 상태가 된다.
- 엔지니어는
스케줄러 없이 매뉴얼하게 직접 Node에 Pod을 할당할 수 있다.
(Pod 생성시점에만, nodeName을 지정할 수 있다.)
(이미 Pod이 생성되어 있고, Node에 할당하고 싶다면 Binding 객체를 생성 후 Binding API을 사용해서 POST 요청을 보내는 방법도 있다.)
[ 실습 ]
apiVersion: v1
kind: pod
metadata:
name: nginx
labels:
name: nginx
spec:
nodeName: node01
containers:
- name: nginx
image: nginx
ports:
- containerPort: 8080
kubectl get nodes
kubectl get pods
kubectl describe pod nginx
kubectl get pods -n kube-system
kubectl replace --force -f nginx.yaml : delete & create
kubectl get pods --watch
참고자료