반응형
"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 |