Как использовать докер с объемом и устройством в качестве действия в Openwhisk

У меня есть код в докере, который опрашивает каталог, чтобы выполнить над ним какое-то действие. Этот каталог передается с использованием параметра -v во время работы докера, также есть некоторые устройства, которые используются, например, --device /dev/nvidia0:/dev/nvidia0 --device /dev/nvidiactl:/dev/nvidiactl

в действии wsk docker я вижу, что для создания действия докера я использую команду, как показано ниже wsk -i action create --docker

я хотел понять, как передать объем и информацию об устройстве в докер, так как запуск и остановка этого докера будет поддерживаться openwhisk. Или есть какой-то другой обходной путь для этого


person Katiyman    schedule 15.06.2017    source источник


Ответы (2)


OpenWhisk не поддерживает выполнение действий на основе Docker с подключенными томами. Пользователи не имеют никакого контроля над устройствами хранения.

Обходным путем может быть использование хранилища объектов в качестве места хранения. Затем действие OpenWhisk может использовать API для запроса, извлечения и изменения данных из бессерверной среды выполнения.

person James Thomas    schedule 15.06.2017
comment
Понял... для громкости обходной путь сработает... но для устройств это будет проблемой. .. спасибо - person Katiyman; 16.06.2017
comment
Не лучше ли запустить ваше приложение в службе контейнеров IBM Bluemix, а не в OpenWhisk? Это будет поддерживать все функции, которые вам нужны. - person James Thomas; 16.06.2017
comment
Будет ли служба контейнеров bluemix поддерживать устройства? - person Katiyman; 19.06.2017

Старый вопрос, но я оставляю примечание, что для локальных тестовых развертываний у меня работает OpenWhisk с смонтированными сетевыми файловыми системами NFS и локальными путями. Для этого я просто добавил монтирование в исходный код (жестко закодированный, можно перейти к настройкам ENV, далее):

Добавьте тома монтирования -v здесь: Файл: core/invoker/src/main/scala/whisk/core/containerpool/docker/DockerContainer.scala

    val args = Seq(
    "--cpu-shares",
    cpuShares.toString,
    "--memory",
    s"${memory.toMB}m",
    "--memory-swap",
    s"${memory.toMB}m",
    "--network",
    network,
    "-v",
    "/mnt/nfs:/mnt/nfs",
    "-v",
    "/mnt/data:/mnt/data") ++
    environmentArgs ++
    dnsServers.flatMap(d => Seq("--dns", d)) ++
    name.map(n => Seq("--name", n)).getOrElse(Seq.empty) ++
    params

Чтобы собрать это, запустите в каталоге openwhisk-master:

./gradlew distdocker 

И пометьте созданный контейнер вызова, чтобы использовать его в стеке:

docker tag whisk/invoker openwhisk/invoker

После перезагрузки у вас есть свои тома.

НО ПРИМЕЧАНИЕ. Это противоречит принципам проектирования микросервисов без сохранения состояния и, вероятно, не самый разумный путь. Перепроверьте, можете ли вы обойтись без монтирования томов (они не не имеют состояния).

person user7640434    schedule 21.03.2018