#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:
Вы предоставили довольно ограниченную информацию о своей среде и о том, как она будет выглядеть.
Мне приходят в голову две вещи.
- Используйте initContainer для загрузки этого файла с помощью
wget
или аналогичного.
Контейнеры инициализации точно такие же, как обычные контейнеры, за исключением:
- Контейнеры инициализации всегда выполняются до завершения.
- Каждый контейнер инициализации должен успешно завершиться перед запуском следующего.
Таким образом, вы можете быть уверены, что tar-файл будет загружен до запуска вашего приложения. Пример можно найти здесь
- Используйте том для монтирования
В вашем deployment
, statefulset
, pod
(не уверен, что вы используете) вы можете смонтировать том в pod. После этого вы сможете указать путь внутри pod из тома. Пожалуйста, имейте в виду, что вы должны использовать правильный access modes
.
Для запуска .tar
файла вы можете использовать некоторые команды bash, как в этой документации .