Kubernetes

스케줄링(taint&tolerations/NodeSelector/NodeAffinity)

jih0ssang 2024. 2. 13. 18:34

Woker Node위에 Pod들이 배포될때 다양한 스케줄링 기법을 제공합니다.

 

taint&tolerations

taint와 tolerations의 사용 목적: 특정 Node에 할당되지 않도록 방지.

taint

  • taint가 설정된 노드에는 pod가 스케줄 되지 않는다.
  • 특정 파드만 받기 위한 노드 설정
  • kubectl taint node [node명] -l key1=value1 key2=value2:effect
    kubectl taint nodes node-name key=value:taint-effect
    → kubectl taint nodes node1 app=blue:NoSchedule
apiVersion: v1
kind: Node
metadata:
  name: sample-toler
  labels:
    label: taint-label
spec:
  - effect: NoSchedule
    key: color
    value: red

tolerations

  • taint를 무시하고 pod에 설정하면 해당 규칙대로 pod 스케줄링 가능
---
apiVersion: v1
kind: Pod
metadata:
  name: sample-pod
spec:
  containers:
  - name: sample-container
    image:
    resources:
      requests:
        cpu:
        memory:
      limits:
        cpu:
        memory:
  tolerations:
  - effect: NoSchedule
    key: color
    value: red

taint effect 종류

NoSchedule, PreferNoSchedule, NoExecute

 

NoSchedule

  • 일치하는 Toleration이 없으면 파드를 노드에 스케줄 할 수 없음

PreferNoSchedule

  • 일치하는 Tolerations이 없으면 파드를 노드에 스케줄할 수 없도록 시도는 하지만, 필수는 아님

NoExecute

  • 해당 Effect가 있는 Taint가 노드에 추가되면 Taint를 허용하지 않는 파드는 즉시 축출되고 일치하지 않는 Toleration의 파드는 스케줄링 하지 않음

NodeSelector

  • kubectl label nodes [node명] key=value
    kubectl label nodes node01 size=Large
apiVersion: v1
kind: Pod
metadata:
  name: sample-pod
  labels:
    app: myapp
spec:
  containers:
  - name: nginx-container
    image:
  nodeSelector:
    size: Large

 

nodeAffinity

파드가 노드에 스케줄되도록 반드시 규칙을 만족해야하는 것
Node에 Label을 설정하고 해당 라벨에 맞춰 파드를 노드에 배포
NodeSelector와 동일한 개념이지만 디테일한 설정이 가능

Available 타입

 

requireDuringSchedulingIgnoreDuringExecution 

  • 파드가 노드에 스케줄되도록 반드시 규칙을 만족해야하는 것

preferredDuringSchedulingIgnoreDuringExecution

  • 후자는 스케줄러가 시도하려고는 하지만, 보증하지않는 선호(preferences)를 지정

참고: IgnoreDuringExecution: 노드의 레이블이 런타임 중에 변경되어 파드의 어피니티 규칙이 더 이상 충족되지 않아도 파드는 그 노드에서 계속 동작한다는 의미이다.

planned 타입


requireDuringSchedulingRequiredDuringExecution

  • 파드가 노드에 스케줄되도록 반드시 규칙을 만족해야하며, 런타임 중에 변경되어 파드의 어피니티 규칙이 더이상 충족되지 않으면 파드는 그 노드에서 계속 동작하지 않음

'Kubernetes' 카테고리의 다른 글

Ingress(인그레스)  (0) 2024.02.17
None-Selector 서비스  (0) 2024.02.17
Resource Requests/Limits  (0) 2024.02.13
서비스 API 카테고리(ExternalName)  (0) 2024.02.11
서비스 API 카테고리(Headless)  (0) 2024.02.11