728x90
Resource Quota
정의
Namespace에서 사용할 수 있는 리소스 양을 제한하는 메커니즘이다.
주요 개념
- 리소스 제한:
- 리소스 쿼터는 CPU, 메모리, 스토리지, 파드, 서비스 등의 자원 사용량을 제한한다.
- 특정 리소스를 초과할 경우 네임스페이스 내에서 추가 자원을 생성할 수 없다..
- 리소스 쿼터의 대상:
- 파드
- CPU 및 메모리 요청/제한
- PersistentVolumeClaims(PVC)
- 오브젝트 수 제한 (ConfigMap, Secret, Service 등)
- 리소스 쿼터 사양:
spec.hard
필드를 통해 제한할 리소스를 정의한다.kubectl describe resourcequotas
명령어로 현재 사용량을 확인할 수 있다.
예시
리소스 쿼터 정의하기
manifest를 통해 리소스 쿼터를 정의한다.
apiVersion: v1
kind: ResourceQuota
metadata:
name: example-quota
namespace: example-namespace
spec:
hard:
pods: "10" # 네임스페이스 내 최대 파드 수 제한
requests.cpu: "4" # CPU 요청의 총합 제한
requests.memory: "8Gi" # 메모리 요청의 총합 제한
limits.cpu: "6" # CPU 제한의 총합
limits.memory: "10Gi" # 메모리 제한의 총합
그리고 만약 리소스를 초과하도록 pod를 생성하면 아래와 같은 에러들을 볼 수 있다.
- 11개 파드 생성
Error: pods "pod-name" is forbidden: exceeded quota: example-quota, requested: pods=1, used: pods=10, limited: pods=10
2.CPU 5로 설정
Error: pods "pod-name" is forbidden: exceeded quota: example-quota, requested: requests.cpu=5, used: requests.cpu=4, limited: requests.cpu=4
LimitRange
정의
Namespace 내에서 생성되는 리소스 (파드, 컨테이너, PVC 등) 의 CPU, 메모리 등의 최소 및 최대 값을 제한하거나 기본값을 설정하기 위한 정책이다.
주요 개념
- 리밋 레인지의 역할:
- 파드나 컨테이너에 요청 및 제한(request/limit) 값 설정.
- PVC(영구 볼륨 클레임)에 대해 최소/최대 스토리지 크기 제한.
- 네임스페이스에 기본 요청 및 제한 값 설정.
- 리소스 정의:
requests
: 컨테이너가 최소로 필요로 하는 리소스.limits
: 컨테이너가 최대 사용할 수 있는 리소스.
- 적용 대상:
- Pod, Container
- PersistentVolumeClaim(PVC)
- 기본값 설정:
- 리소스 요청/제한 값을 명시하지 않은 컨테이너에 대해 기본값을 적용합니다.
예시
컨테이너 리밋 레인지
특정 Namespace에서 리밋레인지 생성
- defaultRequest 는 만약 manifest에 리소스 관한 명시를 하지 않는다면 자동으로 적용된다.
apiVersion: v1
kind: LimitRange
metadata:
name: example-limit-range
namespace: example-namespace
spec:
limits:
- type: Container
max:
cpu: "2" # 컨테이너당 최대 CPU 제한
memory: "1Gi" # 컨테이너당 최대 메모리 제한
min:
cpu: "200m" # 컨테이너당 최소 CPU 요청
memory: "256Mi" # 컨테이너당 최소 메모리 요청
default:
cpu: "500m" # 컨테이너당 기본 CPU 요청
memory: "512Mi" # 컨테이너당 기본 메모리 요청
defaultRequest:
cpu: "300m" # 컨테이너당 기본 요청 (명시하지 않을 경우)
memory: "256Mi"
아래의 케이스에서 에러가 발생한다.
- 컨테이너 생성시 리소스 초과 또는 미달
cpu: 100m
으로 컨테이너를 생성되면 리밋 레인지 미달 조건이다.
Error: container "example-container" is forbidden: cpu request of 100m is less than minimum allowed: 200m
memory: 2Gi
로 설정하면 리밋 레인지 초과 조건이다.
Error: container "example-container" is forbidden: memory limit of 2Gi is greater than max allowed: 1Gi
PVC 리밋 레인지
apiVersion: v1
kind: LimitRange
metadata:
name: storage-limit-range
namespace: example-namespace
spec:
limits:
- type: PersistentVolumeClaim
max:
storage: "10Gi" # PVC 최대 크기
min:
storage: "1Gi" # PVC 최소 크기
아래의 케이스에서 에러가 발생한다.
- 10Gi 이상 요청
Error: persistentvolumeclaim "example-pvc" is forbidden: maximum storage size of 10Gi exceeded
- 1Gi 미만 요청
Error: persistentvolumeclaim "example-pvc" is forbidden: minimum storage size of 1Gi not met
728x90
'Engineering > K8S' 카테고리의 다른 글
ConfigMap 과 Secret (0) | 2024.12.23 |
---|---|
NetworkPolicy (0) | 2024.12.23 |
RBAC (0) | 2024.12.23 |
Init Container 와 멀티 컨테이너 패턴 (1) | 2024.12.20 |
application Probe (0) | 2024.12.20 |