티스토리 뷰

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.
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함