QoS
Hermaeus Mora · · Devops
운영 DB 파드 상태 조회 중에 다음 값을 발견했다고 하자.
QoS Class: BestEffort저게 뭘 의미하는 걸까? QoS는 Quality of Service의 약자로, kubelet이 파드를 Evict하고 OOM Killer가 프로세스를 죽이는 순서에 영향을 미친다.
QoS는 다음 3가지 값과 조건을 가진다.
- Guaranteed, 파드의 모든 컨테이너가 cpu, memory limit을 지정하고 각각 request == limit
- Burstable, Guaranteed가 아니면서 컨테이너 중 하나라도 request 또는 limit 존재
- 그 외 BestEffort
파드 우선순위가 같다면, kubelet은 리소스 사용량이 request를 초과하는 파드일수록 먼저 Evict 한다. 또한 파드 생성 시 계산한 QoS에 따라 oom_score_adj값을 다음과 같이 CRI에 전달한다(CRI는 /proc/<pid>/oom_score_adj 에 write)
- Guaranteed: -997
- Burstable: min(max(2, 1000 - (1000 * memoryRequest / machineMemoryCapacity)), 999), request가 노드 메모리 대비 클수록 낮은 값
- BestEffort: 1000
즉 위 의미는 운영 DB 파드가 kubelet에게도(request가 0으로 계산되므로), OOM Killer에게도 우선 제거 대상이라는 것이다.