카테고리 없음

[k8s] 쿠버네티스 파드의 노드배치(Node Affinity, Taint, Toleration)

daniel_lab 2024. 1. 3. 19:58

쿠버네티스는 pod 를 node에 배치할때 3가지 필터 절차를 갖는다

1. 볼륨 필터: pod에 필요한 디스크 볼륨이 노드에서 지원되는지 확인(마운트 충돌)

2. 리소스 필터: 충분한 리소스 있는지 확인

3. 토폴로지 필터: affinity, taint, toerance 등 확인

이중 affinity, taint, tolerance 에 대하여 간략하게 정리한다.

node affinity

pod 에서 특정 노드에 배치되도록 지정하는 정책. matchExpression을 통하여 라벨 조건을 지정해 노드를 지정할 수 있다. 스케줄링중에 적용되는 것이므로 이미 배치된 후에는 조건이 변경되었다해서 축출되거나 하지는 않는다.

아래 2가지 옵션을 각각 작성가능하다
requiredDuringSchedulingIgnoredDuringExecution: 강제
preferredDuringSchedulingIgnoredDuringExecution: 반 강제. 선호.

apiVersion: v1
kind: Pod
metadata:
  name: k8s-node-affinity
spec:
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: k8s/zone
            operator: In
            values:
            - us-central1-a

Taint, Toleration

Taint는 노드에 지정하여, Taint에 맞는 Toleration을 갖는 pod만 배치될 수 있도록 한다.

Toleration 적용: taint key중 abc가 valueabc 이어야 하며, effect 는 NoSchedule 이라면 배치가능

tolerations:
- key: "abc"
  operator: "Equal"
  value: "valueabc"
  effect: "NoSchedule"

Taint 적용

출처

쿠버네티스 파드 스케줄링 (Affinity, Taint & Toleration)
https://skasha.tistory.com/92