Запустите скрипт python для контейнера из другого контейнера на том же модуле. - PullRequest
0 голосов
/ 20 апреля 2020

У меня есть два контейнера на одном модуле k8, container1, container2

У меня есть python скрипт в container1, Как мне запустить этот python скрипт на container2?

Я имею в виду что-то вроде s sh:

ssh user@container2 python < script_on_container1.py 

Ответы [ 3 ]

1 голос
/ 20 апреля 2020

Вы не можете; вам нужно сделать сетевой запрос от одного контейнера к другому.

Я бы предложил сначала создать прототип этого в локальной виртуальной среде Python. В container2 запустите какой-нибудь легкий HTTP-сервер, такой как Flask, и, когда он получит запрос, он вызовет любой код, который должен был бы выполнить скрипт. После того, как вы продемонстрировали эту работу, вы можете настроить то же самое в локальных Docker контейнерах и, если это сработает, превратить эти два процесса в два отдельных развертывания Kubernetes.

В общем случае с контейнерами, которые вы можете ' t «запускать команды» в других контейнерах. В предложенном вами решении контейнеры обычно не запускают s sh демонов, и поддерживать действительные учетные данные для входа в систему без их компрометации действительно сложно. (Если вы вставите закрытый ключ s sh в изображение Docker, любой, у кого есть изображение, может извлечь его тривиально. Секреты Kubernetes делают это немного лучше, но не очень.) Стандартный шаблон для одного контейнера для вызова другого через сетевой путь, обычно это либо прямой HTTP-запрос, либо через систему очередей, например, RabbitMQ.

0 голосов
/ 21 апреля 2020

Вы можете использовать этот скрипт; https://gist.github.com/ahmetkotan/b592bf9919cfac7daa2e2e6c2e95772d

python kubernetes_api_exec.py <pod_name> container2 python < script_on_container1.py

или другие команды. Например;

python kubernetes_api_exec.py <pod_name> container2 date
python kubernetes_api_exec.py <pod_name> container2 uname -a
0 голосов
/ 20 апреля 2020

Обходной путь для вашей проблемы - выполнить следующие шаги:

  1. Создать том и поделиться им между обоими контейнерами (con1 и con2) модуля.
  2. In con1, создайте cronjob, который запускается после <X> mins и прочитайте файл, который доступен на shared volume.
  3. Так что, когда con2 вносит какие-либо изменения в этот файл, con1 будет выполнять любую операцию указано в общем файле через общий том.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...