DevOps/Kubernetes

[Kubernetes Study - 11] Pod - Qos(Quality of Service) Class

돌돌김 2021. 2. 22. 17:13

 

Pod의 남은 리소스가 부족한 경우, Pod는 다운되버린다. 하지만 Pod는 중요도가 각기 다르기 때문에, 중요한 Pod가 죽어버리면 서비스에 큰 문제가 생길 수 있다. 그렇기 때문에 상대적으로 중요도가 낮은 다른 Pod를 down 시키고 그만큼의 리소스를 중요도가 높은 Pod에 할당 할 수 있다.

 

쿠버네티스가 Pod를 생성할 때 다음의 3가지 QoS 클래스 중 하나를 할당한다. 각각을 명시적으로 설정할 수는 없고 컨테이너에 정의된 resources의 request, limits에 따라 쿠버네티스가 알아서 클래스를 적용해주는 것이다.

 

Guranteed(가장 나중에 삭제)

 

  • 모든 Container에 Request와 Limit가 설정되야 한다.
  • Request와 Limit에는 Memory와 CPU가 모두 설정되야 한다.
  • 각 Container 내에서 Memory와 CPU에 대한 Request와 Limit 값이 같아야 한다.

 

Burstable

 

  • 모든 컨테이너에 Request와 Limit가 설정되어 있지만, Request와 Limit에 할당한 memory와 cpu의 값이 서로 다른 경우
  • Request만 설정되어있고, Limit는 설정해놓지 않은 경우
  • Pod의 컨테이너가 2개인데, 1개의 컨테이너에만 Request, Limit를 완벽하게 설정하고 나머지 하나의 컨테이너에는 설정하지 않은 경우
    • Request, Limit가 설정된 컨테이너는 Memory와 CPU에 대한 Request와 Limit 값이 같아야 한다.

 

 

BestEffort(가장 먼저 삭제)

  • 어떤 Container내에도 Request와 Limit를 설정하지 않은 상태

 

 

 

OOM(Out of Memory) Score

 

  • Burstable 상태에서 어떤 Pod가 먼저 Down되야 할지를 정하는데, OOM Score를 활용한다.
  • OOM Score를 측정하는 방법은, 실제 어플리케이션이 사용하는 메모리 대비 Request 메모리가 몇퍼센트인지 비율로 계산한다.
  • 예를 들어, 2개의 Pod에서 돌아가는 어플리케이션은 둘 다 4GB인데, Request Memory가 각각 5GB, 8GB라면, 사용량은 75%, 50%이다.
    • 이런 경우 OOM Score가 높은(사용량이 높은 Pod) Pod가 먼저 제거된다.