У меня есть следующая локальная среда Kubernetes:
- ОС: Red Hat Enterprise Linux версии 8.6 (Ootpa)
- Kubernetes: 1.23.7 (один узел, сборка с помощью kubeadm)
- Драйвер NVIDIA: 515.65.01
- nvidia-контейнер-инструментарий: 1.10.0-1.x86_64 (об/мин)
- контейнерд: v1.6.2
- vcr.io/nvidia/k8s-устройство-плагин:v0.12.2
И я запускаю следующий Pod на своем сервере. Только app2 (initContainer2) использует GPU.
initContainer1: app1
↓
initContainer2: app2 (Uses GPU)
↓
container1: app3
Когда app2 использует слишком много оперативной памяти и отключается OOM, Pod должен быть в OOMKilled
статус, но он застрял в PodInitializing
статус в моей среде.
NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
default gpu-pod 0/1 PodInitializing 0 83m xxx.xxx.xxx.xxx xxxxx <none> <none>
Результат kubectl describe pod
составляет:
Init Containers:
app1:
...
State: Terminated
Reason: Completed
Exit Code: 0
Started: Tue, 30 Aug 2022 10:50:38 +0900
Finished: Tue, 30 Aug 2022 10:50:44 +0900
...
app2:
...
State: Terminated
Reason: OOMKilled
Exit Code: 0
Started: Tue, 30 Aug 2022 10:50:45 +0900
Finished: Tue, 30 Aug 2022 10:50:48 +0900
...
app3:
...
State: Waiting
Reason: PodInitializing
...
...
Эта проблема никогда не возникнет, если я заменю app2 другим контейнером, не использующим GPU, или когда я запущу app2 как отдельный контейнер (не контейнер инициализации) пода. В обоих случаях статус будет правильно OOMKilled
.
Это ошибка? Если да, то есть ли обходные пути?
kubernetes nvidia gpu containerd
Дайго
1 ответ
Таким образом, рабочий процесс, как показано ниже из документации.
Контейнеры инициализации точно такие же, как обычные контейнеры, за исключением:
- Контейнеры инициализации всегда выполняются до завершения.
- Каждый контейнер инициализации должен быть успешно завершен до запуска следующего.
Если происходит сбой контейнера инициализации пода, kubelet многократно перезапускает этот контейнер инициализации, пока не добьется успеха. Однако, если у пода есть политика перезапуска «Никогда», а контейнер инициализации дает сбой во время запуска этого пода, Kubernetes рассматривает весь под как сбойный.
Так что это в правильном состоянии AFAIK.
asktyagi