故障现象
Kubernetes 集群执行 kubectl get pods
时返回 etcdserver: request timed out
错误,表明 APIServer 无法与 etcd 集群正常通信。此问题通常由 etcd 集群故障、网络问题或资源瓶颈引发。以下是系统化的排查与解决方案:
一、排查
1.首先开始检查etcd集群是否异常
2.切换etcd服务器
# 以表格形式安全地查询指定 etcd 集群的成员信息
ETCDCTL_API=3 etcdctl --endpoints=https://xx.xx.xx.xx:2379,https://xx.xx.xx.xx:2379,https://xx.xx.xx.xx:2379 --cacert=/etc/kubernetes/ssl/ca.pem --cert=/etc/kubernetes/ssl/etcd.pem --key=/etc/kubernetes/ssl/etcd-key.pem member list --write-out=table
ETCDCTL_API=3
# 指定 API 版本
--endpoints
# 集群访问地址 指定三个 etcd 节点的客户端通信地址(端口 2379),支持高可用连接
--cacert
# TLS 根证书
--cert 与 --key
# 客户端证书与私钥
member list
#查询 etcd 集群的成员列表,包括每个成员的 ID、状态、名称、网络地址等关键信息
--write-out=table
#指定输出格式为表格
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
#以表格形式安全地查询 etcd 集群中所有节点的详细状态信息
ETCDCTL_API=3 etcdctl --endpoints=https://xx.xx.xx.xx:2379,https://xx.xx.xx.xx:2379,https://xx.xx.xx.xx:2379 --cacert=/etc/kubernetes/ssl/ca.pem --cert=/etc/kubernetes/ssl/etcd.pem --key=/etc/kubernetes/ssl/etcd-key.pem endpoint status --cluster --write-out=table
ETCDCTL_API=3
# 指定 API 版本
--endpoints
# 集群访问地址 指定三个 etcd 节点的客户端通信地址(端口 2379),支持高可用连接
--cacert
# TLS 根证书
--cert 与 --key
# 客户端证书与私钥
endpoint status --cluster
# 核心命令功能 查询集群所有节点的状态
--write-out=table
# 输出格式 以表格形式展示结果
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
查询结果为正常
3.检查是否有慢查询
apply request took too long
二、更换ssd
etcd-1操作
1.增加ssd硬盘
# 进行关机操作
[root@k8s-etcd1 ~]# init 0
#然后进行增加ssd硬盘
# 开机查看增加的ssd
[root@k8s-etcd1 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 400G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 390G 0 part
├─klas-root 253:0 0 350G 0 lvm /
└─klas-swap 253:1 0 4G 0 lvm
sdb 8:16 0 30T 0 disk
└─sdb1 8:17 0 30T 0 part
└─vg_data-lv_data 253:2 0 30T 0 lvm /data
sdc 8:32 0 30T 0 disk
sr0 11:0 1 1024M 0 rom
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
2.parted分区
3.使用lvm模式
4.进行更换etcd存储
[root@k8s-etcd1 ~]# systemctl stop etcd
[root@k8s-etcd1 ~]# mkdir /data-bak/
[root@k8s-etcd1 ~]# mv /data/etcd /data-bak/
[root@k8s-etcd1 ~]# mv /data/etcd_wal/ /data-bak/
[root@k8s-etcd1 ~]# umount /data
[root@k8s-etcd1 ~]# mount /dev/vg_etcd_ssd/lv_etcd /data # 挂载
[root@k8s-etcd1 ~]# cp -a /data-bak/etcd /data/
[root@k8s-etcd1 ~]# cp -a /data-bak/etcd_wal/ /data/
[root@k8s-etcd1 ~]# systemctl start etcd.service
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
5.验证
[root@k8s-etcd1 ~]# systemctl status etcd.service
● etcd.service - Etcd Server
Loaded: loaded (/etc/systemd/system/etcd.service; enabled; vendor preset: disabled)
Active: active (running) since Thu 2025-06-26 13:40:15 CST; 2min 41s ago
Docs: https://github.com/coreos
Main PID: 2872 (etcd)
Tasks: 8
Memory: 126.4M
CGroup: /system.slice/etcd.service
└─2872 /opt/kube/bin/etcd --name=etcd-10.10.8.13 --cert-file=/etc/kubernetes/ssl/etcd.pem --key-file=/etc/kubernetes/ssl/etcd-key.pem --peer-cert-file=/etc>
.....
.....
.....
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.