ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Priority Classes
    kubernetes/CKA 2025. 12. 5. 14:04

    Priority Classes

    PriorityClass란 Kubernetes에서 Pod의 우선순위(Priority) 를 정의하는 객체입니다.
    우선순위가 높은 Pod일수록, 클러스터 자원이 부족할 때 스케줄링에서 우선권을 갖고,

    심지어 낮은 우선순위 Pod를 Evict(축출) 시켜 자원을 확보할 수도 있습니다.


    PriorityClass가 왜 필요할까?

    클러스터 자원이 부족한 상황에서:

    • 중요한 시스템 Pod(예: CoreDNS, Fluentd, Ingress Controller)는 살아 있어야 하고
    • 덜 중요한 워크로드는 죽어도 괜찮을 수 있음

    → 이런 상황에서 "Pod마다 중요도" 를 설정하는 기능이 바로 PriorityClass.


    동작 방식

     

    PriorityClass를 만들면 value 라는 숫자를 지정합니다.

    PriorityClass 이름 값(value) 의미
    system-cluster-critical 2000000000 시스템 핵심 Pod
    system-node-critical 2000001000 노드 핵심 Pod
    custom-priority 예: 1000 사용자가 생성한 우선순위

    숫자가 클수록 우선순위가 높음

    Pod 설정에서 아래처럼 지정합니다:


    자원이 부족하면 어떻게 되나?

    ✔ 1) 스케줄링 우선순위

    우선순위 높은 Pod가 먼저 노드에 배치됨.

     

    ✔ 2) Preemption(선점)

    노드에 공간이 부족하면 Kubernetes가:

    • 낮은 priority Pod를 Evict → 종료
    • 높은 priority Pod를 살림

    예시 (직접 PriorityClass 만들기)

    apiVersion: scheduling.k8s.io/v1
    kind: PriorityClass
    metadata:
      name: high-priority
    value: 100000
    globalDefault: false
    description: "High priority for critical workload"

     

    Pod에서 사용:

    apiVersion: v1
    kind: Pod
    metadata:
      name: priority-test
    spec:
      priorityClassName: high-priority
      containers:
      - name: app
        image: nginx
     

    🔥 한 줄 요약

    PriorityClass = Pod의 중요도(우선순위)를 숫자로 표현하여,

    자원 부족 시 높은 우선순위 Pod가 살아남도록 하는 Kubernetes 기능

     

    PreemptLowerPriority

    preemptLowerPriority는 Kubernetes PriorityClass에서 사용되는 파라미터로,
    우선순위가 낮은 Pod를 축출(preempt)할 수 있는지 여부를 결정하는 옵션입니다.


    🔹 preemptLowerPriority: true

    ➡️ 이 PriorityClass를 가진 Pod가 스케줄될 때,

    자원의 여유가 없다면 더 낮은 priority의 Pod를 강제로 쫓아내고(OOMKILL 아님, eviction임) 자기 자신을 스케줄합니다.

    • 높은 우선순위 Pod = 절대적으로 먼저 배치되어야 함
    • 낮은 우선순위 Pod = 밀려날 수 있음

    🔹 preemptLowerPriority: false

    ➡️ 우선순위는 높지만, 낮은 priority Pod를 쫓아내지 않음
    ➡️ 자리가 없으면 그냥 Pending 상태로 기다림.


    👍 언제 쓰나?

    ✔ mission-critical 워크로드

    • 로그 수집 에이전트가 죽어도
    • 트래픽 처리 Pod(예: payment, gateway)는 절대 살아있어야 할 때
      ➡️ critical priority class를 만들고 preemptLowerPriority: true 설정

    ✔ 무조건 안정적이어야 하는 시스템 Pod (Kube-System에서 많이 씀)

    'kubernetes > CKA' 카테고리의 다른 글

    Multiple Scheduler  (0) 2025.12.05
    틀린 문제 #5. Priority Classes  (0) 2025.12.05
    틀린 문제 #4 Static Pod  (0) 2025.12.05
    Static pod  (0) 2025.12.05
    틀린 문제 # DaemonSet  (0) 2025.12.05
Designed by Tistory.