部署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
相关产品推荐
相关产品推荐

