[Kubernetes] NodeSelector


서론

이번 강의에서는 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 등의 객체가 특정 파드를 선택하도록 할 때 사용하는 것이다.