수동 스케줄링
만약 Scheduler가 없다면?
- 만약
Scheduler가 없다면 어떤 일이 벌어질까? - 해당
Pod는 계속STATUS가Pending상태에 놓인다. - 이때 수동으로
Pod를 Scheduling하는 방법은 2가지가 있다.
nodeName
- 첫번째 방법은
nodeName필드에Node이름을 추가하는 것이다. 이렇게 하면Pod는 해당Node에 배치된다.- 그러나,
nodeName필드는Pod가 생성되는 시점에만 적용이 가능하며, 이미 생성된Pod에는nodeName필드를 수정할 수 없다.
- 그러나,
# nginx-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
name: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 8080
nodeName: node02
kubectl create -f nginx-pod.yaml
Binding
- 두번째 방법은
Binding객체를 만드는 것이다.
Pod-bind-definition.yaml
apiVersion: v1
kind: Binding
metadata:
name: nginx
target:
apiVersion: v1
kind: Node
name: node02
apiVersion:v1metadataname: 신기하게도 이 필드가 배치할Pod의 이름과 매칭된다.
targetapiVersion:v1king:Nodename:Binding객체가 생성되었으면 하는Node이름, 즉 Scheduling할Node이름
kubectl create -f Pod-bind-definition.yaml
팁
Binding 객체는 해당 Pod를 특정 노드에 배치해라는 요청을 객체화 시킨 것에 가깝다.
이에 해당 리소스를 만들더라도 이는 '요청'에 가깝고 이에 유지되는 리소스가 아니다. (즉, kubectl get bindings 는 없는 명령어이다)
레퍼런스
- https://kubernetes.io/docs/reference/using-api/api-concepts/
- https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#nodename
- Udemy - Certified Kubernetes Administrator (CKA) with Practice Tests (Mumshad)