Есть ли конкретный способ установки пакетов Python на pods? - PullRequest
2 голосов
/ 11 апреля 2019

Краткая справка: я настроил Airflow на Kubernetes (на AWS).Я могу запускать группы обеспечения доступности баз данных, которые запрашивают базу данных, отправляют электронные письма или делают все, что не требует пакета, который еще не является частью Airflow.Например, если я попытаюсь запустить группу обеспечения доступности баз данных, использующую SDK для бизнеса Facebook, она, очевидно, прекратит работу, потому что зависимость недоступна.Я пробовал несколько разных способов установить эту зависимость, а также установить другие, но не увенчался успехом.

Я пытался установить пакеты Python, изменив мои развертывания планировщика и веб-сервера, чтобы выполнить установку моих зависимостей в pip как часть initContainer.Когда я это делаю, группа доступности базы данных остается сломанной, поскольку она не может найти необходимые пакеты.Когда я открываю оболочку для своего модуля, я вижу, что зависимости не установлены (я проверяю, используя pip list).Я также убедился, что не установлены другие версии python / pip.

Я также попытался установить зависимости, выполнив установку pip, когда я открываю оболочку для своего модуля.Этот способ успешен в установке зависимости в правильном месте и также делает ее доступной.Однако вместо пользовательского интерфейса веб-сервера, показывающего, что моя группа доступности базы данных повреждена, я получаю сообщение this dag isn't available in the webserver dagbag object.

Я ожидаю, что запуск pip install в составе моего initContainer или контейнера сделает эти зависимости доступными в моем модуле.Однако это не так.Как будто pip install запускается без проблем, но к тому времени, когда мои модули полностью настроены, пакеты python уже нигде не найдены

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

Ответы [ 2 ]

1 голос
/ 11 апреля 2019

Контейнер init является отдельным экземпляром Docker. Если вы не настроите какое-то общее хранилище для своих библиотек Python (что весьма сомнительно), установка pip в контейнере init не повлияет на работающий контейнер pod.

Я вижу два варианта:

1) Измените используемый образ докера, включив в него нужные вам пакеты

2) Добавьте pip install к команде, выполняемой в модуле. Нередко объединяют несколько команд с && между ними, чтобы выполнить последовательность операций в стартовом модуле.

0 голосов
/ 11 апреля 2019

Я бы порекомендовал обновить образ Airflow Docker, включив в него нужные вам библиотеки.

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

MyOperator(...,
    executor_config={
    "KubernetesExecutor":
        {"image": "myCustomDockerImage"}
    }
)

Ссылка: baseoperator.py

...