Kubernetes/Kubernetes Best Practices

[Scenario Playbook - 심화편 | Medium Level #14] 네임스페이스별 리소스 할당 및 ResourceQuota 설정

ygtoken 2025. 3. 17. 12:01
728x90

 

쿠버네티스 클러스터에서는 여러 애플리케이션과 팀이 공유하는 리소스를 효율적으로 관리하는 것이 중요합니다.

이를 위해 네임스페이스별 리소스 제한(ResourceQuota)과 요청(Request)을 설정하여 특정 팀 또는 애플리케이션이 과도한 리소스를 사용하지 않도록 관리하는 방법을 다룹니다.

 


📌 글에서 다루는 상황들

 

1. 네임스페이스별 CPU 및 메모리 사용량 제한 설정

2. Pod 및 Container가 사용할 수 있는 리소스 범위 지정

3. kubectl을 활용한 ResourceQuota 상태 조회 및 적용 방법

 

각 문제를 실무에서 바로 활용할 수 있도록 Manifest 템플릿과 예상 결과 값을 제공합니다.

 


1️⃣ 네임스페이스별 CPU 및 메모리 사용량 제한 설정

 

❓ 문제 상황

 

운영팀에서 팀별로 네임스페이스를 분리하여 사용하고 있지만, 일부 애플리케이션이 과도한 리소스를 사용하여 다른 워크로드에 영향을 주고 있습니다.

이를 해결하기 위해 네임스페이스 수준에서 CPU 및 메모리 사용량을 제한해야 합니다.

네임스페이스: team-a

최대 CPU 사용량: 2 CPU

최대 메모리 사용량: 4Gi

 

✅ 어떻게 해결할 수 있을까요?

 


🛠️ 해결 방법

 

1. ResourceQuota를 설정하여 team-a 네임스페이스 내에서 CPU 및 메모리 사용량을 제한합니다.

 

2. kubectl 명령어를 활용하여 설정이 정상적으로 적용되었는지 확인합니다.

 


✅ 정답 Manifest (네임스페이스 및 ResourceQuota 설정)

 

🔹 team-a 네임스페이스 생성

apiVersion: v1
kind: Namespace
metadata:
  name: team-a

 

🔹 네임스페이스별 리소스 제한 (ResourceQuota 설정)

apiVersion: v1
kind: ResourceQuota
metadata:
  name: team-a-quota
  namespace: team-a
spec:
  hard:
    requests.cpu: "1"        # 전체 Pod의 최소 요청 CPU 합계 제한 (1 vCPU)
    requests.memory: "2Gi"   # 전체 Pod의 최소 요청 메모리 합계 제한 (2Gi)
    limits.cpu: "2"          # 전체 Pod의 최대 CPU 사용량 제한 (2 vCPU)
    limits.memory: "4Gi"     # 전체 Pod의 최대 메모리 사용량 제한 (4Gi)

이제 team-a 네임스페이스 내에서는 최대 2 CPU, 4Gi 메모리까지만 사용할 수 있음

 


📌 적용 후 예상 결과 값

 

1. 네임스페이스 및 ResourceQuota 적용 상태 확인

kubectl get resourcequota -n team-a

 

💡 예상 출력 값

NAME          CPU(REQUEST)   MEMORY(REQUEST)   CPU(LIMIT)   MEMORY(LIMIT)
team-a-quota  0/1           0/2Gi             0/2          0/4Gi

팀별 네임스페이스 리소스 제한이 정상적으로 적용됨

 


2️⃣ Pod 및 Container가 사용할 수 있는 리소스 범위 지정

 

❓ 문제 상황

 

운영팀에서 팀 내에서 실행되는 개별 Pod의 CPU 및 메모리 사용량을 제한해야 합니다.

이를 위해 Pod 및 Container의 최소 요청(Request)과 최대 제한(Limit)을 설정하여 특정 애플리케이션이 과도한 리소스를 사용하지 못하도록 해야 합니다.

Pod당 최소 CPU 요청: 250m

Pod당 최대 CPU 사용량: 500m

Pod당 최소 메모리 요청: 512Mi

Pod당 최대 메모리 사용량: 1Gi

 

✅ 어떻게 해결할 수 있을까요?

 


🛠️ 해결 방법

 

1. LimitRange를 설정하여 team-a 네임스페이스 내의 모든 Pod에 적용될 리소스 범위를 지정합니다.

 

2. kubectl 명령어를 활용하여 설정이 정상적으로 적용되었는지 확인합니다.

 


✅ 정답 Manifest (LimitRange 설정)

 

🔹 네임스페이스 내 Pod의 최소/최대 리소스 사용량 제한

apiVersion: v1
kind: LimitRange
metadata:
  name: team-a-limit
  namespace: team-a
spec:
  limits:
  - type: Container
    defaultRequest:
      cpu: "250m"
      memory: "512Mi"
    default:
      cpu: "500m"
      memory: "1Gi"

이제 team-a 네임스페이스 내의 Pod은 최소 250m CPU / 512Mi 메모리, 최대 500m CPU / 1Gi 메모리를 사용하도록 제한됨

 


📌 적용 후 예상 결과 값

 

1. LimitRange 적용 상태 확인

kubectl get limitrange -n team-a

 

💡 예상 출력 값

NAME          TYPE        MIN CPU   MAX CPU   MIN MEMORY   MAX MEMORY
team-a-limit  Container   250m      500m      512Mi        1Gi

Pod 및 컨테이너가 사용할 수 있는 리소스 범위가 정상적으로 설정됨

 


3️⃣ kubectl을 활용한 ResourceQuota 상태 조회 및 적용 방법

 

❓ 문제 상황

 

운영팀에서 네임스페이스 내에서 특정 애플리케이션이 너무 많은 리소스를 사용하고 있는지 확인하고, 필요 시 리소스 제한을 강화해야 합니다.

kubectl 명령어를 활용하여 ResourceQuota 및 LimitRange 설정을 점검하고, 실시간으로 사용량을 조회해야 합니다.

 

✅ 어떻게 해결할 수 있을까요?

 


🛠️ 해결 방법

 

1. kubectl describe 명령어를 사용하여 현재 ResourceQuota 및 LimitRange 설정을 확인합니다.

 

2. kubectl top 명령어를 사용하여 현재 네임스페이스 내의 리소스 사용량을 조회합니다.

 


✅ ResourceQuota 및 리소스 사용량 확인 명령어

 

🔹 현재 네임스페이스의 ResourceQuota 상태 확인

kubectl describe resourcequota team-a-quota -n team-a

 

💡 예상 출력 값

Name:                   team-a-quota
Namespace:              team-a
Resource Limits:
  requests.cpu:         1
  requests.memory:      2Gi
  limits.cpu:          2
  limits.memory:       4Gi
Used:
  requests.cpu:         500m
  requests.memory:      1Gi
  limits.cpu:          1
  limits.memory:       2Gi

 

🔹 네임스페이스 내 Pod의 리소스 사용량 조회

kubectl top pod -n team-a

 

💡 예상 출력 값

NAME          CPU(cores)   MEMORY(bytes)   
web-app-1     250m         512Mi
web-app-2     300m         1Gi

네임스페이스별 리소스 사용량을 실시간으로 모니터링 가능

728x90