Kubernetes · 3 min read · Dec 09, 2025

Kubernetes의 리소스 한계

노드에 충분한 리소스가 있는 경우, 컨테이너가 더 많은 리소스를 사용할 수 있습니다. 우리는 각 리소스에 대해 컨테이너가 필요로 하는 양을 지정할 수 있습니다. 일반적으로 지정하는 리소스는 CPU와 메모리입니다. Pod의 컨테이너에 대한 리소스 요청을 지정하면 스케줄러가 Pod를 배치할 노드를 결정합니다. 컨테이너에 대한 리소스 한계를 지정하면 kubelet이 한계를 관리하여 실행 중인 컨테이너가 우리가 설정한 한계를 초과하여 사용할 수 없도록 합니다.

예를 들어, 컨테이너에 대해 100 MiB의 메모리 요청을 설정하면 컨테이너는 더 많은 RAM을 사용하려고 시도할 수 있습니다. 그러나 해당 컨테이너에 대해 4GiB의 메모리 한계를 설정하면 런타임이 컨테이너가 구성된 리소스 한계를 초과하여 사용하는 것을 방지합니다.

CPU와 메모리는 컴퓨팅 리소스라고 합니다.

Pod의 각 컨테이너는 다음 중 하나 이상을 지정할 수 있습니다:

  • cpu 한계
  • 메모리 한계
  • hugepages- 한계
  • cpu 요청
  • 메모리 요청
  • hugepages- 요청

Kubernetes의 리소스에 대해 더 알고 싶다면 여기를 클릭하여 Kubernetes의 공식 문서를 방문하세요.

이 기사에서는 CPU와 메모리에 대한 리소스 한계 및 요청의 예를 살펴보겠습니다. 또한 메트릭 서버를 사용할 것입니다. 메트릭 서버는 클러스터의 리소스 사용 데이터 집계기이며 클러스터에 기본적으로 배포되지 않습니다. 우리는 이 메트릭 서버를 사용하여 Pods의 리소스 소비를 확인할 것입니다.

전제 조건

  1. 최소 1개의 워커 노드가 있는 Kubernetes 클러스터. Kubernetes 클러스터를 만드는 방법을 배우고 싶다면 여기를 클릭하세요. 이 가이드는 AWS Ubuntu 18.04 EC2 인스턴스에서 1개의 마스터와 2개의 노드를 가진 Kubernetes 클러스터를 만드는 데 도움이 됩니다.

우리가 할 일은?

  1. 리소스 한계

리소스 한계

리소스 요구 사항이 지정된 Pods를 생성하기 전에 메트릭 서버를 설치합시다.

다음 명령을 사용하여 메트릭 서버 GitHub 리포지토리를 클론하고 설치합니다.

git clone https://github.com/kodekloudhub/kubernetes-metrics-server.git
cd kubernetes-metrics-server/

객체 파일을 사용하여 메트릭 서버를 생성합니다.

kubectl create -f .

install-metric-server

메트릭 서버가 초기화될 때까지 잠시 기다리세요. 잠시 후, 다음 명령을 실행하여 클러스터 노드를 모니터링할 수 있습니다.

kubectl top node

이제 메모리 요청 및 한계를 포함하는 다음 내용을 가진 Pod 정의 파일을 생성합니다.

vim my-pod-with-memory.yml
apiVersion: v1
kind: Pod
metadata:
  name: my-pod-memory-demo
spec:
  containers:
  - name: my-container-memory-demo
    image: polinux/stress
    resources:
      limits:
        memory: "50Mi"
      requests:
        memory: "20Mi"
    command: ["stress"]
    args: ["--vm", "1", "--vm-bytes", "30M", "--vm-hang", "1"]

my-pod-memory-demo

여기서 우리는 메모리 한계를 50Mi로, 메모리 요청을 20Mi로 지정한 “resources” 속성을 찾을 수 있습니다.

기본 네임스페이스에서 기존 Pods를 확인합니다.

kubectl get pods #기본 네임스페이스에서 Pods 가져오기

위 단계에서 생성한 Pod 정의를 사용하여 Pod를 생성합니다.

kubectl create -f my-pod-with-memory.yml #Pod 생성
kubectl get pods

create-a-pod-with-memory-request-and-limit

이제 Pod의 세부 정보를 확인하면 Pod가 20Mi 메모리를 요청하고 50Mi 메모리 한계를 가지고 있음을 알 수 있습니다.

kubectl get pods
kubectl describe pod my-pod-memory-demo #Pod 설명

describe-the-pod-and-check-memory

Pod 사용량은 다음 명령을 사용하여 확인할 수 있습니다.

kubectl top pods #Pod의 리소스 소비 확인

check-memory-consumption

이제 CPU 요청 및 한계를 가진 Pod 정의를 생성합니다.

vim my-pod-with-cpu.yml
apiVersion: v1
kind: Pod
metadata:
  name: my-pod-cpu-demo
spec:
  containers:
  - name: my-container-cpu-demo    image: vish/stress
    resources:
      limits:        cpu: "1"
      requests:
        cpu: "0.5"
    args:
    - -cpus
    - "2"

my-pod-cpu-demo

위 파일에서 정의에는 CPU 요청이 0.5이고 한계가 1인 “resource” 속성이 있습니다. 또한 우리는 요구 사항으로 2개의 CPU를 전달하고 있으며 이는 한계를 초과합니다.

이제 다음 명령을 사용하여 CPU 요청 및 한계를 가진 Pod를 생성합시다.

kubectl apply -f my-pod-with-cpu.yml #Pod 생성
kubectl get pods

create-a-pod-with-cpu-request-and-limit

생성한 Pod의 세부 정보를 가져옵니다.

kubectl get pods
kubectl describe pod my-pod-cpu-demo

describe-the-pod-and-check-cpu

Pod가 1 CPU의 한계로 0.5 또는 500m CPU를 요청했음을 알 수 있습니다.

CPU 사용량을 확인하려면 다음 명령을 사용하세요.

kubectl top pod #Pod의 리소스 소비 확인

check-cpu-consumption

위 스크린샷에서 Pod 정의에서 인수로 2개의 CPU를 전달했음에도 불구하고 한계인 1 CPU를 초과하여 사용할 수 없음을 알 수 있습니다. 여기서 Pod “my-pod-cpu-demo”는 999m CPU를 소비할 수 있었으며 이는 1 CPU에 해당하며 소비를 증가시킬 수 없었습니다.

결론

이 기사에서는 메트릭 서버를 사용하여 클러스터에서 모니터링을 활성화하는 단계를 살펴보았습니다. 우리는 Pod가 CPU와 메모리를 요청하고 지정된 한계를 초과하지 않고 리소스를 소비하는 방법을 보았습니다.

Share: X/Twitter LinkedIn

새 게시물을 받은 편지함에서 받기

스팸은 없습니다. 언제든지 구독 해지 가능합니다.