[k8s] requests & limits

4888 단어 kuberneteskubernetes

쿠버네티스의 컨테이너 리소스 관리

쿠버네티스의 기본 작업단위인 파드를 생성할 때 각 컨테이너의 필요한 리소스 양을 지정할 수 있다.
리소스로는 기본적으로CPU, 메모리 등이 있다.

  • CPU는 항상 절대 수량으로 요청되며, 상대적 수량은 아니다. 0.1은 단일 코어, 이중 코어 또는 48코어 시스템에서 동일한 양의 CPU이다.

  • memory 에 대한 제한 및 요청은 바이트 단위로 측정된다.

    • E, P, T, G, M, k, m(millis) 와 같은 접미사 중 하나를 사용하여 메모리를 일반 정수 또는 고정 소수점 숫자로 표현할 수 있다.
    • Ei, Pi, Ti, Gi, Mi, Ki와 같은 2의 거듭제곱을 사용할 수도 있다. 예를 들어, 다음은 대략 동일한 값을 나타낸다.
    128974848, 129e6, 129M, 128974848000m, 123Mi

Requests

Requests는 pod을 scheduling할 때 참고하는 값이다.
절대적으로 넘지 않아야 하는 값이 아니다.
실제 container process의 사용량이 이것을 넘는 것은 허용한다.
사용자가 해당 컨테이너의 process 사용양을 예상하며 넣는 값으로 생각하면 편하다.

Limits

실제 파드가 실행 중인 노드에 사용 가능한 리소스가 충분하면, 컨테이너가 해당 리소스에 지정한 request 보다 더 많은 리소스를 사용할 수 있도록 허용된다.
하지만, 컨테이너는 리소스 limit 보다 더 많은 리소스를 사용할 수는 없다.


Kubernetes에서 pod의 spec을 정의할 때, container별로 CPU와 Memory에 대해서 requests와 limits를 설정할 수 있다.

apiVersion: v1
kind: Pod
metadata:
  name: test-pod
spec:
  containers:
  - name: test-container
    image: test-image:v1
    resources:
      requests:
        memory: "64Mi"
        cpu: "250m"
      limits:
        memory: "128Mi"
        cpu: "500m"
  - name: test-container2
    image: test-image:v2
    resources:
      requests:
        memory: "64Mi"
        cpu: "250m"
      limits:
        memory: "128Mi"
        cpu: "500m"

위에 YAML 파일은 한 파드에 대한 정의이다.

해당 파드에는 test-containertest-container2 두 개의 컨테이너가 있다.

  • 각각의 컨테이너는 0.25 cpu64MiB(226 바이트) 의 메모리 요청(requests)가 있다.
  • 또한 컨테이너 별로 0.5 cpu128MiB 메모리 제한이 있다.
  • CPU의 경우 cpu.shares 값이 설정된다.
    • 각 컨테이너는 1:1 비율(0.25, 0.25 cpu)로 스케줄링 된다.

참고

좋은 웹페이지 즐겨찾기