如何在 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
之前
我正在尝试应用配置文件以使用 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