02-07 18:36
반응형
250x250
Recent Posts
Recent Comments
Link
관리 메뉴

DevOps Tasks

[CKA] Kubernetes Taints & Tolerations 본문

Certification

[CKA] Kubernetes Taints & Tolerations

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

Taints

개념

`taint`는 Kubernetes에서 노드에 적용되는 속성으로, 특정 조건을 만족하지 않는 파드가 해당 노드에 스케줄링되지 않도록 하는 메커니즘입니다.

`taint`는 `key`, `value`, `effect` 세 가지 요소로 구성되며, 노드에 적용된 `taint`를 무시하지 않는 한, 해당 파드는 그 노드에 스케줄링되지 않습니다.

 

쉽게 이해하기

`taint`는 " 이 노드에는 특별한 파드만 올 수 있어요! "라고 표시하는 방법입니다.

만약 노드에 `taint`가 걸려 있으면, 특별히 허락받은 파드만 그 노드에 갈 수 있습니다.

 

주요 옵션

Key : `taint`의 식별자 역할을 하는 이름입니다.

Value : `taint`의 값으로, Key와 함께 `taint`를 구체화합니다.

Effect : `taint`가 파드 스케줄링에 미치는 영향을 정의합니다.

 

세 가지 종류가 있습니다

 

`NoSchedule`

해당 `taint`를 허용하지 않는 파드는 노드에 스케줄링되지 않습니다.

  • " 이 노드에는 이 조건을 만족하는 파드만 들어갈 수 있어요. "

 

`PreferNoSchedule`

해당 `taint`를 허용하지 않는 파드는 가능하면 스케줄링되지 않으려고 시도합니다.

  • " 이 노드에 파드를 올리고 싶지 않지만, 꼭 필요하면 올릴 수 있어요. "

 

`NoExecute`

해당 `taint`를 허용하지 않는 파드는 노드에서 즉시 퇴출됩니다.

  • " 이 노드에 이미 있는 파드도 조건에 맞지 않으면 나가야 해요. "

 

apiVersion: v1
kind: Node
metadata:
  name: gpu-node
spec:
  taints:
    - key: "dedicated"
      value: "gpu"
      effect: "NoSchedule"

Digest : `taint`는 특정 조건을 만족하지 않는 파드가 노드에 올라가는 것을 막는 설정입니다.

 


 

Tolerations

개념

`tolerations`는 파드에 적용되는 속성으로, 파드가 특정 노드에 설정된 `taint`를 무시하고 스케줄링될 수 있도록 허용합니다.

`tolerations` 은 `key`, `operator`, `value`, `effect`, `tolerationSeconds` 등의 필드를 포함하며, 이를 통해 파드가 어떤 `taint`를 허용할지 정의합니다.

 

쉽게 이해하기

`tolerations`은 " 이 파드는 특정 `taint`를 가진 노드에 올라가도 돼요 ! "라고 허락하는 방법입니다.

즉, 파드가 노드의 제한을 무시하고 들어갈 수 있도록 허락하는 것입니다.

 

주요 옵션

Key : `tolerations`이 적용될 `taint`의 이름입니다.

Operator : `Key`와 `Value`의 관계를 정의합니다.

`Equal` :` Key`와 `Value`가 정확히 일치해야 합니다.

`Exists` : `Key`만 존재하면 됩니다. `Value`는 상관없습니다.

Value : `tolerations`이 허용하는 `taint`의 값입니다.

Effect : 해당 `taint`의 영향 유형과 일치해야 합니다.

  • TolerationSeconds
    • `NoExecute` 효과의 경우, 파드가 노드에서 퇴출되기까지의 시간을 초 단위로 지정합니다.
      • 예시: 300 (5분)

예시

apiVersion: v1
kind: Pod
metadata:
  name: gpu-pod
spec:
  tolerations:
    - key: "dedicated"
      operator: "Equal"
      value: "gpu"
      effect: "NoSchedule"
  containers:
    - name: gpu-container
      image: your-gpu-image

Digest : `tolerations`은 파드가 특정 `taint`를 가진 노드에 올라갈 수 있도록 허락하는 설정입니다.


 

Effect의 종류와 기능

 

NoSchedule

  • 기능 : `taint`를 허용하지 않는 모든 파드는 해당 노드에 스케줄링되지 않습니다.
  • 설명 : "이 노드에는 이 조건을 만족하는 파드만 들어갈 수 있어요."
  • 예시 : GPU 노드에 일반 파드가 스케줄되지 않도록 막기.

 

PreferNoSchedule

  • 기능 : `taint`를 허용하지 않는 파드는 가능하면 해당 노드에 스케줄 되지 않으려고 시도하지만, 꼭 필요하면 올릴 수 있습니다.
  • 설명 : "이 노드에 파드를 올리고 싶지 않지만, 꼭 필요하면 올릴 수 있어요."
  • 예시 : 특정 지역(zone)에 주로 배치하고 싶지만, 다른 지역에도 가능하게 할 때.

 

NoExecute

  • 기능 : `taint`를 허용하지 않는 모든 파드는 해당 노드에서 즉시 퇴출됩니다.
  • 설명 : " 이 노드에 이미 있는 파드도 조건에 맞지 않으면 나가야 해요. "
  • 예시 : 노드의 상태가 불안정해졌을 때, 파드를 강제로 다른 노드로 이동시킬 때.

Operator의 종류와 기능

Equal

  • 기능 : `Key`와 `Value`가 정확히 일치해야 합니다.
  • 설명 : " 키와 값이 똑같아야 해요. "
  • 예시 : `Key`가 "dedicated"이고 `Value`가 "gpu"인 `taint`를 가진 노드에, `Key`가 "dedicated"이고 `Value`가 "gpu"인 `tolerations`을 가진 파드만 스케줄 될 수 있습니다.

Exists

  • 기능 : `Key`만 존재하면 됩니다. `Value`는 상관없습니다.
  • 설명 : " 키만 있으면 돼요, 값은 상관없어요. "
  • 예시 : `Key`가 "dedicated"인 `taint`를 가진 노드에, `Value`가 무엇이든 상관없이 `Key`가 "dedicated"인 `tolerations`을 가진 파드는 스케줄될 수 있습니다.

 

728x90
반응형