You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker Compose部署的Airflow无法连接本地Kind K8s集群创建Pod

Docker Compose部署的Airflow无法连接本地Kind K8s集群创建Pod

看起来你碰到了Docker环境下Airflow连接本地Kind Kubernetes集群的常见网络连通性问题,结合你提供的代码和错误日志,我整理了几个针对性的排查和解决方向:

问题核心梳理

你的Airflow Worker容器尝试连接K8s API Server时反复出现Connection refused(连接被拒绝),最终触发'NoneType' object has no attribute 'metadata'错误,本质是Airflow容器无法访问到Kind集群的API Server。

1. 修正KubeConfig中的API Server地址

Kind默认会把API Server绑定到宿主机的127.0.0.1,但Docker容器里的localhost指向容器自身而非宿主机,这是最常见的坑。你需要调整kubeconfig文件中的server字段:

  • 若为Linux环境:把kubeconfig里的server: https://127.0.0.1:xxxx改成宿主机的实际局域网IP(比如https://192.168.1.100:xxxx)
  • 若为Windows/macOS(使用Docker Desktop):可以用Docker内置的特殊DNS名称host.docker.internal替代,改成https://host.docker.internal:xxxx

修改后,进入Airflow Worker容器执行测试命令验证连通性:

kubectl --kubeconfig=/opt/airflow/dags/k8s_config.yaml --context=kind-kind get nodes

如果能正常返回节点信息,说明网络连通性已经解决。

2. 确保KubeConfig文件的权限正确

Airflow容器默认使用airflow用户运行,你需要确保挂载的k8s_config.yaml文件能被该用户读取:

  • 在宿主机上调整文件权限:chmod 644 ~/.kube/config(挂载到容器里的文件会继承这个权限)
  • 进入Airflow Worker容器,检查文件权限:ls -l /opt/airflow/dags/k8s_config.yaml,确保airflow用户有读权限

3. 验证Docker Host网络的配置有效性

你提到已经把Worker的network_mode设为host,但不同系统下这个配置的效果有差异:

  • Linux系统下,Host网络模式会让容器直接使用宿主机的网络栈,此时容器里的localhost就是宿主机,kubeconfig用127.0.0.1是有效的
  • Windows/macOS下,Docker的Host网络实际指向Docker Desktop的虚拟机而非物理宿主机,所以还是需要用host.docker.internal作为API Server地址

4. 检查Airflow K8s Task算子的配置细节

确认你的算子配置里没有遗漏关键参数:

  • 可以尝试添加service_account_name参数(比如默认的default服务账号),确保Pod有足够权限创建资源
  • 确认namespace="default"确实存在于你的Kind集群中

附上你提供的代码片段方便参考:

import sys
from airflow.decorators import task

@task.kubernetes(
    image="python:3.11.5-alpine3.18",
    name="airflow_k8s_task",
    namespace="default",
    config_file="/opt/airflow/dags/k8s_config.yaml",
    cluster_context="kind-kind",
)
def k8s_task():
    print(f"running in k8s! Python version: {sys.version_info}")

以及你遇到的错误日志:

[2023-09-30, 13:28:01 UTC] {pod.py:961} INFO - Building pod -k8s-task-lugfpzol with labels: {'dag_id': 'custom_docker_k8s_dag', 'task_id': 'k8s_task', 'run_id': 'manual__2023-09-30T111956.4977000000-0da65ab9a', 'kubernetes_pod_operator': 'True', 'try_number': '7'}
[2023-09-30, 13:28:01 UTC] {connectionpool.py:823} WARNING - Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x7f57b662b550>: Failed to establish a new connection: [Errno 111] Connection refused')': /api/v1/namespaces/default/pods?labelSelector=dag_id%3Dcustom_docker_k8s_dag%2Ckubernetes_pod_operator%3DTrue%2Crun_id%3Dmanual__2023-09-30T111956.4977000000-0da65ab9a%2Ctask_id%3Dk8s_task%2Calready_checked%21%3DTrue%2C%21
-worker
[2023-09-30, 13:28:01 UTC] {connectionpool.py:823} WARNING - Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x7f57b662b3d0>: Failed to establish a new connection: [Errno 111] Connection refused')': /api/v1/namespaces/default/pods?labelSelector=dag_id%3Dcustom_docker_k8s_dag%2Ckubernetes_pod_operator%3DTrue%2Crun_id%3Dmanual__2023-09-30T111956.4977000000-0da65ab9a%2Ctask_id%3Dk8s_task%2Calready_checked%21%3DTrue%2C%21***-worker
[2023-09-30, 13:28:01 UTC] {connectionpool.py:823} WARNING - Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x7f57b662b090>: Failed to establish a new connection: [Errno 111] Connection refused')': /api/v1/namespaces/default/pods?labelSelector=dag_id%3Dcustom_docker_k8s_dag%2Ckubernetes_pod_operator%3DTrue%2Crun_id%3Dmanual__2023-09-30T111956.4977000000-0da65ab9a%2Ctask_id%3Dk8s_task%2Calready_checked%21%3DTrue%2C%21***-worker
[2023-09-30, 13:28:01 UTC] {pod.py:1017} ERROR - 'NoneType' object has no attribute 'metadata'

备注:内容来源于stack exchange,提问作者Jiew Meng

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 12:03:04