Pod resource 할당 : 능력만큼 급여를 주자

날아올라돼지야·2024년 9월 5일

쿠버네티스 마스터

목록 보기
20/27

안녕하세요! 오늘은 쿠버네티스에서 Pod의 Resource(자원) 설정에 대해 재미있고 자세히 알아보도록 하겠습니다. 이 강의에서는 리소스 설정이 왜 중요한지, 어떻게 설정하는지, 그리고 그 효과를 어떤 방식으로 확인할 수 있는지를 다루겠습니다. 자, 그럼 시작해볼까요?


1. 왜 Pod의 리소스 설정이 중요한가?

쿠버네티스에서는 이러한 리소스 관리가 매우 중요한데요, 이유는:

  • 효율적인 자원 사용: CPU나 메모리를 낭비하지 않고 효율적으로 사용하는 것이 중요합니다.
  • 안정성: 하나의 파드가 너무 많은 자원을 사용하면 다른 파드들이 자원을 못 쓰게 되어 전체 시스템의 성능이 떨어지거나 서비스가 중단될 수 있습니다.
  • 자동 스케일링: 적절한 자원 요청과 제한을 설정하면 쿠버네티스는 이를 바탕으로 자동으로 파드를 스케일링하거나 새로운 노드를 추가할 수 있습니다.

2. Pod의 자원 설정에서 다루는 핵심 개념

자, 이제 자원 설정의 두 가지 핵심 개념을 알아볼까요?

  • Requests(요청): "내가 최소한 이 정도는 필요해요." 즉, 파드가 실행되기 위해 최소한으로 필요한 CPU와 메모리를 지정하는 값입니다.
  • Limits(제한): "내가 아무리 많이 써도 이 이상은 안 쓸게요." 즉, 파드가 사용할 수 있는 최대 자원량을 제한하는 것입니다. 이 한도를 넘으면 파드는 강제로 종료될 수 있습니다.

3. 쉽게 직원에게 급여를 준다고 생각해보세요

파드의 리소스 설정을 직원의 급여 시스템에 빗대어 설명해볼게요

(1) Requests: 직원의 기본 급여

먼저, Requests란 무엇일까요? Requests는 파드가 정상적으로 운영되기 위해 최소한으로 필요한 자원을 말합니다.

이걸 직원의 급여에 비유하면, Requests는 직원이 일을 하기 위해 꼭 받아야 하는 기본 급여와 같습니다.

예시:

  • 직원 A가 일을 하려면 최소한 300만 원의 급여가 필요합니다. 이게 바로 Requests입니다. 즉, 300만 원은 직원 A가 회사에서 기본적으로 일할 수 있도록 보장받는 급여입니다.
  • 이 금액이 없으면, 직원 A는 일을 제대로 수행하지 못할 거예요. 즉, 파드도 요청한 Requests의 자원을 받지 못하면 원활하게 동작하지 못할 수 있습니다.

(2) Limits: 직원의 최대 급여(보너스 포함)

Limits는 또 다른 개념인데요, Limits는 파드가 자원을 최대 사용할 수 있는 한도를 말합니다.

이걸 직원의 급여에 비유하면, Limits는 직원이 받을 수 있는 최대 급여, 즉, 보너스를 포함한 상한선이라고 할 수 있습니다.

예시:

  • 직원 A는 아무리 열심히 일해도, 회사는 500만 원 이상은 줄 수 없습니다. 이 금액이 바로 Limits입니다.
  • 즉, 이 이상은 아무리 직원이 더 많은 일을 해도 더 많은 급여를 받지 못하는 것이죠. 파드도 마찬가지로, 아무리 더 많은 리소스가 필요해도 Limits로 설정한 한도를 넘을 수 없습니다.

(3) Requests와 Limits의 관계

직원의 급여 시스템에서 RequestsLimits는 매우 밀접한 관계가 있습니다.

  • Requests최소한으로 일을 하게 만드는 필수 조건입니다. 직원이 이 급여를 못 받으면 일을 못 하겠죠. 마찬가지로, 파드는 최소한의 자원을 할당받지 못하면 정상적으로 동작하기 힘듭니다.
  • Limits최대치를 의미합니다. 회사가 아무리 많은 자원이 있어도 직원에게 줄 수 있는 최대 급여는 한정되어 있죠. 파드도 마찬가지로 설정된 Limits를 넘어서 자원을 사용할 수는 없습니다.

예시:

한 회사에서 직원들에게 급여를 이렇게 설정했다고 가정해 봅시다:

  • Requests: 300만 원 – 최소한의 급여
  • Limits: 500만 원 – 최대 받을 수 있는 금액

직원이 평균적으로 300만 원을 받고 일을 하지만, 때때로 추가 작업을 통해 더 많은 일을 하면 최대 500만 원까지 받을 수 있습니다. 하지만 아무리 더 열심히 일해도, 500만 원을 초과해서는 받지 못합니다.

(4) 쿠버네티스 리소스에서의 의미:**

  • Requests는 파드가 언제든 최소한으로 필요한 CPU와 메모리입니다. 직원이 기본적으로 일을 하기 위해 필요한 급여와 같다고 보시면 됩니다.
  • Limits는 파드가 아무리 많은 자원을 요구해도 최대 사용 가능량입니다. 즉, 직원이 아무리 열심히 일해도 받을 수 있는 최대 급여라고 생각하시면 됩니다.

