社区编辑申请
注册/登录
备份和恢复Kubernetes集群中的Etcd数据
云计算 云原生
整个集群组件中只有Apiserver会直接和Etcd通信,其他组件都是直接和Apiserver通信。在生产环境中,最好以集群的方式运行Etcd,官方建议运行五个节点组成集群,这样可以在丢失两个节点的情况下, 保证数据的可用性。

Kubernetes作为目前最炙手可热的容器编排软件,受到越来越多互联网公司的喜爱,之所以会出现这样的现象,主要还是因为这套编排软件不仅功能强大,还非常方便进行二次开发,整个Kubernetes的生态圈非常活跃。有了Kubernetes这套“骨架”,可以在上面运行非常多的中间件和应用程序。Apiserver,Controller Manager,Scheduler,Proxy可以认为是这套“骨架”的组成部分,而Etcd便是这套系统的底座,整个系统的数据都存储在它当中,保证了Etcd的稳定性整个容器编排系统的稳定性就有了保证。

在正式开始之前,说明下实验环境,五台主机组成Kubernetes集群。

  • 控制平面主机:p1.xufu.xyz、p2.xufu.xyz、p3.xufu.xyz
  • 工作主机:p4.xufu.xyz、p5.xufu.xyz
  • 主机系统:CentOS Linux release 7.9.2009 (Core)
  • Etcd版本:3.5.1

Etcd

  • 简介

它是一种键值数据库,Kubernetes将自身的状态数据都存储在Etcd中,这些数据包含deployment,pod,daemonset等各种对象。整个集群组件中只有Apiserver会直接和Etcd通信,其他组件都是直接和Apiserver通信。在生产环境中,最好以集群的方式运行Etcd,官方建议运行五个节点组成集群,这样可以在丢失两个节点的情况下, 保证数据的可用性。

  • 访问

Etcd中存放有不少敏感数据,所以对它的访问需要使用公钥和私钥。为了方便访问,在家目录文件“.bashrc”配置如下命令别名。

alias ectl='etcdctl --endpoints p1.xufu.xyz:2379 \    --cert=/etc/kubernetes/pki/etcd/server.crt --key=/etc/kubernetes/pki/etcd/server.key \    --cacert=/etc/kubernetes/pki/etcd/ca.crt'

显示当前Etcd存储的所有Key。

ectl get / --prefix --keys-only
  • 备份

使用kubeadm部署的集群,Etcd默认将数据存放在宿主机的目录/var/lib/etcd下。

Etcd数据目录

Etcd的版本2和3差别很大,因笔者使用的是3版本,备份命令是这样(在任一控制平面主机操作均可),命令执行不用对Etcd做关闭操作。

ectl snapshot save snapshot-$(date +%F)

查看备份的快照。

快照信息

  • 恢复

恢复操作相比较备份操作有稍许麻烦。下面步骤需要在三台控制平面主机上都操作。

1,关闭kubelet,否则它会自动重启apiserver。

systemctl stop kubelet.service

2,关闭apiserver容器,使用docker命令找到容器,直接stop。

docker stop apiservername

3,重命名目录/var/lib/etcd,创建新的,并修改目录权限。

mv /var/lib/etcd /var/lib/etcd_oldmkdir /var/lib/etcdchmod 700 /var/lib/etcd

4,使用备份的快照,恢复数据。

ectl snapshot restore /data/etcd_backup/etcd-snapshot-2022-08-03.db \  --name p1.xufu.xyz \  --initial-cluster "etcd-0=https://p1.xufu.xyz:2380,etcd-1=https://p2.xufu.xyz:2380,etcd-2=https://p3.xufu.xyz:2380"  \  --initial-advertise-peer-urls https://p1.xufu.xyz:2380 \  --data-dir=/var/lib/etcd

p2和p3节点类似。

5,启动三台etcd,确认下集群是否健康。

[root@p1 etcd]# ectl --endpoints=https://p1.xufu.xyz:2379,https://p2.xufu.xyz:2379,https://p3.xufu.xyz:2379 endpoint healthhttps://p2.xufu.xyz:2379 is healthy: successfully committed proposal: took = 100.193247msp1.xufu.xyz:2379 is healthy: successfully committed proposal: took = 111.234607mshttps://p1.xufu.xyz:2379 is healthy: successfully committed proposal: took = 113.788721mshttps://p3.xufu.xyz:2379 is healthy: successfully committed proposal: took = 118.403445ms

确认没问题后,启动apiserver容器。

至此,整个恢复备份过程操作完毕。

责任编辑:姜华 来源: 今日头条
相关推荐

2022-08-09 09:10:43

Kubernetes容器

2021-04-13 05:38:35

Kubernetes存储数据库

2022-03-25 08:00:00

Kubernetes备份集群

2022-07-11 09:46:43

Kubernetes开源Linux

2022-07-26 08:03:27

2022-01-03 07:49:04

2022-01-12 11:55:43

2021-12-26 18:23:10

2021-12-20 09:35:14

2020-04-26 10:32:58

2021-11-26 11:10:40

2021-06-01 08:00:43

KubernetesCentOS版集群

2020-04-26 21:57:46

2021-05-12 10:59:39

Kubernetes容器集群

2021-07-27 11:31:29

2019-07-29 08:03:20

Kubernetes集群服务架构

2015-07-17 10:25:43

kubernetesDocker集群系统

2021-04-14 15:54:20

2019-03-27 11:37:43

RancherK8S混合云

2014-12-24 09:35:29

同话题下的热门内容

K8s需要替代品!Kubernetes 如何重塑虚拟机什么是 NetDevOps,它如何帮助 IT 实现业务目标?详解云中断的原因和损失以及如何降低云中断的损失全栈云网络技术之VPC/VBC简介十个关于 ArgoCD 的优秀实践一篇聊透 Kubernetes 权限管理云原生对您的业务意味着什么?

编辑推荐

Service Mesh真的是云原生应用的绝配吗云原生桌面:虚拟桌面的解构与重新定义解密云原生---看企业云的未来云原生技术及其未来发展趋势展望如何评估云原生NFV中的容器化VNF部署
我收藏的内容
点赞
收藏

51CTO技术栈公众号