심플코더
간단한 코딩 공간
   

글쓰기    관리    수식입력
  • 분류 전체보기 (84)
    • AWS (1)
    • JavaScript (11)
    • 개인학습 (5)
    • DB (11)
    • OS (9)
    • Network (7)
    • DevOps (0)
    • TypeScript (1)
    • 개발 (1)
    • CKA (28)
hELLO · Designed By 정상우.
심플코더

간단한 코딩 공간

CKA

(TIL)Kubernetes의 Node Selector와 Node Affinity

Intro

쿠버네티스 클러스터 내부에는 다양한 성능의 노드들이 혼재하여 존재할 수 있다.

 

우리는 데이터 처리를 위한 파드는 특정한 고사양 노드에서만 실행되기를 원할 수 있는데, 기본 스케줄러는 이러한 사항을 고려하지 않고 랜덤한 노드에 파드를 배치하게된다.

 

이러한 상황에서 선택할 수 있는 해결책이 `Node Selector`이다.

 

Labeling

다음과 같은 명령어를 사용해서 간단하게 node에 label을 붙일 수 있다.

kubectl label nodes node1 size=large

 

위 명령어를 사용하면, node1이라는 노드에 size=large라는 라벨을 가지게 할 수 있다.

 

Node Selector 적용

apiVersion: v1
kind: Pod
metadata:
  name: dataproc-pod
spec:
  containers:
    - name: processor
      image: mycompany/dataproc:v1
  nodeSelector:
    size: large

 

pod 정의에서 spec.nodeSelector를 사용해서 특정 라벨을 가진 노드를 선택하도록 설정할 수 있다.

 

다만 이러한 Node Selector에는 한계점이 존재하는데 바로 복잡한 조건을 사용할 수 없다는 점이다.

Or, unEqual(!=) 등의 조건을 사용할 수 없는데 이러한 단점을 극복하기 위해서 `Node Affinity`를 사용한다.

 

 

Node Affinity

Node Affinity의 예시 구조는 다음과 같다.

spec:
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: size
            operator: In
            values:
            - large

 

각 옵션의 의미는 다음과 같다.

 

affinity.nodeAffinity: node affinity 설정이 시작됨을 의미한다

requiredDuringSchedulingIgnoredDuringExecution: 스케줄링 시에만 적용되며, 반드시 이 조건을 만족하는 노드에만 스케줄링됨을 의미한다.

matchExpressions: key / operator / value의 구조로 복수 조건을 걸 수 있다.

 

주요 operator는 다음과 같다.

 

In: 지정된 값 중 하나와 일치

NotIn: 지정된 값들과 다를 경우

Exists: 키만 존재하면 통과

DoesNotExist: 키가 존재하지 않으면 통과

 

 

requiredDuringSchedulingIgnoredDuringExecution대신 preferredDuringSchedulingIgnoredDuringExecution를 사용하는 경우, 조건을 최대한 만족하려고 하되 안 되면 남은 노드에 배치한다.

 

IgnoredDuringExecution 대신에 RequiredDuringExecution을 사용하면 실행 중 라벨이 변경되었을 때 조건에 맞지 않으면 pod를 evict한다.

 

 

 

'CKA' 카테고리의 다른 글

(TIL) Kubernetes에서의 Resource Request & Limits  (0) 2025.03.26
(TIL) Kubernetes Taints & Toleration 와 Node Affinity  (0) 2025.03.25
(TIL) Taints and Tolerations  (0) 2025.03.25
(TIL) Kubernetes Labels & Selectors  (0) 2025.03.23
(TIL) Kubernetes Manual Scheduling  (0) 2025.03.23
    'CKA' 카테고리의 다른 글
    • (TIL) Kubernetes에서의 Resource Request & Limits
    • (TIL) Kubernetes Taints & Toleration 와 Node Affinity
    • (TIL) Taints and Tolerations
    • (TIL) Kubernetes Labels & Selectors
    심플코더
    심플코더

    티스토리툴바