Eu tenho o seguinte ambiente local do Kubernetes:
- SO: Red Hat Enterprise Linux versão 8.6 (Ootpa)
- Kubernetes: 1.23.7 (nó único, compilado com kubeadm)
- Driver NVIDIA: 515.65.01
- nvidia-container-toolkit: 1.10.0-1.x86_64 (rpm)
- containerd: v1.6.2
- vcr.io/nvidia/k8s-device-plugin:v0.12.2
E eu executo o seguinte Pod no meu servidor. Apenas app2 (initContainer2) usa GPU.
initContainer1: app1
↓
initContainer2: app2 (Uses GPU)
↓
container1: app3
Quando o app2 usa muita RAM e é eliminado do OOM, o Pod deve estar no OOMKilled
status, mas está preso no PodInitializing
status no meu ambiente.
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>
O resultado kubectl describe pod
é o seguinte:
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
...
...
Esse problema nunca acontecerá quando eu substituir app2 por outro contêiner que não usa GPU ou quando eu iniciar app2 como um único contêiner (não um contêiner init) do Pod. Em ambos os casos, o status será corretamente OOMKilled
.
Isso é um inseto? Em caso afirmativo, existem soluções alternativas?