서론
이번 강의에서는 NodeSelector를 사용하여 파드가 특정 노드에 배포되도록 하는 방법을 배운다.
NodeSelector
- 파드가 특정 노드에 배치되도록 보장하기 위해 사용된다.
- 고성능이 필요한 데이터 처리 작업을 성능이 좋은 노드에 배치해야 하는 경우
- ex)
nodeSelector: disk=ssd가 있는 파드는disk=ssd레이블이 있는 노드에만 배포된다.
- 파드 설정에 NodeSelector 속성을 아래처럼 넣어준다.
- 노드에 미리 레이블을 설정되어 있어야 파드가 일치하는 레이블을 가진 노드에 배포된다.
# pod-definition.yaml
apiVersion: v1
kind: Pod
metadata:
name: myapp-pod
spec:
containers:
- name: data-processor
image: data-processor
nodeSelector:
size: Large
- 노드에 레이블을 설정하는법
kubectl label nodes <node-name> <label-key>=<label-value>
한계
- 단순 조건만 가능하며, 요구사항이 복잡한 조건은 지원하지 않는다
예: size=Large는 가능하지만, size=Large or Medium 또는 size≠Small은 불가능하다.
→ 이런 경우는 nodeAffinity를 사용해야 한다. (노드 어피니티는 파드를 특정 노드에 제한할 수 있는 고급 기능을 제공한다)
- NodeSelector는 스케줄링 시점에만 영향을 미친다.
노드 상태가 나중에 바뀌거나 삭제돼도 기존 파드는 유지된다.
NodeSelector는 파드가 처음 배치될 때만 동작
레이블이 설정된 노드에 레이블이 없는 파드는 배포될까?
- 레이블이 없는 파드는 레이블이 설정된 노드에 배포될 수 있다.
- 노드에 라벨이 있어도, 그 라벨을 기준으로 파드 배치를 제한하지는 않는다.
- 파드에 nodeSelector가 없어도 레이블이 설정된 노드에 배치될 수 있다.
기타
Label & Selector와 헷갈릴 수 있다.
레이블을 파드에 적용시키면 추후 Service, Replicaset, Deployment 등의 객체가 특정 파드를 선택하도록 할 때 사용하는 것이다.
Comment