kubelet在和kube-apiserver通信的时候,会优先尝试使用http2协议,如果http2协议不支持,会回退到http1.1协议。
http2的连接复用模式是多路复用,并行传输;
http1.1的连接复用模式是串行请求,队头阻塞;
可以简单理解为并行发送多个http请求时,在http2模式下,底层的tcp连接只需要一个,而http1.1模式下,需要通过建立多个连接来实现。
httpclient库带有连接池,并设置了连接的空闲时间,kubelet的逻辑中有并行的kube-apiserver请求的模块,在http1.1的模式下,会因为无可用连接而建立新的连接,又因为连接空闲超时而关闭连接,如此往复。kubelet也没有对外暴露配置空闲连接超时时间以及连接池大小的参数;
因为不支持http2,在使用http1.1的模式下,kubelet对apiserver的连接个数不是固定的,会因为默认的30s连接超时,而出现新建、消毁连接,当节点数多了以后,会导致kube-apiserver总会在处理新建连接tls握手,导致cup占用升高。