서론
파드의 리소스 또는 컨테이너의 리소스를 제안하고싶다면 어떻게 해야하는지에 대해서 알아본다.
Container단위의 Resources 할당/제한
# pod-definition.yaml
apiVersion: v1
kind: Pod
metadata:
name: resource-nginx-pod
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
resources:
requests:
cpu: "250m" # 최소 0.25 core 보장
memory: "128Mi" # 최소 128MiB 메모리 보장
limits:
cpu: "500m" # 최대 0.5 core 사용 제한
memory: "256Mi" # 최대 256MiB 메모리 사용 제한
LimitRange
LimitRange를 생성하거나 수정한 이후에 만들어지는 새 파드에만 적용됩니다.
- 이미 존재하는 파드에는 영향을 주지 않고 파드가 생성될 때 적용된다.
CPU
limits.default, limits.defaultRequest
- 사용자가 리소스를 명시하지 않았을 때 자동 적용된다.
default: Limit 미지정 시 기본 제한값 (500m)defaultRequest: Request 미지정 시 기본 요청량 (200m)
limits.max, limits.min
- 사용자가 명시적으로 리소스를 지정할 때 적용된다.
- 컨테이너당 CPU Request/Limit이 반드시
min(100m) 이상,max(1) 이하여야 한다. - 이를 벗어나면 파드 생성 거부한다. (네임스페이스 전체에 적용됨)
limits.type
- 파드의 전체 CPU 사용량이 아닌, 파드안에 여러 컨테이너가 있는 경우 개별 컨테이너의 설정값을 적용한다.
# limit-range-cpu.yaml
apiVersion: v1
kind: LimitRange
metadata:
name: cpu-resource-constraint
namespace: my-namespace
spec:
limits:
- default:
cpu: "500m" # 파드에 resource를 따로 명시주지 않았을 때 적용되는 cpu limit
defaultRequest:
cpu: "200m" # 파드에 resource를 따로 명시주지 않았을 때 적용되는 cpu request
max:
cpu: "1" # 파드에 명시 여부와 상관없이 cpu limit
min:
cpu: "100m" # 파드에 명시 여부와 상관없이 cpu request
type: Container
Memory
limits.default, limits.defaultRequest
- 사용자가 리소스를 명시하지 않았을 때 자동 적용된다.
default: Limit 미지정 시 기본 제한값 (1Gi)defaultRequest: Request 미지정 시 기본 요청량 (500Mi)
limits.max, limits.min
- 사용자가 명시적으로 리소스를 지정할 때 적용된다.
- 컨테이너당 Memory Request/Limit이 반드시
min(100Mi) 이상,max(2Gi) 이하여야 한다. - 이를 벗어나면 파드 생성 거부한다. (네임스페이스 전체에 적용됨)
limits.type
- 파드의 전체 Memory 사용량이 아닌, 파드안에 여러 컨테이너가 있는 경우 개별 컨테이너의 설정값을 적용한다.
# limit-range-cpu.yaml
apiVersion: v1
kind: LimitRange
metadata:
name: memory-resource-constraint
namespace: my-namespace
spec:
limits:
- default:
memory: "1Gi" # 파드에 resource를 따로 명시주지 않았을 때 적용되는 memory limit
defaultRequest:
memory: "500Mi" # 파드에 resource를 따로 명시주지 않았을 때 적용되는 memory request
max:
memory: "2Gi" # 파드에 명시 여부와 상관없이 memory limit
min:
memory: "100Mi" # 파드에 명시 여부와 상관없이 memory request
type: Container
ResourceQuota
네임스페이스에 속한 모든 파드의 자원 사용량(합산된)을 제한하고 싶다면 ResourceQuota를 사용하면 된다.
hard.requests.cpu
네임스페이스 내 요청가능한(request) 총 CPU 4개
hard.requests.memory
네임스페이스 내 요청가능한(request) 총 Memory 10GiB
hard.limits.cpu
모든 파드가 사용할 수 있는 CPU 최대치를 10GiB
hard.limits.memory
메모리 최대치를 10GiB
# limit-range-cpu.yaml
apiVersion: v1
kind: ResourceQuota
metadata:
name: my-resource-quota
namespace: my-namespace
spec:
hard:
requests.cpu: 4
requests.memory: 4Gi
limits.cpu: 10
limits.memory: 10Gi
Comment