2가지 설정이 필요함
노드라벨링
kubectl label nodes <node-name> <label-key>=<label-value>
pod 의 spec에 nodeSelector 설정
apiVersion: v1
kind: Pod
metadata:
name: node-selector-pod
spec:
containers:
- name: my-container
image: nginx
nodeSelector:
size: large
위와같은 방법으로 특정 노드(size=large)에 파드를 배포할 수 있다.
e.g)
1. node-name 이 node01 인 노드에 라벨링 하기 (size=large)
kubectl label nodes node01 size=large
2.노드에 라벨이 설정되었는지 확인
아래 명령어 입력시 labels 필드에 size=large 로 위에서 입력한 값이 등록된 것을 알 수 있음.
kubectl describe nodes/node01
3. 파드 배포 (spec 에 nodeSelector 설정)
yaml 파일 생성하기
vi node-selector-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: node-selector-pod
spec:
containers:
- name: my-container
image: nginx
nodeSelector:
size: large
Yaml 로 파드 배포
kubectl apply -f node-selector-pod.yaml
4.라벨링한 노드(10-21-110-117)에 배포되었는지 체크
node-selector-pod 가 size=large 로 라벨링된 10-21-110-117 노드에배포 되었음을 확인 할 수 있다.
하나이상의 node 를 선택할 수 없음.
e.g)
아래 그림과 같이 size=large or size=medium 인 node 에 배포하고자 한다면 nodeSelector로는 한계가 있다.(라벨 중복 선택 불가능)
이때는 NodeAffinity 를 사용한다
apiVersion: v1
kind: Pod
metadata:
name: node-affinity-pod
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: size
operator: In
values:
- medium
- large
NodeAffinity 를 사용하면 위와같이 medium 과 large 인 노드에 배포가능