Kubernetes Master节点 灾备恢复操作指南

简介: 本文档简述了Kubernetes主节点灾备恢复的相关步骤,供在发生k8s master崩溃时操作。 就算是在k8s里部署了etcd群集, 主节点控制组件的高可用节点,灾备恢复也是必须要实现的操作,才能形成完备的企业级服务方案。

花了快很久时间测试,才完成的。

还有优化的可能的。

就是插件pod的认证。


Kubernetes Master节点

灾备恢复操作指南

 

目录

一,Etcd数据备份及恢复... 1

A,单节点etcd数据备份和恢复... 2

B,etcd集群数据的备份和恢复... 2

二,Master节点控制组件的备份及恢复... 3

A,主节点数据备份... 3

B,主节点组件恢复... 4

 

 

本文档简述了Kubernetes主节点灾备恢复的相关步骤,供在发生k8s master崩溃时操作。

就算是在k8s里部署了etcd群集, 主节点控制组件的高可用节点,灾备恢复也是必须要实现的操作,才能形成完备的企业级服务方案。

 

严格来讲,通过kubeadm安装的k8s主节点包括两大类的灾备恢复,etcd数据存储恢复和主节点控制组件恢复(包括但不限于kube-apiserver,kube-controller-manager,kube-scheduler,flannel,coreDns,dashboard)。

所以本文档也会相应的分成两个章节来进行描述。

 

一,Etcd数据备份及恢复

etcd的数据默认会存放在我们的命令工作目录中,我们发现数据所在的目录,会被分为两个文件夹中:

  • snap: 存放快照数据,etcd防止WAL文件过多而设置的快照,存储etcd数据状态。
  • wal: 存放预写式日志,最大的作用是记录了整个数据变化的全部历程。在etcd中,所有数据的修改在提交前,都要先写入到WAL中。

A,单节点etcd数据备份和恢复

这种方式的备份和恢复,用基于文件的备份即可。Kubeadm的默认安装时,将etcd的存储数据落地到了宿主机的/var/lib/etcd/目录,将此目录下的文件定期备份起来,如果以后etcd的数据出现问题,需要恢复时,直接将文件还原到此目录下,就实现了单节点的etcd数据恢复。

(tips:如果etcd容器正在启动,是不能覆盖的,这时只需要将etcd的manifest文件[/etc/kubernetes/manifests/etcd.yaml]里的etcd版本号更改一下,然后,用docker stop命令停止etcd容器,就不会自动重启了。数据还原后,将etcd版本再回到正确的版本,kubelet服务就会自动将etcd容器重启起来)

B,etcd集群数据的备份和恢复

如果在线上跑的是etcd集群,那么这个集群数据的备份恢复就不能基于单个容器的文件,而需要在集群的容器内用etcdctl命令进行备份和还原数据的操作了。操作思路同单点。相关命令如下:

V2版api:

备份数据:

# etcdctl backup --data-dir /home/etcd/ --backup-dir /home/etcd_backup

恢复:

# etcdctl -data-dir=/home/etcd_backup/  -force-new-cluster

 

V3版api:

在使用 API 3 时需要使用环境变量 ETCDCTL_API 明确指定。

在命令行设置:

# export ETCDCTL_API=3

备份数据:

# etcdctl --endpoints localhost:2379 snapshot save snapshot.db

恢复:

# etcdctl snapshot restore snapshot.db --name m3 --data-dir=/home/etcd_data

 

 

二,Master节点控制组件的备份及恢复

一般来说,如果master节点需要备份恢复,那除了误操作和删除,很可能就是整个机器已出现了故障,故而可能需要同时进行etcd数据的恢复。

而在恢复时,有个前提条件,就是在待恢复的机器上,机器名称和ip地址需要与崩溃前的主节点配置完成一样,因为这个配置是写进了etcd数据存储当中的。

A,主节点数据备份

主节点数据的备份包括三个部分:

1,/etc/kubernetes/目录下的所有文件(证书,manifest文件)

2,用户主目录下.kube/config文件(kubectl连接认证)

3,/var/lib/kubelet/目录下所有文件(plugins容器连接认证)

B,主节点组件恢复

    主节点组件的恢复可按以下步骤进行:

        1,按之前的安装脚本进行全新安装(kubeadm reset,iptables –X…)

        2,停止系统服务systemctl stop kubelet.service。

        3,删除相关插件容器(coredns,flannel,dashboard)。

        4,恢复etcd数据(参见第一章节操作)。

        5,将之前备份的三个目录依次还原。

        6,重启系统服务systemctl start kubelet.service。

        7,一杯咖啡,稍等片刻,待所有组件启动成功后进行验证。


2018-03-22


相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
打赏
0
1
0
1
83
分享
相关文章
当node节点kubectl 命令无法连接到 Kubernetes API 服务器
当Node节点上的 `kubectl`无法连接到Kubernetes API服务器时,可以通过以上步骤逐步排查和解决问题。首先确保网络连接正常,验证 `kubeconfig`文件配置正确,检查API服务器和Node节点的状态,最后排除防火墙或网络策略的干扰,并通过重启服务恢复正常连接。通过这些措施,可以有效解决与Kubernetes API服务器通信的常见问题,从而保障集群的正常运行。
58 17
【Azure K8S | AKS】在AKS的节点中抓取目标POD的网络包方法分享
在AKS中遇到复杂网络问题时,可通过以下步骤进入特定POD抓取网络包进行分析:1. 使用`kubectl get pods`确认Pod所在Node;2. 通过`kubectl node-shell`登录Node;3. 使用`crictl ps`找到Pod的Container ID;4. 获取PID并使用`nsenter`进入Pod的网络空间;5. 在`/var/tmp`目录下使用`tcpdump`抓包。完成后按Ctrl+C停止抓包。
66 12
|
6月前
|
k8s中节点无法启动Pod
【10月更文挑战第3天】
230 6
Kubernetes节点资源耗尽状态的处理
Kubernetes节点资源耗尽状态的处理
k8s将节点容器运行时从Docker迁移到Containerd
k8s将节点容器运行时从Docker迁移到Containerd
K8s集群实战:使用kubeadm和kuboard部署Kubernetes集群
总之,使用kubeadm和kuboard部署K8s集群就像回归童年一样,简单又有趣。不要忘记,技术是为人服务的,用K8s集群操控云端资源,我们不过是想在复杂的世界找寻简单。尽管部署过程可能遇到困难,但朝着简化复杂的目标,我们就能找到意义和乐趣。希望你也能利用这些工具,找到你的乐趣,满足你的需求。
104 33
集群部署:使用Rancher部署Kubernetes集群。
以上就是使用 Rancher 部署 Kubernetes 集群的流程。使用 Rancher 和 Kubernetes,开发者可以受益于灵活性和可扩展性,允许他们在多种环境中运行多种应用,同时利用自动化工具使工作负载更加高效。
68 19
打破资源边界、告别资源浪费:ACK One 多集群Spark和AI作业调度
ACK One多集群Spark作业调度,可以帮助您在不影响集群中正在运行的在线业务的前提下,打破资源边界,根据各集群实际剩余资源来进行调度,最大化您多集群中闲置资源的利用率。
OpenAI故障复盘丨如何保障大规模K8s集群稳定性
OpenAI故障复盘丨如何保障大规模K8s集群稳定性

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等