1.4. Pod 및 컨테이너의 리소스 관리
Pod를 지정하면 컨테이너에 필요한 각 리소스의 양을 지정할 수 있습니다. 지정할 가장 일반적인 리소스는 CPU 및 메모리(RAM)입니다.
Pod에서 컨테이너에 대한 리소스 요청을 지정하면 kubernetes-scheduler에서 이 정보를 사용하여 Pod를 배치할 노드를 할당합니다.
컨테이너, kubelet 또는 노드 에이전트에 대한 리소스 제한을 지정하면 실행 중인 컨테이너가 설정한 제한보다 더 많은 리소스를 사용할 수 없도록 해당 제한을 적용합니다. kubelet은 특히 해당 컨테이너가 사용할 수 있도록 요청된 시스템 리소스 양을 예약합니다.
1.4.1. 요청 및 제한 링크 복사링크가 클립보드에 복사되었습니다!
Pod가 실행 중인 노드에 사용 가능한 리소스가 충분한 경우 컨테이너에서 해당 리소스에 대한 요청보다 더 많은 리소스를 사용할 수 있습니다. 그러나 컨테이너는 리소스 제한을 초과하여 사용할 수 없습니다.
예를 들어 컨테이너에 256MiB의 메모리 요청을 설정하고 해당 컨테이너가 8GiB 메모리가 있는 노드에 예약된 Pod에 있고 다른 Pod가 없는 경우 컨테이너에서 더 많은 RAM을 사용하려고 시도할 수 있습니다.
해당 컨테이너에 메모리 제한을 4GiB로 설정하면 kubelet 및 컨테이너 런타임에서 제한을 적용합니다. 런타임에서는 컨테이너가 구성된 리소스 제한보다 더 많은 것을 사용하지 못하도록 합니다.
컨테이너의 프로세스에서 허용된 메모리 양보다 많은 메모리를 사용하려고 하면 시스템 커널은 할당을 시도한 프로세스를 종료하며 OOM( Out Of Memory ) 오류가 발생합니다.
제한은 다음 두 가지 방법으로 구현할 수 있습니다.
- Reactively: 시스템이 위반을 감지하면 개입합니다.
- 적용: 시스템에서 컨테이너가 제한을 초과하지 않도록 합니다.
런타임마다 동일한 제한을 구현하는 다양한 방법이 있을 수 있습니다.
리소스에 대한 제한을 지정하지만 요청을 지정하지 않고 승인 시간 메커니즘에서 해당 리소스에 대한 기본 요청을 적용하지 않은 경우 Kubernetes는 지정한 제한을 복사하고 해당 리소스에 대해 요청된 값으로 사용합니다.