现象:
controller/operator类组件容器重启次数多
apiserver经常重启、6443/443端口响应慢
kubectl命令响应慢,偶尔超时
etcd日志出现形如"took too long"的关键字
部分特征截图如下:
原因:
磁盘读写性能不足(系统故障/天生)
etcd历史数据量过大
etcd更新超时,触发etcd选主,进一步触发apiserver短暂不可用,apiserver健康检查超时导致容器重启,最终造成全部依赖apiserver的系统组件,包含其他controller/operator类组件访问apiserver超时,容器重启。
解决方案:
针对磁盘读写性能:排除系统故障,使用fio进行测试,更换读写性能更好的磁盘等。
针对etcd历史数据量过大:执行`etcdctl defrag`数据清理操作。
命令示例如下:
ETCDCTL_API=3 etcdctl --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/peer.crt --key=/etc/kubernetes/pki/etcd/peer.key --endpoint=https://10.200.192.111:2379,https://10.200.192.112:2379,https://10.200.192.113:2379 defrag
针对k8s组件:优化配置,增加系统宽容度,避免频繁选主。
修改kube-controller-manager和kube-scheduler组件参数(每台master都要执行)
命令示例如下:
vi /etc/kubernetes/manifests/kube-controller-manager.yaml
vi /etc/kubernetes/manifests/kube-scheduler.yaml
修改etcd参数(每台master都要执行)
命令示例如下:
vi /etc/kubernetes/manifests/etcd.yaml