Назад | Перейти на главную страницу

Как запустить образ докера на кубернетах, который принимает аргументы командной строки?

Мой вопрос похож на вот этот. У меня есть изображение докера, которое содержит файл python, который принимает аргументы из командной строки с помощью sys.stdin (). Я могу запустить изображение, используя следующую команду

cat file.csv | docker run -i -t my_image

Он передает содержимое file.csv изображению, и я получаю ожидаемый результат.

Теперь я хочу развернуть этот образ в кубернетах. Я могу без проблем запустить образ на сервере с помощью докера. Но согласно этот Учебник от Google, если я свернусь к нему, он должен отправить ответ, но я его не получаю, потому что у меня нет веб-сервера, который прослушивает какой-либо порт. Я пошел дальше и построил развертывание, используя следующую команду.

kubectl run -i my_deployment --image = gcr.io / $ {PROJECT_ID} / my_image: v1 --port 8080

Он создал развертывание, и я вижу, как работают модули. Потом выставляю.

kubectl выставить развертывание my_deployment --type = LoadBalancer --port 80 --target-port 8080

Но если я попытаюсь получить к нему доступ, используя IP-адрес, назначенный с помощью curl,

завиток http: // выделенный_IP

он просто говорит, что соединение отклонено.

Как можно развернуть этот образ докеры как службу и отправить содержимое файла в качестве входных данных в службу? Нужен ли мне для этого веб-сервер?

Чтение стандартного ввода и чтение веб-запроса - это разные вещи.

Если вы хотите, чтобы ваш ввод проходил через HTTP, вам нужен HTTP-сервер, который получает запрос, анализирует его и отправляет в ваше приложение.

Если вам нужен только TCP, но не HTTP, это немного проще, и вы, вероятно, можете что-то сделать с socat для прослушивания сокета и передачи вывода на стандартный вывод и передачи его через ваше приложение.

Но ничто в Kubernetes не может волшебным образом преобразовать TCP / IP в стандартный ввод для вас.