Рейтинг:0

Не удалось запустить Containerd после Nvidia Config

флаг ky

я следил за этим официальный учебник чтобы разрешить кластеру k8s с голым железом иметь доступ к GPU. Однако при этом я получил ошибки.

Kubernetes 1.21 containerd 1.4.11 и Ubuntu 20.04.3 LTS (GNU/Linux 5.4.0-91-универсальный x86_64).

Драйвер Nvidia предустановлен в системной ОС версии 495 Headless.

После вставки следующего конфига внутрь /etc/containerd/config.toml и выполнить перезапуск службы, containerd не запустится с выход 1.

Контейнер Конфиг.toml

системный журнал здесь.

# постоянное расположение данных
корень = "/var/библиотека/контейнер"
# информация о состоянии выполнения
состояние = "/выполнить/контейнер"

# Kubernetes не использует диспетчер перезапуска containerd.
disabled_plugins = ["перезагрузить"]

# КОНФИГУРАЦИЯ NVIDIA НАЧАТЬ ЗДЕСЬ

версия = 2
[плагины]
  [плагины."io.containerd.grpc.v1.cri"]
    [плагины."io.containerd.grpc.v1.cri".containerd]
      default_runtime_name = "nvidia"

      [плагины."io.containerd.grpc.v1.cri".containerd.runtimes]
        [плагины."io.containerd.grpc.v1.cri".containerd.runtimes.nvidia]
          привилегированный_без_хост_устройства = ложь
          runtime_engine = ""
          runtime_root = ""
          runtime_type = "io.containerd.runc.v2"
          [плагины."io.containerd.grpc.v1.cri".containerd.runtimes.nvidia.options]
            BinaryName = "/usr/bin/nvidia-container-runtime"

# НАСТРОЙКА NVIDIA ЗАКАНЧИВАЕТСЯ ЗДЕСЬ

[отлаживать]
  уровень = ""

[группа]
  max_recv_message_size = 16777216
  max_send_message_size = 16777216

[плагины.linux]
  прокладка = "/usr/bin/containerd-прокладка"
  время выполнения = "/usr/bin/runc"

Я могу подтвердить, что драйвер Nvidia обнаруживает GPU (Nvidia GTX 750Ti), запустив nvidia-smi и получил следующий вывод

+--------------------------------------------- ----------------------------+
| NVIDIA-SMI 495.44 Версия драйвера: 495.44 Версия CUDA: 11.5 |
|-------------------------------+---------------- -----+----------------------+
| Имя GPU Persistence-M| Bus-Id Disp.A | Летучий некорр. ЕСК |
| Мощность вентилятора Temp Perf:Использование/Ограничение| Использование памяти | GPU-Util Compute M. |
| | | МИГ М. |
|===============================+================= =====+======================|
| 0 NVIDIA GeForce ... Выкл. | 00000000:02:00.0 Выкл | Н/Д |
| 34% 34C P8 1 Вт / 38 Вт | 0 МБ / 2000 МБ | 0% По умолчанию |
| | | Н/Д |
+---------------------------------------------+---------------- -----+----------------------+

+--------------------------------------------- ----------------------------+
| Процессы: |
| GPU GI CI PID Тип Имя процесса Память GPU |
| ID Использование ID |
|================================================ =============================|
| Запущенных процессов не найдено |
+--------------------------------------------- ----------------------------+

модифицированный config.toml это заставило его работать.

флаг in
Две вещи: вы, вероятно, получите лучшую помощь, если опубликуете журналы из контейнера, который вышел ненулевым, поскольку детали имеют значение.Во-вторых, не используйте 1.4.11, в [1.4.12] было исправление безопасности (https://github.com/containerd/containerd/releases/tag/v1.4.12)
XPLOT1ON avatar
флаг ky
@mdaniel, что вы сообщили о такой уязвимости, я обновил все узлы. Кроме того, я обновил сообщение выше системным журналом.
Рейтинг:2
флаг in

Насколько я могу судить, это:

02 декабря, 03:15:36 k8s-node0 containerd[2179737]: containerd: неверный URI отключенного плагина «перезапустить», ожидать io.containerd.x.vx

02 декабря, 03:15:36 k8s-node0 systemd[1]: containerd.service: основной процесс завершен, код = завершен, статус = 1/FAILURE

Итак, если вы знать что рестарт-ish на самом деле включен, вам нужно будет отследить его новый синтаксис URI, но я бы рекомендовал просто закомментировать эту строфу или использовать disabled_plugins = [], поскольку Контейнерная доступная роль мы используем ничего не упоминает о «перезагрузке» и имеет = [] вкус


Кстати, вы можете захотеть ограничить журналctl вызов в будущем, чтобы просто посмотреть на containerd.service, так как он выкинет много текста, который отвлекает: журналctl -u containerd.service и вы даже можете ограничить его только несколькими последними строками, что иногда может помочь в дальнейшем: журналctl -u containerd.service --lines=250

XPLOT1ON avatar
флаг ky
Спасибо за обширный ответ, я попытался указать `disabled_plugins` как пустой список. Это дало мне другую ошибку `containerd: недопустимый URI ключа плагина "linux", ожидаемый io.containerd.x.vx`. Я прикрепил полный контейнер `config.toml` в исходном сообщении. Если бы вы могли посмотреть, это было бы здорово.
флаг in
Да, похоже, та же проблема; `linux` в качестве неквалифицированного имени, очевидно, является старым стилем, поэтому вам, вероятно, понадобится `[plugins."io.containerd.runtime.v1.linux"]`, точно так же, как вы видите с членами `[plugins]` в верхней части файла и [как показано в шаблоне, на который я ссылаюсь](https://github.com/particuleio/symplegma-containerd/blob/v1.4.3-rel.0/templates/config.toml.j2# L132)
XPLOT1ON avatar
флаг ky
Спасибо за помощь, теперь я могу загрузить containerd со встроенной конфигурацией на основе документации nvidia. На будущее: я обновил свой исходный пост для обновленного config.toml.
флаг in
Я рад это слышать, и я всегда рад, когда это что-то простое, и я желаю вам удачи в вашем путешествии по запуску графических процессоров в k8s! Пожалуйста, рассмотрите возможность включения конфигурации в свой вопрос, поскольку ссылка на внешние сайты может привести к тому, что они будут 404 для будущих поколений.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.