Есть ли способ указать tar-файл образа docker в файле манифеста для kubernetes?

#kubernetes

#kubernetes

Вопрос:

Есть ли способ указать tar-файл образа docker в файле манифеста развертывания для kubernetes? Узлы имеют доступ к подключенному сетевому диску, на котором будет находиться tar-файл. Есть сообщение, в котором изображение загружается docker на каждом узле, но мне было интересно, есть ли способ просто указать tar-файл и заставить Kubernetes выполнить загрузку и запуск.

—редактировать —
Чтобы быть более точным, скажем, у меня есть подключенный сетевой диск на каждом узле, есть ли способ с помощью только файла манифеста дать указание kubernetes загружать это изображение непосредственно из tar-файла и не помещать его в реестр docker.

Комментарии:

1. Не уверен, правильно ли я вас понял. Вы хотите создать контейнер на основе tar? Если вам нужен этот файл, вы можете использовать Dockerfile и создать свой собственный образ с этим файлом внутри контейнера. Однако, если вы хотите mount указать определенную папку в своем развертывании, чтобы разрешить вашим модулям доступ к ней, вы можете сделать это, когда укажете volume . Его описание описано здесь , пожалуйста, уточните, чего вы хотите достичь и какой тип тома вы хотите использовать.

2. Это будет более стандартная настройка для развертывания частного реестра Docker и отправки туда ваших изображений. Функционально он такой же, как вы описываете, но Kubernetes может использовать его без какой-либо специальной настройки.

3. @DavidMaze Мне просто интересно, возможно ли это вообще или манифесты могут извлекаться только из реестров.

Ответ №1:

В общем, нет, Kubernetes может обращаться к образам контейнеров только из реестра, а не с сетевого диска, см. Документацию.

Однако у вас может быть частный реестр внутри вашего кластера (см. Документы). У вас также могут быть изображения локально на узлах (предварительно извлеченные изображения), и Kubernetes получает к ним доступ оттуда, установив Значение imagePullPolicy Never (см. Документы).

Ответ №2:

Вы предоставили довольно ограниченную информацию о своей среде и о том, как она будет выглядеть.

Мне приходят в голову две вещи.

  1. Используйте initContainer для загрузки этого файла с помощью wget или аналогичного.

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

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

Таким образом, вы можете быть уверены, что tar-файл будет загружен до запуска вашего приложения. Пример можно найти здесь

  1. Используйте том для монтирования

В вашем deployment , statefulset , pod (не уверен, что вы используете) вы можете смонтировать том в pod. После этого вы сможете указать путь внутри pod из тома. Пожалуйста, имейте в виду, что вы должны использовать правильный access modes .

Для запуска .tar файла вы можете использовать некоторые команды bash, как в этой документации .