- QoS는 기본적으로 전체 서비스에 대한 품질을 보장하는 것이 아닌, "중요도가 높은 서비스"의
품질을 보장하는 기술
- 쿠버네티스에서도 동일한 의미로 해당 기술을 사용하며, 노드에 충분한 가용 리소스가 없을 경우
QoS를 사용하여 Pod를 노드에서 제거하여 가용 리소스 확보를 목적으로 함
- Memory QoS는 Kubernetes에서 메모리 자원을 보장하기 위해 "cgroup v2"의 메모리 컨트롤러를
사용
- 쿠버네티스에서 기본적으로 Pod 생성 시 예외없이 "QoS Class(Guaranteed, Burstable, BestEffot)" 3개 중 하나를 부여하여 Pod를 분류, 분류는 컨테이너의 "자원 요청을 근거"로 함
[ 설명 ]
- 모든 컨테이너에 CPU와 Memory의 "request = limit" 동일하게 설정된 경우
- 노드 리소스 압박 시 "가장 마지막에 제거"
- 리소스 사용량이 예측 가능하고, 스케줄러가 정확히 해당 리소스를 노드에 확보해 둠
[ 예시 ]
resources:
requests:
cpu: "500m"
memory: "256Mi"
limits:
cpu: "500m"
memory: "256Mi"
[ 설명 ]
- request와 limits이 설정되어 있지만 "서로 다른 경우", 또는 일부 컨테이너에만 설정된 경우
- request만큼은 보장받고, limits까지 burst할 수 있음
- 제거 순위 중간에 위치
[ 예시 ]
resources:
requests:
cpu: "250m"
memory: "128Mi"
limits:
cpu: "500m"
memory: "256Mi"
[ 설명 ]
- 어떤 컨테이너에도 request/limits가 "하나도 설정되지 않은" 경우
- 리소스 보장이 전혀 없고, 노드 압박 시 "가장 먼저 제거"
[ 예시 ]
resource: {}