QoS(Quality of Service)란

설명

- QoS는 기본적으로 전체 서비스에 대한 품질을 보장하는 것이 아닌, "중요도가 높은 서비스"의
	품질을 보장하는 기술
	
- 쿠버네티스에서도 동일한 의미로 해당 기술을 사용하며, 노드에 충분한 가용 리소스가 없을 경우
	QoS를 사용하여 Pod를 노드에서 제거하여 가용 리소스 확보를 목적으로 함
	
- Memory QoS는 Kubernetes에서 메모리 자원을 보장하기 위해 "cgroup v2"의 메모리 컨트롤러를 
	사용

- 쿠버네티스에서 기본적으로 Pod 생성 시 예외없이 "QoS Class(Guaranteed, Burstable,          BestEffot)" 3개 중 하나를 부여하여 Pod를 분류, 분류는 컨테이너의 "자원 요청을 근거"로 함

Pod QoS Class 종류

Graranteed

[ 설명 ]
- 모든 컨테이너에 CPU와 Memory의 "request = limit" 동일하게 설정된 경우
- 노드 리소스 압박 시 "가장 마지막에 제거"
- 리소스 사용량이 예측 가능하고, 스케줄러가 정확히 해당 리소스를 노드에 확보해 둠
[ 예시 ]
resources:
  requests:
    cpu: "500m"
    memory: "256Mi"
  limits:
    cpu: "500m"
    memory: "256Mi"

Burstable

[ 설명 ]
- request와 limits이 설정되어 있지만 "서로 다른 경우", 또는 일부 컨테이너에만 설정된 경우
- request만큼은 보장받고, limits까지 burst할 수 있음
- 제거 순위 중간에 위치
[ 예시 ]
resources:
  requests:
    cpu: "250m"
    memory: "128Mi"
  limits:
    cpu: "500m"
    memory: "256Mi"

BestEffort

[ 설명 ]
- 어떤 컨테이너에도 request/limits가 "하나도 설정되지 않은" 경우
- 리소스 보장이 전혀 없고, 노드 압박 시 "가장 먼저 제거"
[ 예시 ]
resource: {}