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

部署Airflow DAG时遇Kubernetes ApiException握手500错误求助

流水线部署Airflow DAG失败:WebSocket握手500内部服务器错误

在流水线部署Airflow DAG的过程中,执行到删除目标Pod内DAG目录文件的步骤时失败,抛出WebSocket握手500内部服务器错误,完整报错日志如下:

************************************************************************************************************
*                                                                                                          *
*                                                                                                          *
*                                           正在部署'dags'...                                            *
*                                                                                                          *
*                                                                                                          *
************************************************************************************************************
[2022-12-16 14:09:48,076] {io} 信息 - 当前目录:/artifacts/dags
[2022-12-16 14:09:48,076] {copy_deploy_tool} 信息 - 通过复制文件部署'dags'...
[2022-12-16 14:09:48,083] {deploy_tool} 信息 - 保存values.yaml...
[2022-12-16 14:09:48,162] {copy_deploy_tool} 信息 - 正在删除'development:airflow-5db795dd7c-d586h:/root/airflow/dags'中的文件
[2022-12-16 14:09:48,264] {deploy} 错误 - 项目执行失败:dags
回溯(最近的调用最后):
  文件 "/usr/local/lib/python3.6/dist-packages/kubernetes/stream/ws_client.py", 第296行, 在websocket_call中
    client = WSClient(configuration, get_websocket_url(url), headers, capture_all)
  文件 "/usr/local/lib/python3.6/dist-packages/kubernetes/stream/ws_client.py", 第94行, 在__init__中
    self.sock.connect(url, header=header)
  文件 "/usr/local/lib/python3.6/dist-packages/websocket/_core.py", 第253行, 在connect中
    self.handshake_response = handshake(self.sock, *addrs, **options)
  文件 "/usr/local/lib/python3.6/dist-packages/websocket/_handshake.py", 第57行, 在handshake中
    status, resp = _get_resp_headers(sock)
  文件 "/usr/local/lib/python3.6/dist-packages/websocket/_handshake.py", 第143行, 在_get_resp_headers中
    抛出WebSocketBadStatusException("握手状态 %d %s", status, status_message, resp_headers)
websocket._exceptions.WebSocketBadStatusException: 握手状态 500 内部服务器错误

在处理上述异常期间,发生了另一个异常:

回溯(最近的调用最后):
  文件 "/usr/local/lib/python3.6/dist-packages/commands/deploy/deploy.py", 第65行, 在__try_execute中
    deployment=project[DEPLOYMENT],
  文件 "/usr/local/lib/python3.6/dist-packages/tools/deploy/copy_deploy_tool.py", 第50行, 在run中
    namespace, container, pod_name, command, api_client=api_client
  文件 "/usr/local/lib/python3.6/dist-packages/helpers/kubernetes.py", 第133行, 在run_pod_command中
    stdout=True,
  文件 "/usr/local/lib/python3.6/dist-packages/kubernetes/stream/stream.py", 第35行, 在stream中
    return func(*args, **kwargs)
  文件 "/usr/local/lib/python3.6/dist-packages/kubernetes/client/api/core_v1_api.py", 第841行, 在connect_get_namespaced_pod_exec中
    (data) = self.connect_get_namespaced_pod_exec_with_http_info(name, namespace, **kwargs)  # noqa: E501
  文件 "/usr/local/lib/python3.6/dist-packages/kubernetes/client/api/core_v1_api.py", 第941行, 在connect_get_namespaced_pod_exec_with_http_info中
    collection_formats=collection_formats)
  文件 "/usr/local/lib/python3.6/dist-packages/kubernetes/client/api_client.py", 第345行, 在call_api中
    _preload_content, _request_timeout)
  文件 "/usr/local/lib/python3.6/dist-packages/kubernetes/client/api_client.py", 第176行, 在__call_api中
    _request_timeout=_request_timeout)
  文件 "/usr/local/lib/python3.6/dist-packages/kubernetes/stream/stream.py", 第30行, 在_intercept_request_call中
    return ws_client.websocket_call(config, *args, **kwargs)
  文件 "/usr/local/lib/python3.6/dist-packages/kubernetes/stream/ws_client.py", 第302行, 在websocket_call中
    抛出ApiException(status=0, reason=str(e))
kubernetes.client.rest.ApiException: (0)
原因: 握手状态 500 内部服务器错误

[2022-12-16 14:09:49,631] {shell} 信息 - doi: 部署记录上传成功
[2022-12-16 14:09:49,631] {shell} 信息 - 成功
[2022-12-16 14:09:49,635] {io} 信息 - 当前目录:/artifacts
[2022-12-16 14:09:49,635] {pretty_info} 信息 - 

排查与解决建议

  • 检查Kubernetes API Server状态:登录集群控制节点,查看kube-apiserver日志,确认是否存在内部错误导致WebSocket握手失败,执行命令:kubectl logs -n kube-system kube-apiserver-<节点名称>
  • 验证Pod连通性:手动尝试通过exec命令连接目标Pod,确认是否能正常访问,执行命令:kubectl exec -it -n development airflow-5db795dd7c-d586h -- /bin/bash,若连接失败,检查Pod状态、网络策略或节点网络配置
  • 更换DAG部署方式:避免通过WebSocket exec操作Pod内文件,改用挂载PersistentVolumeClaim(PVC)存储DAG目录,直接将DAG文件同步到PVC中,绕过Pod exec步骤
  • 核对Kubernetes客户端版本:确认部署工具使用的kubernetes-client版本与集群API Server版本是否匹配,版本差异可能引发WebSocket通信异常
  • 重启相关组件:尝试重启Airflow Pod,或在集群状态允许的情况下重启kube-apiserver,排除临时服务异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 09:20:21