현상
아래 매니페스 파일과 같이 nvidia.com/gpu 리소스를 필요로 하는 pod 생성 시 에러 메세지와 함께 포드가 스케쥴링되지 않았다.
apiVersion: v1
kind: Pod
metadata:
name: gpu-pod
spec:
containers:
- name: nginx
image: nginx
resources:
limits:
nvidia.com/gpu: 1 # requesting 1 GPU
에러 메세지 확인
$ kubectl describe pod <POD_NAME>
[.. 생략 ..]
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning FailedScheduling 3s (x23 over 3m) default-scheduler 0/1 nodes are available: 1 Insufficient nvidia.com/gpu.
원인
nvidia.com/gpu 리소스 부족
describe 명령으로 스케쥴링되는 node 정보를 확인하여 사용 가능한 리소스양과 현재 할당된 리소스양을 비교한다.
$ kubectl describe node <GPU_NODE>
[... 생략 ...]
Capacity:
cpu: 12
ephemeral-storage: 214726764Ki
hugepages-1Gi: 0
hugepages-2Mi: 0
memory: 16342940Ki
nvidia.com/gpu: 2
pods: 110
Allocatable:
cpu: 12
ephemeral-storage: 197892185375
hugepages-1Gi: 0
hugepages-2Mi: 0
memory: 16240540Ki
nvidia.com/gpu: 2
pods: 110
[... 생략 ...]
Allocated resources:
(Total limits may be over 100 percent, i.e., overcommitted.)
Resource Requests Limits
-------- -------- ------
cpu 260m (2%) 0 (0%)
memory 110Mi (0%) 170Mi (1%)
ephemeral-storage 0 (0%) 0 (0%)
nvidia.com/gpu 2 2
현재 노드에 사용가능한 nvidia.com/gpu 리소스(Allocatable)가 2이며, 할당된 nvidia.com/gpu 리소스(Allocated resources)가 2이다. 포드가 요구하는 리소스를 전부 사용하고 있기 때문에, 포드가 스케쥴링되지 않는 것이다.
조치 방법
불필요한 pod를 정리하는 것이 가장 간편한 해결 방법이 될 것 같다.
그 외엔 사용 가능한 리소스의 양을 늘리는 방법 밖에 없는 듯?
참고 문서