본문 바로가기
kubernetes

[kubernetes] 쿠버네티스 QOS란

by devjh 2021. 11. 25.
반응형

이번 게시글에서는 쿠버네티스 QOS에 대해 정리합니다.

 

1. QOS란

QOS란 Quality of Service의 약자로 팟들은 생성될때 QOS중에 하나를 할당받습니다.
추후 쿠버네티스는 QoS 클래스들을 확인하고 팟을 스케줄링하고 자원을 관리합니다.

 

2. QOS의 종류

  • Guaranted
  • Burstable
  • BestEffort

QOS는 총 3가지로 분류되고 위에서부터 쿠버네티스가 더 중요하게 생각합니다.

 

Guaranteed 

팟을 Guranteed QOS 클래스가 할당되도록 하려면 아래 조건을 만족해야합니다.

  • 파드 내 모든 컨테이너는 메모리 상한과 메모리 요청량을 가지고 있어야 한다.
  • 파드 내 모든 컨테이너의 메모리 상한이 메모리 요청량과 일치해야 한다.
  • 파드 내 모든 컨테이너는 CPU 상한과 CPU 요청량을 가지고 있어야 한다.
  • 파드 내 모든 컨테이너의 CPU 상한이 CPU 요청량과 일치해야 한다.

yaml에서 팟의 명세를 작성할때는 이렇게 작성합니다.

spec:
  containers:
  - name: qos-demo-ctr
    image: nginx
    resources:
      limits:
        memory: "500Mi"
        cpu: "500m"
      requests:
        memory: "500Mi"
        cpu: "500m"


팟을 생성할때 resources에 CPU와 메모리 설정을 위의 조건에 일치하게 해서 팟이 생성된후 팟의 명세를 확인하면
$ kubectl get pod myPod -o yaml

spec:
  containers:
    ...
    resources:
      limits:
        cpu: 500m
        memory: 500Mi
      requests:
        cpu: 500m
        memory: 500Mi
    ...
status:
  qosClass: Guaranteed


satus.qosClass가 Guranteed로 설정되게 됩니다.

 

3. Burstable

뭔가 CPU Burst, IO Burst처럼 쿠버네티스 관련 Burst가 일어날때 더 잘 해줄것같은 이름입니다.
팟을 Burstable QOS 클래스가 할당되도록 하려면 아래 조건을 만족해야합니다.

 

  • 파드 내에서 최소한 하나의 컨테이너가 메모리 또는 CPU 요청량을 가진다.

request보다 limit이 높은경우 burstable 모드라고 합니다.
node를 효과적으로(idle 영역의 최소화) 사용하고 싶다면 고려해볼 수 있지만 안정성에서 떨어질 수 있으니 주의합니다.

4. BestEffort

직역하면 최고의 노력이지만 긍적적인 의미는 아닙니다.
I'am sorry, that was my best effort(미안해 그것은 나의 최고의 노력이었어) 라고 할때 사용한다고 합니다.

팟을 BestEffort QOS 클래스가 할당되도록 하려면 resources쪽에 아무것도 작성하지 않으면 됩니다.
쿠버네티스는 현재 자신의 상황에 맞게 해당팟을 관리하게 됩니다.

5. QOS와 쿠버네티스

이제 쿠버네티스 리소스에 문제가 생겨 노드가 위험한 상황에 처하거나
팟이 자원을 더 사용해야할때 마스터노드는 QOS를 확인하고 동작하게 됩니다.

Guaranteed 로 설정된 pod은 cpu를 따로 할당해 사용하므로 응답속도나 안정성을 고려해야 하는 상황에서는 Guaranteed로 설정해주도록 합니다

반응형

댓글