Post

Section 3-3. Node Selectors, Node Affinity

udemy의 Certified Kubernetes Administrator (CKA) with Practice Tests 강의 및 쿠버네티스 인 액션 (마르코 룩샤)를 참고하여 정리한 글입니다.

Section03. Scheduling

Node Selectors

  • 특정 노드에서만 작동하도록 파드의 한계를 설정하는 두 가지 방법이 있다.
  • nodeSelector는 파드를 특정 라벨이 있는 노드로 제한하는 간단한 방법을 제공한다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    apiVersion: v1
    kind: Pod
    metadata:
      name: myapp-pod
    spec:
      containers:
      - name: data-processor
        image: data-processor
      nodeSelector:
        size: Large
    
    • nodeSelector라는 속성을 파드의 spec에 정의하고 노드에 할당된 Label을 명시한다.
    • 이 yaml 파일을 통해 파드를 배포할 경우 node의 label이 size: Large인 곳에 파드가 생성된다.
  • Node Selector는 하나의 label과 selector을 통해 동작하기 때문에 복잡한 요구사항을 들어줄 수 없다는 한계가 있다.

Node Affinity

  • 노드 라벨을 기반으로 파드를 스케줄할 수 있는 노드를 제한할 수 있다.

Node Affinity Types

  • Available
    • requiredDuringSchedulingIgnoredDuringExecution
      • 파드가 노드에 스케줄되려면 반드시 규칙을 만족해야함 (엄격)
      • DuringExecution: ignored(무시), 파드는 계속해서 실행되고 nodeAffinity의 변화는 영향을 미치지 않는다.
    • preferredDuringSchedulingIgnoredDuringExecution
      • 스케줄러가 시도하려고 하지만 선호를 지정. (유연)
      • DuringExecution: ignored(무시), 파드는 계속해서 실행되고 nodeAffinity의 변화는 영향을 미치지 않는다.
  • Planned
    • requiredDuringSchedulingRequiredDuringExcution
      • 파드가 노드에 스케줄되려면 반드시 규칙을 만족해야함 (엄격)
      • DuringExecution: required(필수), nodeAffinity 규칙이 변경되면 이에 부합하지 않는 노드에서 실행 중인 파드를 퇴출하거나 종료한다.

Node Affinity 예시

  • 이 노드 어피니티의 규칙은 키가 size 이고 값이 Large 또는 Medium 인 Label이 있는 노드에만 파드를 배치할 수 있다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    
    apiVersion: v1
    kind: Pod
    metadata:
    name: myapp-pod
    spec:
    affinity:
        nodeAffinity:
        requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
            - key: size
                operator: In
                values:
                - Large
                - Medium
    containers:
    - name: data-processor
        image: data-processor
    
  • 혹은 키가 size이고 값이 Small이 아닌 Label이 있는 노드에 파드를 배치할 수도 있다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
    ...생략
    
    affinity:
        nodeAffinity:
        requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
            - key: size
                operator: NotIn
                values:
                - Small
    
    ...생략
    
  • 혹은 key=size Label이 있는 노드에 파드를 배치할 수도 있다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    ...생략
    
    affinity:
        nodeAffinity:
        requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
            - key: size
                operator: Exists
    
    ...생략
    
This post is licensed under CC BY 4.0 by the author.