Pod застревает в состоянии PodInitializing, когда initContainer находится в состоянии OOMKilled.

У меня есть следующая локальная среда 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 ответ
1

Таким образом, рабочий процесс, как показано ниже из документации.

Контейнеры инициализации точно такие же, как обычные контейнеры, за исключением:

  • Контейнеры инициализации всегда выполняются до завершения.
  • Каждый контейнер инициализации должен быть успешно завершен до запуска следующего.

Если происходит сбой контейнера инициализации пода, kubelet многократно перезапускает этот контейнер инициализации, пока не добьется успеха. Однако, если у пода есть политика перезапуска «Никогда», а контейнер инициализации дает сбой во время запуска этого пода, Kubernetes рассматривает весь под как сбойный.

Так что это в правильном состоянии AFAIK.

asktyagi

Добавить комментарий

Ваш адрес email не будет опубликован.