[ 개요 ]
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
참고자료