通过Helm安装Prometheus时出现请求超时超出报错如何解决
W0729 22:11:30.483798 18647 transport.go:260] Unable to cancel request for *exec.roundTripper
E0729 22:11:30.484005 18647 request.go:1027] Unexpected error when reading response body: net/http: request canceled (Client.Timeout or context cancellation while reading body)
Error: unable to build kubernetes objects from release manifest: unexpected error when reading response body. Please retry. Original error: net/http: request canceled (Client.Timeout or context cancellation while reading body)
错误原因
- Helm客户端与Kubernetes APIServer通信超时:Prometheus Chart包含大量CRD、ServiceMonitor等资源,默认的Helm请求超时时间(通常为300秒)不足以完成资源清单的校验和构建,该情况在APIServer负载较高、集群节点性能不足、网络链路延迟高的场景下更容易触发
- 本地kubeconfig配置异常:当前使用的kubeconfig连接权限不足、APIServer地址配置错误或者代理配置异常,会导致连接被提前中断
- Kubernetes APIServer负载过高:集群内同时有大量资源创建、删除操作,APIServer来不及处理Helm发送的清单校验请求,主动断开了连接
- Helm本地缓存损坏:之前拉取的Prometheus Chart缓存存在不完整、损坏的情况,导致构建资源清单时长时间卡死后触发超时
处理方案
- 延长Helm命令的超时时间:执行安装命令时添加
--timeout参数,将超时时间调整为10分钟甚至更长,示例命令:
helm install prometheus prometheus-community/prometheus --namespace monitoring --create-namespace --timeout 10m
- 清理损坏的Helm本地缓存:执行
helm repo update更新仓库缓存,再执行helm pull prometheus-community/prometheus重新拉取最新版的Prometheus Chart到本地,避免使用损坏的缓存文件 - 检查Kubernetes APIServer状态:执行
kubectl top pods -n kube-system查看APIServer Pod的资源占用情况,如果负载过高可以先暂停集群内其他资源变更操作,等待负载回落后再执行安装 - 验证kubeconfig连通性:执行
kubectl get nodes确认当前kubeconfig可以正常连接集群,如果配置了代理可以先临时关闭代理测试,避免网络链路问题导致的超时 - 拆分资源安装:如果是首次安装且CRD资源过多,可以先单独安装Prometheus的CRD资源,再安装核心组件,执行安装命令时添加
--skip-crds参数跳过CRD安装步骤即可
内容的提问来源于stack exchange,提问作者Umair Hassan
相关产品推荐
相关产品推荐

