我的BigQuery连接器都在运行,但我在Docker容器中有一些现有脚本,我希望在Cloud Composer上安排,而不是App Engine Flexible。
我有以下脚本,似乎遵循我可以找到的示例:
import datetime
from airflow import DAG
from airflow import models
from airflow.operators.docker_operator import DockerOperator
yesterday = datetime.datetime.combine(
datetime.datetime.today() - datetime.timedelta(1),
datetime.datetime.min.time())
default_args = {
# Setting start date as yesterday starts the DAG immediately
'start_date': yesterday,
# If a task fails, retry it once after waiting at least 5 minutes
'retries': 1,
'retry_delay': datetime.timedelta(minutes=5),
}
schedule_interval = '45 09 * * *'
dag = DAG('xxx-merge', default_args=default_args, schedule_interval=schedule_interval)
hfan = DockerOperator(
task_id = 'hfan',
image = 'gcr.io/yyyyy/xxxx'
)
...但是在尝试运行它时会在网络用户界面中告诉我:
Broken DAG: [/home/airflow/gcs/dags/xxxx.py] No module named docker
可能是Docker未配置为在Cloud Composer运行的Kubernetes集群内部工作吗?或者我只是在语法中遗漏了什么?
答案 0 :(得分:4)
我通过在composer的PyPI部分安装docker-py == 1.10.6解决了这个问题。
但是,要使DockerOperator正常工作需要更多的努力,因为作曲家工作者无法访问Docker守护程序。前往GCP控制台并执行以下步骤;获得cluster credentials后)。
将当前部署配置导出到文件
kubectl get deployment airflow-worker -o yaml --export > airflow-worker-config.yaml
编辑airflow-worker-config.yaml(example link)以挂载docker.sock和docker,授予对airflow-worker的特权访问以运行docker命令
应用部署设置
kubectl apply -f airflow-worker-config.yaml
答案 1 :(得分:1)
如其他答案所述,Docker Python客户端未预先安装在Cloud Composer环境中。要安装它,请将其添加为您环境配置中的PyPI依赖项。
注意事项:默认情况下,DockerOperator
将尝试通过/var/run/docker.sock
与Docker API进行对话来管理容器。该插座不是不安装在Composer Airflow工作人员吊舱内,并且不建议手动配置该插座以实现 。 Use of DockerOperator
is only recommended in Composer if configured to talk to Docker daemons running outside of your environments。
为避免绕过Kubernetes造成更脆弱的配置或意外情况(因为它负责管理整个集群中的容器),您应该使用KubernetesPodOperator
。如果要将容器启动到GKE群集(或Composer环境的群集)中,则可以使用GKEPodOperator
,它具有更特定的GCP相关参数。
答案 2 :(得分:0)
正如tobi6的回答所述,您需要在Composer环境中安装docker的PyPI包。有关于在您的环境中以特定软件包版本安装PyPI软件包的说明here。