이렇게 파드의 리소스 설정을 직원의 급여 시스템으로 비유하니 더 이해가 잘 되셨나요? 쿠버네티스는 파드에 적절한 자원을 할당함으로써 효율적으로 일할 수 있도록 보장하고, 불필요한 과도한 자원 사용을 방지합니다.

따라서, 회사에서 직원에게 기본 급여와 최대 급여를 설정하는 것처럼, 쿠버네티스에서도 RequestsLimits를 적절하게 설정하여 자원을 관리하는 것이 중요합니다.

4. 리소스를 어떻게 설정할 수 있을까?

자, 이제 실습을 통해 파드의 리소스를 어떻게 설정하는지 알아보죠. 코드를 통해 보면 훨씬 더 명확해질 겁니다. 먼저, yaml 파일을 통해 CPU와 메모리 요청과 제한을 설정하는 방법을 살펴봅시다.

apiVersion: v1
kind: Pod
metadata:
  name: resource-limited-pod
spec:
  containers:
  - name: my-app
    image: nginx
    resources:
      requests:
        memory: "64Mi"     # 최소 64MiB의 메모리가 필요해요
        cpu: "250m"        # 최소 0.25개의 CPU가 필요해요 (milliCPU)
      limits:
        memory: "128Mi"    # 최대 128MiB까지만 사용할 수 있어요
        cpu: "500m"        # 최대 0.5개의 CPU까지만 사용할 수 있어요

5. 이 설정이 실제로 어떻게 작동하나요?

Requests(요청)

이 부분은 파드가 쿠버네티스 클러스터에 배포될 때 쿠버네티스가 파드가 안정적으로 동작하기 위해 얼마나 자원을 예약해야 하는가를 결정하는 기준이 됩니다. 예를 들어, 위의 request 설정에 따르면:

  • 메모리: 파드는 최소 64MiB의 메모리가 필요합니다.
  • CPU: 파드는 최소 0.25개의 CPU를 필요로 합니다.

이 요청값은 클러스터의 스케줄러가 파드를 특정 노드에 배치할 때 사용됩니다. 스케줄러는 해당 노드에 충분한 자원이 있는지를 확인한 후, 파드를 배치합니다.

Limits(제한)

이 부분은 파드가 아무리 많이 자원을 사용해도 이 한도를 넘지 않도록 설정합니다. 만약 설정된 리소스 한도를 초과하면:

  • CPU의 경우는 초과하면 CPU 리소스 사용량이 강제로 제한되지만, 파드는 계속 실행됩니다.
  • 메모리의 경우는 한도를 초과하면 파드는 강제로 종료되며, 다시 재시작될 수 있습니다.

6. 실습: 자원 설정 효과 확인하기

이제 우리가 설정한 자원 제한을 실제로 확인해보는 실습을 진행해볼까요?

  1. 위에서 보여드린 yaml 파일을 저장한 후, kubectl apply 명령어를 이용해 파드를 생성하세요:

    kubectl apply -f resource-pod.yaml
  2. 파드가 생성된 후, 자원 설정을 확인해볼 수 있습니다:

    kubectl get pod resource-limited-pod -o yaml
  3. 자원의 사용량을 모니터링하는 명령어로 현재 상태를 확인해보세요:

    kubectl top pod resource-limited-pod
  4. 자원을 과도하게 사용하는 애플리케이션을 실행해서 리소스 한도가 어떻게 작동하는지 확인할 수 있습니다. 예를 들어, 무한 루프를 사용해 CPU 사용량을 높여보는 간단한 스크립트를 컨테이너 안에서 실행해보세요:

    kubectl exec -it resource-limited-pod -- /bin/bash
    while true; do :; done
  5. 이제 kubectl top pod 명령어를 사용해서 리소스 사용량이 어떻게 변하는지 확인하고, CPU가 500m를 넘지 않도록 제한되는 모습을 확인할 수 있습니다.


7. 리소스 제한의 장단점

리소스 설정을 잘하면 리소스 부족으로 인한 시스템 장애를 막을 수 있지만, 너무 낮은 값을 설정하면 파드가 필요한 자원을 다 사용하지 못해 성능에 문제가 생길 수 있습니다. 반대로 너무 높은 값을 설정하면 다른 파드들이 자원을 충분히 사용하지 못할 수 있습니다.

8. 자주 하는 실수와 팁

  1. 자원 부족으로 인한 파드 재시작: 메모리 제한이 너무 낮으면 파드가 계속 종료되고 재시작될 수 있습니다.
  2. 적절한 리소스 예측: 앱의 트래픽 패턴이나 리소스 사용량을 예측하는 것이 중요합니다. 초기에 실험적으로 값을 조정하면서 최적의 설정을 찾는 것이 필요합니다.

마무리 및 결론**

자, 이렇게 해서 쿠버네티스의 Pod 리소스 설정에 대해 알아보았습니다. 쿠버네티스의 자원 설정은 애플리케이션의 안정성과 성능을 보장하기 위해 매우 중요한 요소입니다. 적절한 리소스 요청(Requests)과 제한(Limits) 설정을 통해 자원을 효율적으로 관리하고, 클러스터의 안정성을 높일 수 있습니다.

리소스 설정을 실습해보면서 자원을 어떻게 관리하고 모니터링할 수 있는지 이해하는 것이 중요하겠죠. 항상 최적의 자원 설정을 찾아 클러스터의 성능을 최대로 끌어올리는 것이 목표입니다.

profile
무슨 생각하며 사니

0개의 댓글