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

使用Airflow KubernetesPodOperator部署DBT Pod至GKE时遇配置错误

问题排查:Airflow 1.10.10中KubernetesPodOperator部署DBT Pod报错"Service host/port is not set."

运行KubernetesPodOperator任务时出现以下错误:

File "/home/airflow/.local/lib/python3.6/site-packages/kubernetes/config/incluster_config.py", line 51, in _load_config
raise ConfigException("Service host/port is not set.")

任务代码

uk_dbt_transform_task = KubernetesPodOperator(
    name="dbt-test-processor",
    namespace='prod',
    project_id=PROJECT_ID,
    cluster_name=CLUSTER_NAME,
    location='europe-west2',
    startup_timeout_seconds=120,
    image=IMAGE_URL,
    cmds=["run"],
    arguments=["-s", "TABLE_NAME"],
    get_logs=True,
    image_pull_policy="Always",
    ports=9090, # 此处为配置的端口
    hostnetwork=False, # 按Airflow文档设置为默认值false
    is_delete_operator_pod=False, 
    config_file=KUBE_CONFIG,
    service_account_name=SERVICE_ACCOUNT,
    dag=dag,
    task_id='uk_dbt_transform_task'
)

自定义DBT容器Dockerfile

# Top level build args
ARG build_for=linux/amd64

# FROM python:3.9.16-bullseye
FROM --platform=$build_for python:3.9.16-bullseye as base

ARG dbt_core_ref=dbt-core@v1.4.0b1
ARG dbt_bigquery_ref=dbt-bigquery@v1.4.0b1

# System setup
RUN apt-get update \
  && apt-get dist-upgrade -y \
  && apt-get install -y --no-install-recommends \
    git \
    ssh-client \
    software-properties-common \
    make \
    build-essential \
    ca-certificates \
    libpq-dev \
  && apt-get clean \
  && rm -rf \
    /var/lib/apt/lists/* \
    /tmp/* \
    /var/tmp/*

# Env vars
ENV PYTHONIOENCODING=utf-8
ENV LANG=C.UTF-8

# Update python
RUN python -m pip install --upgrade pip setuptools wheel --no-cache-dir

# Set docker basics
WORKDIR /usr/app/dbt/
VOLUME /usr/app

COPY . /usr/app/dbt/
ENTRYPOINT ["dbt"]

##
# dbt-core
##
FROM base as dbt-core
RUN python -m pip install --no-cache-dir "git+https://github.com/dbt-labs/${dbt_core_ref}#egg=dbt-core&subdirectory=core"

##
# dbt-bigquery
##
FROM base as dbt-bigquery
RUN python -m pip install --no-cache-dir "git+https://github.com/dbt-labs/${dbt_bigquery_ref}#egg=dbt-bigquery"

# Expose port for dbt docs
EXPOSE 9090

排查与解决方案

1. 错误根源:Kubernetes客户端配置加载问题

这个错误并非Pod端口配置导致,而是Airflow的Kubernetes客户端无法正确加载集群配置,尝试从集群内配置路径读取但失败,和你设置的ports参数无关。

2. 关键修复点

  • 检查config_file路径有效性:确保KUBE_CONFIG变量指向的kubeconfig文件路径在Airflow worker容器内存在且可读。如果Airflow运行在Kubernetes集群内,通常不需要手动指定config_file,客户端会自动读取集群内的默认配置(/var/run/secrets/kubernetes.io/serviceaccount/路径下的文件)。若你指定了外部kubeconfig,确认文件已挂载到worker容器中,且权限正确。
  • 修正ports参数格式:Airflow 1.10.x的KubernetesPodOperator中,ports参数需要传入列表类型,而非单个整数。正确写法应为:
    ports=[{'containerPort': 9090}]
    
    单个整数会导致参数解析错误,虽然这不是当前报错的直接原因,但会引发后续Pod配置问题。
  • 验证服务账号权限:确认SERVICE_ACCOUNT对应的Kubernetes服务账号拥有足够权限(如创建Pod、读取日志等),且已正确关联到Airflow worker或Pod执行角色。
  • 检查集群内环境变量:若Airflow运行在Kubernetes集群内,确保worker容器内存在KUBERNETES_SERVICE_HOST和KUBERNETES_SERVICE_PORT环境变量,这两个变量是集群内配置加载的关键。如果缺失,可能是集群配置或Airflow部署方式的问题。

3. 额外建议

  • Airflow 1.10.10版本较旧,建议升级到同系列稳定版(如1.10.15)以获取更多Kubernetes相关的bug修复。
  • 若使用GKE集群,确认Airflow worker所在节点已正确配置集群访问权限,无需手动指定kubeconfig,利用集群原生的身份认证更可靠。

内容的提问来源于stack exchange,提问作者mj8701

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 05:05:39