我正在尝试使用BashOperator从Cloud Compose应用配置文件来创建POD
首先,我尝试使用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
)
我希望可以使用配置文件有效地创建Pod,但实际输出是
{bash_operator.py:124} INFO - unable to recognize - Path to file
*如果您运行cat / path,则文件确实存在
答案 0 :(得分:0)
我忘了回答,显然通过bash运算符传递env var搞砸了执行。
该路径存在,并且我能够运行脚本而没有任何问题,我只是无法以这种方式传递环境变量。
我最终将它们传递给@ApiBearerAuth()
答案 1 :(得分:0)
您遇到问题的原因可能是,尽管您配置了gcloud
身份验证,但仍必须获得群集的kubectl
凭据:
gcloud container clusters get-credentials $CLUSTER_NAME --zone $GCP_ZONE --project $PROJECT_ID
在kubectl apply -f
/home/airflow/gcs/dags/.../spec.yaml
答案 2 :(得分:-1)
将DAG存储桶Buckets/<your bucket>/dags/
的内容复制到'/ home / airflow / gcsfuse / dags /',以保留文件夹结构。
如果您的spec.yaml像这样Buckets/<your bucket>/dags/<subfolder1>/spec.yaml
一样存储在DAG存储桶中,则该文件应该在以下路径/home/airflow/gcsfuse/dags/<subfolder1>/spec.yaml
下可用。