如何在kubeadm部署的Kubernetes中启停API Server实例(etcd恢复场景)
如何执行Kubernetes etcd集群恢复操作
针对你提到的etcd集群恢复步骤,结合API Server Pod会自动重启的特性,具体操作如下:
1. 临时停止所有API Server实例
API Server通常以静态Pod形式由kubelet管理,直接删除Pod会被自动重建,因此需要通过修改静态Pod配置来停止:
- 登录每个控制平面节点,找到API Server静态Pod配置目录(默认路径为
/etc/kubernetes/manifests/) - 将
kube-apiserver.yaml临时移至其他目录,例如:mv /etc/kubernetes/manifests/kube-apiserver.yaml /tmp/ - 执行以下命令确认所有API Server Pod已终止:
kubectl get pods -n kube-system | grep kube-apiserver
2. 恢复所有etcd实例状态
- 先停止所有运行中的etcd实例:
- 若etcd为静态Pod管理,同样将
/etc/kubernetes/manifests/etcd.yaml移至临时目录;若为systemd管理,执行systemctl stop etcd
- 若etcd为静态Pod管理,同样将
- 清理etcd原有数据目录(默认路径为
/var/lib/etcd/):rm -rf /var/lib/etcd/* - 使用
etcdctl基于备份文件恢复数据,假设备份文件名为etcd-backup.db,每个etcd节点需执行对应命令(注意替换节点名称、IP等参数):ETCDCTL_API=3 etcdctl snapshot restore etcd-backup.db \ --name=etcd-0 \ --initial-cluster=etcd-0=https://192.168.1.10:2380,etcd-1=https://192.168.1.11:2380,etcd-2=https://192.168.1.12:2380 \ --initial-cluster-token=etcd-cluster-1 \ --initial-advertise-peer-urls=https://192.168.1.10:2380- 每个节点需修改
--name为自身节点名,--initial-advertise-peer-urls为自身节点的peer地址
- 每个节点需修改
- 恢复etcd的运行配置:将移走的
etcd.yaml移回原目录,或执行systemctl start etcd - 验证etcd集群健康状态:
ETCDCTL_API=3 etcdctl endpoint health --endpoints=https://192.168.1.10:2379,https://192.168.1.11:2379,https://192.168.1.12:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/server.crt --key=/etc/kubernetes/pki/etcd/server.key
3. 重启所有API Server实例
- 将之前移至临时目录的
kube-apiserver.yaml移回原配置目录:mv /tmp/kube-apiserver.yaml /etc/kubernetes/manifests/ - 等待kubelet自动重建API Server Pod,执行以下命令确认所有Pod处于Running状态:
kubectl get pods -n kube-system | grep kube-apiserver - 最后验证集群整体状态,例如执行
kubectl get nodes、kubectl get pods -A确认集群正常运行
内容的提问来源于stack exchange,提问作者michael.kebe
相关产品推荐
相关产品推荐

