[MacOS 환경 #21] 쿠버네티스 리소스 쿼터(ResourceQuota)

도람·2025년 11월 26일
post-thumbnail

리소스 쿼터(ResourceQuota)란?

한 마디로 리소스 쿼터란 네임스페이스별 사용량 제한 제도이다.

전 게시물에서

쿠버네티스 클러스터가 회사 본사,
각 네임스페이스가 팀(부서) 라고 비유를 들었는데,

여기에서 리소스 쿼터는 이런 느낌이다.

“dev1 CPU 너무 많이 쓰지 말고,
메모리도 4GB까지만 써.”

“dev2팀은 파드 10개까지만 만들어.”

라고 제한을 주는것이다.

즉, 팀별로 리소스 사용량 한도를 걸어두는 정책이며.
그래야 한 팀이 클러스터 전체 자원을 독식하지 않게 된다.


리소스 쿼터 코드

apiVersion: v1
kind: ResourceQuota
metadata:
  name: dev1-quota
  namespace: dev1
spec:
  hard:
    pods: "5"
    requests.cpu: "2"
    requests.memory: 2Gi
    limits.cpu: "4"
    limits.memory: 4Gi
  • pods: 5 → dev1팀은 파드 5개까지만 가능
  • requests.cpu: 2 → 요청 가능한 CPU 총합 2개
  • requests.memory: 2Gi → 요청 가능한 메모리 총합 2GB
  • limits.cpu: 4 → 최대로 쓸 수 있는 CPU 총합 4개
  • limits.memory: 4Gi → 최대로 쓸 수 있는 메모리 총합 4GB

쉽게 정리(현실 예시)

항목의미비유
ResourceQuota네임스페이스별 자원 한도“팀별 예산”
requests기본으로 보장받는 자원량“월급 최소 보장”
limits초과 불가한 최대치“월급 상한선”
pods, services 등개수 제한“팀에서 쓸 수 있는 컴퓨터 개수 제한”

요약

리소스 쿼터(ResourceQuota)는
네임스페이스별로 사용할 수 있는 CPU, 메모리, 파드 수 등을 제한해서
클러스터 전체 자원을 공평하게 배분하는 시스템이다.


쿠버네티스 ResourceQuota 실습

1. 리소스 쿼터 생성

네임 스페이스 dev1에게 리소스쿼터를 적용하는 코드이다(네임스페이스가 없으면 미리 create 해줘야 한다.)

파일명: rq-dev1.yaml

apiVersion: v1
kind: ResourceQuota
metadata:
  name: dev1-quota
  namespace: dev1
spec:
  hard:
    pods: "5"                   # dev1 네임스페이스에 생성 가능한 파드 개수 제한
    requests.cpu: "2"           # 요청 가능한 CPU 총합
    requests.memory: 2Gi        # 요청 가능한 메모리 총합
    limits.cpu: "4"             # 사용할 수 있는 최대 CPU 총합
    limits.memory: 4Gi          # 사용할 수 있는 최대 메모리 총합

vim을 통해 파일을 생성하고 적용한 뒤,
kubectl get resourcequota -n dev1

명령어를 통해 dev1에 할당된 리소스쿼터를 확인할 수 있다.


2. ResourceQuota 쿼터 상세 확인

리소스 쿼터를 상세적으로 확인하려면 다음 명령어를 사용하면 된다.

kubectl describe resourcequota dev1-quota -n dev1

이제 dev1 네임스페이스에서는

  • 파드는 최대 5개까지만 생성 가능
  • CPU는 4개, 메모리는 4Gi를 넘길 수 없다.

3. 테스트 — 파드 여러 개 생성해보기

파일명: pod-test.yaml

apiVersion: v1
kind: Pod
metadata:
  name: test-pod
  namespace: dev1
spec:
  containers:
  - name: nginx
    image: nginx
    resources:
      requests:
        cpu: "0.5"
        memory: "256Mi"
      limits:
        cpu: "1"
        memory: "512Mi"

디플로이먼트 말고 로그를 보기 위해 파드를 for 반복문을 사용해서 6개를 반복적으로 만들어보도록
테스트해볼 것이다.

for i in {1..6}; do
  kubectl apply -f pod-test.yaml --namespace=dev1 --record --validate=false --dry-run=client -o yaml | sed "s/test-pod/test-pod-$i/" | kubectl apply -f -
done


이렇게 정확히 6번째 파드 생성부터 오류가 나는 것을 확인할 수 있다.
즉, 설정한 리소스 쿼터 제한을 초과했기 때문에 생성이 거부된 것이다.


4. 요약

항목설명
ResourceQuota네임스페이스별 자원 제한을 정의하는 객체
pods생성 가능한 파드 개수 제한
requests.cpu / memory요청 가능한 자원 총합
limits.cpu / memory사용 가능한 자원 최대치
kubectl describe quota현재 사용량과 제한치 확인 가능

참고자료:
[쿠버네티스 공식 홈페이지 - Resource Quotas]
https://kubernetes.io/docs/concepts/policy/resource-quotas/

profile
정도를 걷는 엔지니어

0개의 댓글