问题描述
某 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