如何在Cloud Composer中使用bash运算符从DAG运行`kubectl -f apply <file.yaml>`?

时间:2019-07-04 13:11:34

标签: kubernetes google-cloud-composer

我正在尝试使用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,则文件确实存在

3 个答案:

答案 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下可用。