안녕하세요! 오늘은 쿠버네티스에서 Pod의 Resource(자원) 설정에 대해 재미있고 자세히 알아보도록 하겠습니다. 이 강의에서는 리소스 설정이 왜 중요한지, 어떻게 설정하는지, 그리고 그 효과를 어떤 방식으로 확인할 수 있는지를 다루겠습니다. 자, 그럼 시작해볼까요?
쿠버네티스에서는 이러한 리소스 관리가 매우 중요한데요, 이유는:
자, 이제 자원 설정의 두 가지 핵심 개념을 알아볼까요?
파드의 리소스 설정을 직원의 급여 시스템에 빗대어 설명해볼게요
먼저, Requests란 무엇일까요? Requests는 파드가 정상적으로 운영되기 위해 최소한으로 필요한 자원을 말합니다.
이걸 직원의 급여에 비유하면, Requests는 직원이 일을 하기 위해 꼭 받아야 하는 기본 급여와 같습니다.
Limits는 또 다른 개념인데요, Limits는 파드가 자원을 최대 사용할 수 있는 한도를 말합니다.
이걸 직원의 급여에 비유하면, Limits는 직원이 받을 수 있는 최대 급여, 즉, 보너스를 포함한 상한선이라고 할 수 있습니다.
직원의 급여 시스템에서 Requests와 Limits는 매우 밀접한 관계가 있습니다.
한 회사에서 직원들에게 급여를 이렇게 설정했다고 가정해 봅시다:
직원이 평균적으로 300만 원을 받고 일을 하지만, 때때로 추가 작업을 통해 더 많은 일을 하면 최대 500만 원까지 받을 수 있습니다. 하지만 아무리 더 열심히 일해도, 500만 원을 초과해서는 받지 못합니다.
이렇게 파드의 리소스 설정을 직원의 급여 시스템으로 비유하니 더 이해가 잘 되셨나요? 쿠버네티스는 파드에 적절한 자원을 할당함으로써 효율적으로 일할 수 있도록 보장하고, 불필요한 과도한 자원 사용을 방지합니다.
따라서, 회사에서 직원에게 기본 급여와 최대 급여를 설정하는 것처럼, 쿠버네티스에서도 Requests와 Limits를 적절하게 설정하여 자원을 관리하는 것이 중요합니다.
자, 이제 실습을 통해 파드의 리소스를 어떻게 설정하는지 알아보죠. 코드를 통해 보면 훨씬 더 명확해질 겁니다. 먼저, 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까지만 사용할 수 있어요
이 부분은 파드가 쿠버네티스 클러스터에 배포될 때 쿠버네티스가 파드가 안정적으로 동작하기 위해 얼마나 자원을 예약해야 하는가를 결정하는 기준이 됩니다. 예를 들어, 위의 request 설정에 따르면:
이 요청값은 클러스터의 스케줄러가 파드를 특정 노드에 배치할 때 사용됩니다. 스케줄러는 해당 노드에 충분한 자원이 있는지를 확인한 후, 파드를 배치합니다.
이 부분은 파드가 아무리 많이 자원을 사용해도 이 한도를 넘지 않도록 설정합니다. 만약 설정된 리소스 한도를 초과하면:
이제 우리가 설정한 자원 제한을 실제로 확인해보는 실습을 진행해볼까요?
위에서 보여드린 yaml 파일을 저장한 후, kubectl apply 명령어를 이용해 파드를 생성하세요:
kubectl apply -f resource-pod.yaml
파드가 생성된 후, 자원 설정을 확인해볼 수 있습니다:
kubectl get pod resource-limited-pod -o yaml
자원의 사용량을 모니터링하는 명령어로 현재 상태를 확인해보세요:
kubectl top pod resource-limited-pod
자원을 과도하게 사용하는 애플리케이션을 실행해서 리소스 한도가 어떻게 작동하는지 확인할 수 있습니다. 예를 들어, 무한 루프를 사용해 CPU 사용량을 높여보는 간단한 스크립트를 컨테이너 안에서 실행해보세요:
kubectl exec -it resource-limited-pod -- /bin/bash
while true; do :; done
이제 kubectl top pod 명령어를 사용해서 리소스 사용량이 어떻게 변하는지 확인하고, CPU가 500m를 넘지 않도록 제한되는 모습을 확인할 수 있습니다.
리소스 설정을 잘하면 리소스 부족으로 인한 시스템 장애를 막을 수 있지만, 너무 낮은 값을 설정하면 파드가 필요한 자원을 다 사용하지 못해 성능에 문제가 생길 수 있습니다. 반대로 너무 높은 값을 설정하면 다른 파드들이 자원을 충분히 사용하지 못할 수 있습니다.
자, 이렇게 해서 쿠버네티스의 Pod 리소스 설정에 대해 알아보았습니다. 쿠버네티스의 자원 설정은 애플리케이션의 안정성과 성능을 보장하기 위해 매우 중요한 요소입니다. 적절한 리소스 요청(Requests)과 제한(Limits) 설정을 통해 자원을 효율적으로 관리하고, 클러스터의 안정성을 높일 수 있습니다.
리소스 설정을 실습해보면서 자원을 어떻게 관리하고 모니터링할 수 있는지 이해하는 것이 중요하겠죠. 항상 최적의 자원 설정을 찾아 클러스터의 성능을 최대로 끌어올리는 것이 목표입니다.