
최근에 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 별 우선순위는 다음과 같습니다.
최대한 노력(BestEffort) : 1순위 추출
버스트 가능(Bustable) : 2순위 추출
보장(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 | 모든 컨테이너가 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