티스토리 뷰
1. 문제 시나리오
- 쿠버네티스 클러스터에서 어플리케이션의 리소스 사용량을 제한
1) Deployment 생성
- 이미지: stress-ng
- 이름: stress-deployment
- 2개의 레플리카
- CPU 요청: 500m
- CPU 제한: 1
- 메모리 요청: 256Mi
- 메모리 제한: 512Mi
2) ResourceQuota 생성
- default 네임스페이스에 ResourceQuota를 생성하여 다음 제한 설정
- 총 CPU 요청: 최대 2
- 총 CPU 제한: 최대 4
- 총 메모리 요청: 최대 1Gi
- 총 메모리 제한: 최대 2Gi
2. 문제 해결과정
1) Deployment 생성
apiVersion: apps/v1
kind: Deployment
metadata:
name: stress-deployment
namespace: default
spec:
replicas: 2
selector:
matchLabels:
app: stress-ng
template:
metadata:
labels:
app: stress-ng
spec:
containers:
- name: stress-ng
image: polinux/stress-ng
args:
- "--cpu"
- "2"
## 해당 항목에서 요구사항인 리소스 제한을 설정
resources:
requests:
memory: "256Mi"
cpu: "500m"
limits:
memory: "512Mi"
cpu: "1"
2) Deployment 적용
kubectl apply -f stress-deployment.yaml
3) Pod의 리소스 사용량 확인
- kubectl top pods 를 통해 실제 CPU및 메모리 사용량 확인 가능
kubectl top pods --selector=app=stress-ng
NAME CPU(cores) MEMORY(bytes)
stress-deployment-abc123 400m 200Mi
stress-deployment-def456 450m 220Mi
4) 리소스쿼타 생성
(1) YAML파일 작성
# namespace-quota.yaml
apiVersion: v1
kind: ResourceQuota
metadata:
name: default-quota
namespace: default
spec:
hard:
requests.cpu: "2"
limits.cpu: "4"
requests.memory: "1Gi"
limits.memory: "2Gi"
(2) 리소스쿼타 적용
kubectl apply -f namespace-quota.yaml
(3) 해당 파일 확인
kubectl get resourcequota default-quota -o yaml
status:
hard:
limits.cpu: "4"
limits.memory: "2Gi"
requests.cpu: "2"
requests.memory: "1Gi"
#현재 사용량
used:
limits.cpu: "2"
limits.memory: "1Gi"
requests.cpu: "1"
requests.memory: "512Mi"
5) Test: 리소스 쿼타 초과 시도
(1) 리소스를 초과하는 Deployment YAML 작성
# over-limit-deployment.aml
apiVersion: apps/v1
kind: Deployment
metadata:
name: over-limit-deployment
namespace: default
spec:
replicas: 3 # 초과 요청으로 인해 실패 예상됨.
selector:
matchLabels:
app: over-limit-app
template:
metadata:
labels:
app: over-limit-app
spec:
containers:
- name: over-limit-app-container
image: nginx # 단순 nginx 이미지 사용.
resources:
requests:
memory: "512Mi"
cpu: "500m"
limits:
memory: "1Gi"
cpu: "1"
(2) 초과 Deployment 적용시도 및 실패 확인(로그)
kubectl apply -f over-limit-deployment.yaml
kubectl describe deployment over-limit-deployment | grep Events -A5
Events:
Type Reason Age From Message
Warning FailedCreate <timestamp> replicaset-controller failed quota
Exceeded quota, requested cpu=1500m, requested memory=1536Mi exceeds quota limits.
'쿠버네티스' 카테고리의 다른 글
CKA 기출개념 정리 Job (0) | 2025.01.01 |
---|---|
CKA 기출개념 파드: 특정 노드에서만 생성하기 (1) | 2025.01.01 |
CKA 기출개념 정리 ConfigMap과 Secret을 사용하여 어플리케이션 구성 (0) | 2024.12.31 |
CKA 기출개념 정리 rollout (0) | 2024.12.31 |
CKA 기출개념 정리 쿠버네티스 업그레이드 (0) | 2024.12.31 |