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

How can you run `kubectl -f apply <file.yaml>` from a DAG using bash operator in Cloud Composer?

我正在尝试应用配置文件以使用 BashOperator 从 Cloud Compose 创建 POD

首先我尝试使用 PodOperator,但它不允许传递规范文件,它只是从图像构建。

我尝试使用 BashOperator,因为 worker 已经包含 gcloud、kubectl 等。https://cloud.google.com/composer/docs/how-to/using/writing-dags#bashoperator

但每次我 运行 一个命令时,我都会收到一些关于参数或 gcloud sdk 的错误。

我尝试了 运行ning 单个 kubectl 命令,kubectl 确实安装在 worker 上。

我之前尝试过为集群设置配置,但我在那个调用中也遇到了错误。

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

*如果你 运行 a cat /path 文件确实存在

DAG 存储桶 Buckets/<your bucket>/dags/ 的内容已复制到保留文件夹结构的工作程序上的“/home/airflow/gcsfuse/dags/”。

如果您的 spec.yaml 像这样存储在您的 DAGs 存储桶中 Buckets/<your bucket>/dags/<subfolder1>/spec.yaml 那么该文件应该可以在以下路径下找到 /home/airflow/gcsfuse/dags/<subfolder1>/spec.yaml.

从文件系统的角度看一下“/home/airflow/gcs/dags/.../spec.yaml'”路径——您可能应该使用“..”而不是“...” " 以引用 "dags" 文件夹上方的文件夹。

--

另一方面,还有一种方法可以使用显式调用 kubectl 命令来创建 Pod - 即您可以使用 KubernetesPodOperator - this web page describes how to use KubernetesPodOperator to create Pods

我忘了回答,显然通过 bash 运算符传递环境变量会扰乱执行。

路径存在,我能够运行脚本没有任何问题我只是不能那样传递环境变量。

我最终在 spec.yaml

中通过了它们

您遇到问题可能是因为虽然您配置了 gcloud 身份验证,但您仍然需要为集群获取 kubectl 凭据:

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

运行 这个命令在 kubectl apply -f /home/airflow/gcs/dags/.../spec.yaml

之前