쿠버네티스 파드 안정성 (QoS)

온프레미스 K8s 클러스터 구축하기 - 이론 및 검증 5
이민석's avatar
Apr 09, 2025
쿠버네티스 파드 안정성 (QoS)

최근에 QoS에 대한 질문을 받았을때 추상적으로 답변을 하게 되었습니다.
QoS가 “스스로 정확하게 이해하지 못한 지식”으로 휘발되었다고 생각했습니다.
따라서 쿠버네티스 입문 1년이 지난 시점에 QoS를 다시 공부하였습니다.

2024.05.05 — What’s the Amazon EKS? [A.1 -1]

A. QoS 이론

A.1. QoS 기본 개념

서비스 품질(QoS, Quality of Service)

QoS [A.1-1]는 node-pressure eviction [A.1-2]의 대상의 기준이 됩니다.
즉, 리소스 압박이 있을때 추출될 파드가 무엇인지를 정하는 데에 사용이 됩니다.

QoS 총 3가지가 존재하며 각 QoS 별 우선순위는 다음과 같습니다.

  1. 최대한 노력(BestEffort) : 1순위 추출

  2. 버스트 가능(Bustable) : 2순위 추출

  3. 보장(Guaranteed) : 3순위 추출

QoS는 컨테이너의 리소스 요청 및 제한(request & limit)으로 지정되지만
QoS는 파드의 상태(.status.qosClass)에 할당되기 때문에 유의해야 합니다.
따라서 조건이 적은 순서대로 이해(암기)하는 방식이 효율적일 것입니다.

💡

kubelet은 request는 있고 limit이 없으면 limit을 노드 capacity로 갈음하고 request가 벗고 limit이 있으면 request를 limit으로 갈음합니다.

QoS

기본 요구사항

추가 요구사항 및 설명

BestEffort

no request, no limits

default

Bustable

1) request, no limits

2) request < limits

“Guaranteed”의 요구조건이 아닐 것

Guranteed

1) no request, limits
2) requests == limtis

모든 컨테이너가 CPU request, limits 보유
모든 컨테이너의 CPU request, limits 동일

예를 들어, 온프레미스 클러스[A.1-3]에는 Bustable, BestEffort가 섞여있습니다.

[명령어 1] Pod, QosClass 조회하기
kubectl get pod -A -o custom-columns="NAMESPACE:.metadata.namespace,NAME:.metadata.name,QOS:.status.qosClass"
NAMESPACE NAME QOS kube-system coredns-7c65d6cfc9-g2qxv Burstable kube-system coredns-7c65d6cfc9-sscfz Burstable kube-system etcd-cp-k8s Burstable kube-system kube-apiserver-cp-k8s Burstable kube-system kube-controller-manager-cp-k8s Burstable kube-system kube-proxy-lpjh5 BestEffort kube-system kube-scheduler-cp-k8s Burstable kube-system metrics-server-8dd4f4fd6-mwm66 Burstable

참고 자료

Share article

Unchaptered