request canceled (Client.Timeout exceeded while awaiting headers)

问题描述

某 Kubernetes 集群,负载高 Node 状态总是时而出现 NotReady 状态,集群不稳定,查看节点日志,存在如下错误:

Error updating node status, will retry: error getting node "node01": Get https://x.x.x.x:6443/api/v1/nodes/node01?timeout=10s: net/http: request canceled (Client.Timeout exceeded while awaiting headers)

问题分析

出现该问题的主要原因是:

高负载 node 与 apiserver 之间建立的连接数太多了,导致这些连接的 tls 握手时间越来越长,最终超过客户端超时时间 10 秒,客户端主动断开了连接

解决办法

为 apiserver 配置 --http2-max-streams-per-connection 参数,配置一个较大的值(例如 2000),以让每个连接支持更多的 stream,从而减少新连接的创建,减少连接数

Ref: https://www.lagou.com/lgeduarticle/53137.html

你可能感兴趣的:(疑难杂症)