ETC

[kubernetes] resources의 limit과 request의 의미와 파드 우선순위

lim 2021. 4. 25. 20:44
반응형

 

resources

resources:
  limits:
    cpu: '4'
    memory: 10Gi
  requests:
    cpu: 1600m
    memory: 5Gi

container의 spec 부분을 보면 resources 부분에 limits와 requests 항목이 있다. 이는 컨테이너 구동시 필요한 최소 자원량(requests)와 최대 자원량(limits)를 정의하는 부분이다.

 

requests : 스케쥴러가 파드를 노드에 배치시킬 때 고려하는 리소스 요청. 이를 수용 가능한 노드에만 파드를 배치한다.

limits : 애플리케이션이 최대로 증가할 수 있는 상한 값

 

만약 requests나 limits에 cpu, mem 설정이 없으면 상한 없이 노드의 자원을 최대한 쓴다라는 의미다.

 

재밌는건 위의 두 가지 값의 유무에 따라서 kubelet이 파드를 죽이는 순서가 달라진다. 자세한 내용은 아래 표 참고

 

분류 설명 우선순위
Best-Effort 파드 - request, limit 값이 없음
- 자원이 부족하면 가장 먼저 죽음 (kubelet이 죽임)
3
Bustable 파드 - 둘다 있음 ( limits > request)
- 최소한의 자원 보장을 받지만 자원이 부족하면 최선적 파드 다음에 죽음
2
Guaranteed 파드 - request와 limit이 같음
- 가장 우선순위가 높고 제일 나중에 죽음
1

 

즉 파드의 특성에 따라서 request/limit 값의 유무를 조절하여 서비스 품질 우선순위를 정한다. 

어떤 책에서 추천하는 방법은 아래와 같은 방법으로 정하는 케이스도 있다고 하는데, 정해진 것은 아니니 참고만 하면 될 것 같다.

 

* 운영이 아닌 환경에서 하드웨어를 최적으로 활용하고 싶다 → Best-effort와 Burtable을 주로 활용
* 운영 환경이 안정적으로 예측 가능하길 원한다 → Guaranteed  컨테이너에 약간의 Burstable을 섞어서 사용

 

반응형