Сбой команды gcloud composer "исполняемый файл не найден в $ PATH" - PullRequest
1 голос
/ 01 апреля 2020

Я пытаюсь выполнить обратную засыпку DAG Airflow в облаке Composer. Я что-то пропустил?

$ gcloud composer environments run myenv \
  --location  us-central1 --project myproject \
  backfill -- -s 2020-10-05T10:30 -e 2020-10-05T10:30 \
  -x -I mydag 
kubeconfig entry generated for us-central1-myenv-xxx-gke.
Executing within the following kubectl namespace: xxx
command terminated with exit code 126
OCI runtime exec failed: exec failed: container_linux.go:345: starting container process
caused "exec: \"-s\": executable file not found in $PATH": unknown

ERROR: (gcloud.composer.environments.run) kubectl returned non-zero status code.

Я использую следующие версии инструментов CLI.

$ gcloud version
Google Cloud SDK 286.0.0
bq 2.0.55
core 2020.03.24
gsutil 4.48

Composer версия изображения composer-1.8.3-airflow-1.10.3.

Спасибо.

Ответы [ 3 ]

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

Чтобы глубже исследовать проблему в контейнере Airflow GKE время выполнения , я бы порекомендовал вызвать команду gcloud composer environments run, переключаясь на debug уровень выходной детализации.

gcloud composer environments run myenv --location us-central1 --project myproject --verbosity=debug backfill -- -s 2020-10-05T10:30 -e 2020-10-05T10:30 -x -I mydag

Команда print out может дать возможность получить отладочные записи, исследуя записи с kubectl составами командной строки:

ОТЛАДКА: Выполнение команды: [u '/ google / google-cloud- sdk / bin / kubectl ', u' - пространство имен ', u' composer -1-8-3-airflow-1-10-3-xxxxxx ', u'exe c', u'airflow-worker -xxxxxxxx ', u'-ti c', u'airflow-worker ', u'airflow', u'backfill ', u' - ', u'-s', u'2020-10-05T10: 30 ', u'-e', u'2020-10-05T10: 30 ', u'-x', u'-I ', u'test_dag']

Приведенный выше вывод отражает способ, которым gcloud разъединяет аргументы командной строки, отправляя их kubectl наследнику команд. Далее, вы можете вручную составить kubectl вызов команды для конкретного Pod рабочего потока Airflow, основываясь на следующих параметрах:

kubectl --namespace composer-1-8-3-airflow-1-10-3-xxxxxx exec airflow-worker-xxxxxxxx -tic airflow-worker airflow backfill -- -s 2020-10-05T10:30 -e 2020-10-05T10:30 -x -I test_dag

После разговора с комментариями, в котором упоминалось, что вы могли выполнить обратную засыпку Airflow Команда через kubectl успешно вызывает вызов, могу предположить, что проблема может быть связана с неверными аргументами, полученными из gcloud предшественником kubectl.

Вы даже можете попытаться заменить -s, -e позиционные аргументы с --start_date и --end_date соответственно, из-за того, что по какой-то неизвестной причине вложенная среда выполнения GKE OCI распознала -s как файл выполнения в сообщении об ошибке.

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

Ошибка вызвана недавним изменением kubectl exec, в результате которого только маркер после окончания параметров (--) интерпретируется как исполняемый файл. Так как gcloud composer environments run внутренне использует kubectl, вы можете откатиться к более старой версии kubectl в качестве обходного пути (те, у кого она установлена ​​как gcloud компонент - вы можете использовать gcloud components restore ).

Ожидается, что эта проблема будет решена в следующем выпуске Cloud SDK (согласно странице примечания к выпуску будет 288.0.0)

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

Попробуйте старую версию gcloudsdk, например, 283.0.0

У меня также была такая же проблема с версией 287.0.0. После возврата к использованию версии 283.0.0 все работало правильно.

...