k8s集群宕机之后,恢复集群

起因:

昨天由于服务器重启导致的;我有多台master服务器,理论上k8s集群应该不会挂,可能同时重启所有master服务器,导致k8s集群无法正常运行。

或者是服务器宕机之后,导致的k8s集群挂掉。

前提条件:

必须在k8s集群好的时候备份数据

ETCDCTL_API=3  etcdctl snapshot save snap.20231206.db --cacert=/etc/ssl/etcd/ssl/ca.pem --cert=/etc/ssl/etcd/ssl/node1.pem --key=/etc/ssl/etcd/ssl/node1-key.pem --endpoints="https://10.0.0.1:2379"

我的etcd采用二进制方式部署:K8s集群中的数据存放在/var/lib/etcd目录下;

补充:etcd证书的存放路径:/etc/ssl/etcd/ssl(可以查找自己的etcd的存放路径)

  1. find / -name 'ca.pem‘               /etc/ssl/etcd/ssl/ca.pem

解决步骤:

关闭etcd、kube-apiserver服务

1. systemctl stop etcd 
2. systemctl stop kube-apiserver

进入k8s集群中存储数据的目录:

1. 可以先把原有数据备份 : mv xxx xxx.back
2. 删除该文件下的内容 :rm -r  xxx

恢复:

- ETCDCTL_API=3  etcdctl snapshot restore /root/snap.20231206.db --data-dir=/var/lib/etcd
- 启动服务:
- •    systemctl start etcd 
- •    systemctl start kube-apiserver

检查:

  1. 检查集群是否启动
    netstat -pnlt | grep 6443  
    # netstat -pnlt:列出所有网络连接,包括监听的端口,显示进程ID和进程名称,以长格式显示。  
    # grep 6443:过滤出包含字符串"6443"的行。
  2. 检查集群状态:

列出所有命名空间下的Pod:

kubectl get pods --all-namespaces

列出所有命名空间下的服务:

kubectl get services --all-namespaces

列出所有节点:

kubectl get nodes

列出所有无状态副本集(ReplicaSets):

kubectl get replicasets

列出所有部署(Deployments):

kubectl get deployments

列出所有持久卷(PersistentVolumes)和持久卷声明(PersistentVolumeClaims):

kubectl get pv,pvc

列出所有自定义资源定义(CustomResourceDefinitions,CRDs):

kubectl get crd

列出所有命名空间(Namespaces):

kubectl get namespaces

列出所有Ingress资源:

kubectl get ingress

列出所有ConfigMaps:

kubectl get configmaps

列出所有Secrets:

kubectl get secrets

参考文章:K8s集群的Etcd数据库的备份与还原_kubernetes_lihongbao80-华为云开发者联盟 (csdn.net)

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