gcloud composer 命令失败 "executable file not found in $PATH"

gcloud composer command fails "executable file not found in $PATH"

我正在尝试 运行 在 Cloud Composer 上回填一个 Airflow DAG。我错过了什么吗?

$ 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

谢谢。

试试老版本的gcloudsdk,比如283.0.0

我的287.0.0版本也有同样的问题 返回使用版本 283.0.0 后,一切正常。

为了更深入地调查 Airflow GKE 容器 runtime 中的问题,我建议调用 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

打印出的命令可能会提供获取调试条目的机会,使用kubectl命令行组合研究记录:

DEBUG: Executing command: [u'/google/google-cloud-sdk/bin/kubectl', u'--namespace', u'composer-1-8-3-airflow-1-10-3-xxxxxx', u'exec', u'airflow-worker-xxxxxxxx', u'-tic', 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 对特定 Airflow worker Pod 的命令调用:

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

根据评论对话,其中提到您能够通过 kubectl 调用挂钩成功发出 Airflow backfill 命令,我可以假设问题可能与检索到的不正确参数有关从顶部 gcloudkubectl 前任。

您甚至可以尝试分别用 --start_date--end_date 替换 -s-e 位置参数,因为由于某些未知原因 GKE 嵌套了 OCI运行时在错误消息中将 -s 识别为执行文件。

该错误是由 kubectl exec 中最近的更改引起的,该更改导致仅选项 (--) 结束后的标记被解释为可执行文件。由于 gcloud composer environments run 内部使用 kubectl,您可以回滚到 kubectl 的旧版本作为解决方法(将其安装为 gcloud 组件的用户 - 您可以使用 gcloud components restore).

此问题已在 Cloud SDK 版本 288.0.0 中得到解决。至少更新到此版本以解决问题(您 不需要 需要更新 kubectl)。 运行 更新以下内容:

gcloud components update

安装最新的 google 云 SDK 和 Kubectl 解决了问题

sudo apt-get install kubectl
sudo apt-get install google-cloud-sdk