触发kube-apiserver流控导致ACK集群中节点状态异常
问题现象
ack集群中一个节点状态为notready,但是排查节点上的核心组件:kubelet、kube-proxy、flannel、etcd等状态均为正常。
排查步骤
1、查日志
分别排查核心组件以及系统日志,在kubelet以及message日志中看到以下可疑信息:
存在大量的 访问apiserver 6443的Throttling request took日志。所以判断可能是触发了kubelet连接kube-apiserver的流控。
2、修改kubelet参数
既然是触发了连接kube-apiserver的流控,那么可以尝试将kubelet对应参数限制调大。
修改方法可以参考文档:https://help.aliyun.com/document_detail/452567.html
通过在线api调用方式,修改参数kubeAPIQPS、kubeAPIBurst,将对应值调高
打开阿里云openapi地址,然后找到接口:ModifyNodePoolNodeConfig,填写集群id,节点池id以及上面两个参数对应的值后发起调用。
调用完成之后,可以通过查询接口,或者直接在主机节点上ps -ef| grep kubelet查看对应参数值是否生效。
最后验证节点状态是否正常上报为ready
建议
后续出现可以立即收集一下以下两个信息
1、Kubernetes集群的诊断信息:
https://help.aliyun.com/document_detail/86761.html
2、kubelet 日志 journalctl -u kubelet >/tmp/kubelet.log