DevOps

Kubernetes - Node Affinity.Operator

Vince_rf 2024. 10. 29. 00:23

Kubernetes의 Node Affinity는 특정 노드에서 파드를 스케줄링할 수 있도록 제약을 설정하는 기능입니다. Node Affinity는 주로 노드의 라벨을 기반으로 파드가 특정 노드에 배치되거나 배치되지 않도록 합니다. 이때 Operator는 노드 어피니티의 조건을 정의하는 요소로, 파드가 노드의 라벨 조건을 어떻게 만족해야 하는지 결정합니다.

Node Affinity의 Operator 유형

Node Affinity의 Operator에는 다음과 같은 주요 유형들이 있습니다.

  1. In
    • 설명: 특정 키의 값이 지정된 값 목록에 포함되는 경우 조건이 충족됩니다.
    • 예시: key: "zone"이 있고, operator: In, values: ["us-west-1", "us-west-2"]라면, 노드의 zone 라벨 값이 us-west-1 또는 us-west-2 중 하나와 일치할 때 해당 노드에 파드가 스케줄링됩니다.
  2. NotIn
    • 설명: 특정 키의 값이 지정된 값 목록에 포함되지 않는 경우 조건이 충족됩니다.
    • 예시: key: "zone", operator: NotIn, values: ["us-east-1", "us-east-2"]라면, 노드의 zone 라벨 값이 us-east-1 또는 us-east-2가 아닌 노드에서만 파드가 스케줄링됩니다.
  3. Exists
    • 설명: 특정 라벨 키가 노드에 존재하면 조건이 충족됩니다. 값은 상관하지 않으며, 키가 존재하기만 하면 됩니다.
    • 예시: key: "high-memory", operator: Exists라면, high-memory 라벨 키가 있는 노드에만 파드를 스케줄링합니다.
  4. DoesNotExist
    • 설명: 특정 라벨 키가 노드에 존재하지 않을 때 조건이 충족됩니다.
    • 예시: key: "high-memory", operator: DoesNotExist라면, high-memory 라벨 키가 없는 노드에만 파드를 스케줄링합니다.
  5. Gt (Greater than)
    • 설명: 특정 라벨 키의 값이 지정된 값보다 클 때 조건이 충족됩니다. 숫자 값을 가진 라벨에 사용됩니다.
    • 예시: key: "cpu-capacity", operator: Gt, values: ["4"]라면, cpu-capacity 라벨 값이 4보다 큰 노드에만 파드를 스케줄링합니다.
  6. Lt (Less than)
    • 설명: 특정 라벨 키의 값이 지정된 값보다 작을 때 조건이 충족됩니다.
    • 예시: key: "cpu-capacity", operator: Lt, values: ["8"]라면, cpu-capacity 라벨 값이 8보다 작은 노드에만 파드를 스케줄링합니다.

Node Affinity 설정 예시

다음 예시는 특정 노드에만 파드를 배치하는 설정입니다.

 
apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
          - matchExpressions:
              - key: "zone"
                operator: In
                values: ["us-west-1", "us-west-2"]
  • **Operator In**을 사용하여 zone 라벨 값이 us-west-1 또는 us-west-2인 노드에만 파드를 배치하도록 합니다.