04-13 06:40
반응형
250x250
Recent Posts
Recent Comments
Link
관리 메뉴

DevOps Tasks

[CKA] Kubernetes nodeAffinity 본문

Certification

[CKA] Kubernetes nodeAffinity

데밥스 2024. 12. 27. 23:16
728x90
반응형

Node Affinity

개념

`nodeAffinity`는 Kubernetes에서 파드가 특정 노드에 스케줄링되기 위한 규칙을 정의하는 메커니즘입니다.

이는 노드의 레이블을 기반으로 파드가 특정 노드에 배치되도록 선호하거나 필수적인 조건을 설정할 수 있습니다.

`nodeAffinity`는 스케줄링 시 파드가 어떤 노드에 배치될지를 더 세밀하게 제어할 수 있도록 도와줍니다.

 

쉽게 이해하기

`nodeAffinity`는 " 이 파드는 특정 조건을 가진 노드에만 올라가야 해요! "라고 설정하는 방법입니다.

예를 들어, 파드가 고성능 디스크가 있는 노드에만 배치되도록 할 수 있어요.

 

주요 옵션

`nodeAffinity`는 크게 두 가지 유형으로 나뉩니다

  • RequiredDuringSchedulingIgnoredDuringExecution
  • PreferredDuringSchedulingIgnoredDuringExecution

 

RequiredDuringSchedulingIgnoredDuringExecution

  • 기능 : 파드가 스케줄링될 때 반드시 만족해야 하는 조건을 정의합니다.
    • 이 조건을 만족하는 노드에만 파드가 스케줄링됩니다.
  • 설명 : " 이 파드는 반드시 이 조건을 만족하는 노드에만 올라가야 해요. "
  • 예시 : 특정 레이블을 가진 노드에만 파드를 배치해야 할 때 사용합니다.

 

PreferredDuringSchedulingIgnoredDuringExecution

  • 기능 : 파드가 스케줄링될 때 우선적으로 만족하면 좋은 조건을 정의합니다.
    • 이 조건을 만족하는 노드가 있으면 그 노드에 우선적으로 스케줄링되지만, 필수는 아닙니다.
  • 설명 : "이 파드는 이 조건을 만족하는 노드에 우선적으로 올라가면 좋겠어요."
  • 예시 : 가능한 특정 지역(zone)에 파드를 배치하고 싶지만, 반드시 그럴 필요는 없을 때 사용합니다.

 

MatchExpressions

  • 기능 : `label selector`를 사용하여 노드를 필터링하는 방법을 정의합니다.
    • 여러 조건을 결합하여 복잡한 필터링을 할 수 있습니다.
  • 설명 : "이 조건들을 모두 만족하는 노드에 파드를 올려야 해요."
  • 예시 : 노드의 특정 레이블이 특정 값과 일치하거나 존재해야 할 때 사용합니다.

 

예시

Required Node Affinity 예시

# 이 파드는 disktype=ssd 레이블을 가진 노드에만 스케줄링됩니다.

apiVersion: v1
kind: Pod
metadata:
  name: required-pod
spec:
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
          - matchExpressions:
              - key: "disktype"
                operator: "In"
                values:
                  - "ssd"
  containers:
    - name: app-container
      image: app-image

 

Preferred Node Affinity 예시

# 이 파드는 가능한 zone=us-west-1 레이블을 가진 노드에 스케줄링되기를 선호하지만, 반드시 그럴 필요는 없습니다.

apiVersion: v1
kind: Pod
metadata:
  name: preferred-pod
spec:
  affinity:
    nodeAffinity:
      preferredDuringSchedulingIgnoredDuringExecution:
        - weight: 1
          preference:
            matchExpressions:
              - key: "zone"
                operator: "In"
                values:
                  - "us-west-1"
  containers:
    - name: app-container
      image: app-image

 

복합 Node Affinity 예시

# 이 파드는 disktype=ssd 레이블을 가진 노드에 반드시 스케줄링되어야 하며 가능하면 zone=us-west-1 레이블을 가진 노드에 우선적으로 스케줄링됩니다.

apiVersion: v1
kind: Pod
metadata:
  name: complex-pod
spec:
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
          - matchExpressions:
              - key: "disktype"
                operator: "In"
                values:
                  - "ssd"
      preferredDuringSchedulingIgnoredDuringExecution:
        - weight: 2
          preference:
            matchExpressions:
              - key: "zone"
                operator: "In"
                values:
                  - "us-west-1"
  containers:
    - name: app-container
      image: app-image

Digest

`nodeAffinity`는 파드가 특정 노드에 스케줄링되기 위한 규칙을 설정하는 방법입니다.

이를 통해 파드가 노드의 레이블에 기반하여 선호되거나 필수적인 조건을 만족하는 노드에 배치되도록 제어할 수 있습니다.

 


주요 옵션 상세 설명

 

RequiredDuringSchedulingIgnoredDuringExecution

  • 기능 : 파드가 스케줄링될 때 반드시 만족해야 하는 조건을 정의합니다.
  • 설명 : 이 조건을 만족하지 않는 노드에는 파드가 스케줄되지 않습니다.
  • 사용 사례 : 고성능 디스크가 있는 노드에만 파드를 배치하고 싶을 때.

 

PreferredDuringSchedulingIgnoredDuringExecution

  • 기능 : 파드가 스케줄링될 때 우선적으로 만족하면 좋은 조건을 정의합니다.
  • 설명 : 이 조건을 만족하는 노드가 있으면 그 노드에 스케줄링을 시도하지만, 반드시 그럴 필요는 없습니다.
  • 사용 사례 : 특정 지역(zone)에 파드를 배치하고 싶지만, 다른 지역에도 배치할 수 있을 때.

 

MatchExpressions

  • 기능 : `label selector`를 사용하여 노드를 필터링하는 방법을 정의합니다.
  • 설명 : 여러 조건을 결합하여 복잡한 필터링을 할 수 있습니다.
  • 사용 사례 : 노드의 특정 레이블이 특정 값과 일치하거나 존재해야 할 때.
728x90
반응형