Как можно запустить `kubectl -f apply‹ file.yaml ›` из группы доступности базы данных с помощью оператора bash в Cloud Composer?

Я пытаюсь применить файл конфигурации для создания POD из Cloud Compose с помощью BashOperator

Сначала я попытался использовать PodOperator, но он не позволяет передать файл спецификации, он просто создается из изображения.

Я пробовал использовать BashOperator, так как рабочий уже включает gcloud, kubectl и т. Д. https://cloud.google.com/composer/docs/how-to/using/writing-dags#bashoperator

Но каждый раз, когда я запускаю команду, я получаю ошибку с аргументами или gcloud sdk.

Я пробовал запускать отдельные команды kubectl, и kubectl действительно установлен на работнике.

Раньше я пытался настроить конфигурацию для кластера, но при этом вызове у меня тоже были ошибки.

job = BashOperator(
    task_id='start',
    bash_command='kubectl apply -f
/home/airflow/gcs/dags/.../spec.yaml',
    env=prodigy_env
    )

Я ожидаю, что модуль будет эффективно создан с помощью файла конфигурации, но фактический результат

{bash_operator.py:124} INFO - unable to recognize - Path to file

* Если вы запустите cat / path, файл действительно существует


person Benjamin Gil    schedule 04.07.2019    source источник


Ответы (3)


Я забыл ответить, очевидно, передача env vars через оператор bash мешала выполнению.

Путь существует, и я смог запустить скрипт без каких-либо проблем, я просто не мог передавать переменные env таким образом.

В итоге я передал их в spec.yaml

person Benjamin Gil    schedule 12.08.2019

Вероятно, у вас возникли проблемы, потому что, хотя у вас настроена gcloud аутентификация, вам все равно нужно получить kubectl учетные данные для кластера:

gcloud container clusters get-credentials $CLUSTER_NAME --zone $GCP_ZONE --project $PROJECT_ID

Выполните эту команду перед kubectl apply -f /home/airflow/gcs/dags/.../spec.yaml

person Alan Borsato    schedule 21.12.2019

Содержимое корзины DAG Buckets/<your bucket>/dags/ копируется в '/ home / airflow / gcsfuse / dags /' на рабочих, сохраняя структуру папок.

Если ваш spec.yaml хранится в вашей корзине DAG, как этот Buckets/<your bucket>/dags/<subfolder1>/spec.yaml, то файл должен быть доступен по следующему пути /home/airflow/gcsfuse/dags/<subfolder1>/spec.yaml.

Просто взгляните на путь "/home/airflow/gcs/dags/.../spec.yaml '" с точки зрения файловой системы - вместо "..." вам, вероятно, следует использовать ".." для обозначения папка над папкой "dags".

--

С другой стороны, существует альтернатива созданию модуля с использованием явного вызова команды kubectl, а именно: вы можете использовать KubernetesPodOperator - на этой веб-странице описывается, как использовать KubernetesPodOperator для создания модулей

person rafalbiegacz    schedule 21.07.2019