콤퓨우터/필기: KodeKloud CKA 강의

67. Resource Requests and Limits

파란화면 2024. 5. 14. 22:31
반응형

"Resources" - CPU, Memory, ...
특징: 각 컨테이너에 대해 할당되는 값이다. 하나의 Pod에 여러 컨테이너가 있다면, 각각의 컨테이너는 다른 Resource Limit을 가진다.

spec:
    containers:
    - name: asdf
        resources:
            requests:
                memory: "4Gi"
                cpu: 2
            limits:
                memory: "8Gi"
                cpu: 4

메모리야 4GiB라고 하지만 이 CPU 숫자는 무엇인가?

CPU count

1 CPU = 1 vCPU Core를 가리킨다 (SMT 시스템의 경우 1 SMT 쓰레드)

  • 0.1 CPU = 100m (100 microseconds)
  • 최소 0.001 = 1m (1 microsecond) 까지 지정 가능

Memory Count

  • SI 표기법을 따른다
  • 1KiB = 1024 Bytes, 1KB = 1000 Bytes
  • 각각 1Ki, 1K로 나타낼수있다

Requests와 Limits

  • Requests: 리소스를 이만큼은 줘라
  • Limits: 리소스를 이 이상은 주지마라

Limit을 넘으면?

  • CPU의 경우, CPU 스케줄링을 통해 그 이상의 CPU자원을 못 쓰도록 막는다
  • 메모리는, 해당 메모리 사용량에 도달하면 OOM (Out-of-Memory)에러를 내면서 Pod이 죽는다

기본값과 이상적인 설정값

기본 상태에서는 각 Pod에 대해 어떤 requests도, limits도 걸려 있지 않다

  • CPU와 RAM을 꽉 찰때까지 무제한으로 쓸 수 있다

  • CPU를 Limit할 필요는 별로 없다

    • 어차피 CPU 리소스가 남아나고 있다면 안쓸 이유가 있나?
    • 최소를 Request만 걸고 Limit은 걸지말자
      • 다만 이렇게 하려면 모든 Pod이 최소 Request 설정값을 갖고 있어야, 다른 Pod이 모든 리소스를 다써버리는 일을 막을 수 있다

LimitRange

그럼 모든 Pod이 최소 Request 설정값을 갖고 있다는 보장을 어떻게 할 수 있는가?

  • LimitRange (type: Object)
  • Pod(안에 있는 Container)에 설정될 리소스 설정값의 기본값을 정함
    • namespace level
apiVersion: v1
kind: LimitRange
metadata:
    name: cpu-resource-constraint
spec:
    limits:
    - default:
        cpu: 500m  // Limit
      defaultRequest:
        cpu: 500m  // Request
    max:
        cpu: "1"   // Maximum Limit
    min:
        cpu: 100m  // Minimum Request
    type: Container
  • LimitRange를 생성하더라도, 기존에 만들어진 Pod에는 적용되지 않음

ResourceQuota

ResourceQuota를 이용하여 모든 Pod를 다 합쳤을 때의 리소스 수준 제한을 걸 수 있다

apiVersion: v1
kind: ResourceQuota
metadata:
    name: my-resource-quota
spec:
    hard:
        requests.cpu: 4
        requests.memory: 4Gi
        limits.cpu: 10
        limits.memory: 10Gi
반응형

'콤퓨우터 > 필기: KodeKloud CKA 강의' 카테고리의 다른 글

74. Static Pods  (0) 2024.05.17
71. DaemonSet  (0) 2024.05.17
59-63. Taints, Tolerations, Node Selectors, Affinity  (0) 2024.05.14
44. Imperative v. Declarative  (0) 2024.05.14
41. Namespaces  (0) 2024.05.14