쿠버네티스 클러스터에서는 여러 애플리케이션과 팀이 공유하는 리소스를 효율적으로 관리하는 것이 중요합니다.
이를 위해 네임스페이스별 리소스 제한(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
✅ 네임스페이스별 리소스 사용량을 실시간으로 모니터링 가능