数据无忧,一学就会:掌握CKA认证必备的etcd备份与还原秘籍!

本文涉及的产品
云原生网关 MSE Higress,422元/月
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: 数据无忧,一学就会:掌握CKA认证必备的etcd备份与还原秘籍!

etcd是一致且高可用的键值存储,用作Kubernetes 所有集群数据的后台数据库。是一个非常重要的部件,因此,需要对这个部件进行备份,方便后续出现问题能尽快的恢复。

etcd基本使用方式

下面通过Kubernetes 练习环境Killercoda进行实操。使用github账号登录到Killercoda平台上,该平台目前使用的是最新版本的Kubernetes。

该系统上也安装了etcd cli 客户端,如果没有安装,可以执行下面的命令进行安装:

apt install etcd-client

etcd cli 客户端与etcd采用证书方式进行通信,kubeadm方式部署的Kubernetes可以通过yaml文件查看etcd的证书路径。

--initial-advertise-peer-urls:集群间会通告,此为通告地址,声明节点端口,2380集群中使用,2379客户端使用

或者使用kubectl get pods etcd-controlplane -o yaml -n kube-system方式查看证书的路径信息。如下图:

创建Nginx

通过下面的命令创建具有多个副本的 nginx 部署,这些副本将用于验证 etcd 数据的恢复。

kubectl create deployment nginx —-image=nginx --replicas=3

验证新部署的 Pod 是否处于运行状态

备份Etcd数据

为 etcd 备份创建一个备份目录mkdir etcd-backup运行以下命令进行 etcd 备份。

ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 \
                      --cacert=/etc/kubernetes/pki/etcd/ca.crt \
                      --cert=/etc/kubernetes/pki/etcd/server.crt \
                      --key=/etc/kubernetes/pki/etcd/server.key \
snapshot save ./etcd-backup/etcdbackup.db

执行完如下图

验证备份数据

运行以下命令,以从新备份数据中获取密钥列表和详细信息

ETCDCTL_API=3 etcdctl --write-out=table snapshot status ./etcd-backup/etcdbackup.db

执行完命令后如下图:

将备份恢复到集群

  1. 在这里,我们将删除之前创建的 nginx 部署,然后恢复备份,以便恢复 nginx 部署。
controlplane $ kubectl delete deployments.apps nginx
deployment.apps "nginx" deleted
  1. 将数据从备份恢复,执行如下命令:
controlplane $ export ETCDCTL_API=3
controlplane $  mkdir -p /var/lib/restore
controlplane $  etcdctl snapshot restore etcd-backup/etcdbackup.db --data-dir=/var/lib/restore

--data-dir:是指定把数据还原到那个目录下

执行完上述命令会在指定的目录下生成etcd数据文件,如下图:

  1. 现在我们需要停止所有正在运行的 Kubernetes 组件以更新 etcd 数据。为此,我们在/etc/kubernetes/manifests/文件夹中放置了 kubernetes 组件的清单文件,我们将临时将此文件移出此路径,kubelet 将自动删除这些 pod。
mkdir tmp
mv /etc/kubernetes/manifests/* tmp/

把/etc/kubernetes/manifests/目录下的组件yaml文件,移走容器就开始删除。可以通过crictl ps -a查看

  1. 等待组件容器删除后,我们需要修改etcd.yaml组件的etcd-data中的hostPath路径参数
...省略...
  volumes:
  - hostPath:
      path: /etc/kubernetes/pki/etcd
      type: DirectoryOrCreate
    name: etcd-certs
  - hostPath:
      path: /var/lib/restore
      type: DirectoryOrCreate
    name: etcd-data
status: {}

/var/lib/restore就是数据还原的路径。

  1. 验证k8s集群是否正常
controlplane $ kubectl get cs
Warning: v1 ComponentStatus is deprecated in v1.19+
NAME                 STATUS    MESSAGE   ERROR
controller-manager   Healthy   ok        
scheduler            Healthy   ok        
etcd-0               Healthy   ok        
controlplane $ kubectl get pod
NAME                     READY   STATUS    RESTARTS   AGE
nginx-7854ff8877-6t6dl   1/1     Running   0          46m
nginx-7854ff8877-l6dq8   1/1     Running   0          46m
nginx-7854ff8877-pbkq9   1/1     Running   0          46m

CKA真题讲解

中文解析:

此项目无需更改配置环境,但是,在执行此项目之前,请确保您已返回初始节点。etcd 这道题真实考试为第 4 题,用的集群是真实考试时的上一题的集群,即真题第 3 题 mk8s,所以无需再切换集群了。

Task

       首先,为运行在 https://127.0.0.1:2379 上的现有 etcd 实例创建快照并将快照保存到 /srv/data/etcd-snapshot.db 文件。

       为给定实例创建快照预计能在几秒钟内完成。 如果该操作似乎挂起,则命令可能有问题。用 CTRL + C 来取消操作然后重试。

然后还原位于 /var/lib/backup/etcd-snapshot-previous.db 的现有先前快照。

提供了以下 TLS 证书和密钥,以通过 etcdctl 连接到服务器:

   CA证书: /opt/KUIN00601/ca.crt

   客户端证书: /opt/KUIN00601/etcd-client.crt

   客户端密钥: /opt/KUIN00601/etcd-client.key

https://didiplus.oss-cn-hangzhou.aliyuncs.com/20240227134714.png)

  1. 备份
  • 如果不使用 export ETCDCTL_API=3,而使用ETCDCTL_API=3,则下面每条 etcdctl 命令前都要加ETCDCTL_API=3
  • 如果执行时,提示permission denied,则是权限不够,命令最前面加 sudo 即可。
export ETCDCTL_API=3
  • 先检查考试环境有没有题目说的目录 /srv/data/,没有的话则需要自己创建
mkdir -p /srv/data
  • 备份时etcdctl客户端需要带上证书,,用题目给的三个证书
etcdctl --endpoints=https://127.0.0.1:2379 \
--cacert=/opt/KUIN00601/ca.crt
--cert=/opt/KUIN00601/etcd-client.crt
--key=/opt/KUIN00601/etcd-client.key
save  /srv/data/etcd-snapshot.db

可以使用etcdctl --write-out=table snapshot status /srv/data/etcd-snapshot.db验证备份的数据。

  1. 还原操作
  • 先创建一个还原数据存储的目录
mkdir -p /var/lib/restore
  • 执行还原操作,并指定还原数据存储目录
etcdctl --endpoints=https://127.0.0.1:2379 \
--cacert=/opt/KUIN00601/ca.crt
--cert=/opt/KUIN00601/etcd-client.crt
--key=/opt/KUIN00601/etcd-client.key
snapshot restore   /var/lib/backup/etcd-snapshot-previous.db \
--data-dir=/var/lib/restore
  • 移走/etc/kubernetes/manifests/到临时目录下tmp
mkdir -p /home/tmp
mv /etc/kubernetes/manifests/*.yaml /home/tmp
  • /home/tmp目录下编辑etcd.yaml文件,修改etcd-datahostPath路径为/var/lib/restore
volumes:
  - hostPath:
      path: /etc/kubernetes/pki/etcd
      type: DirectoryOrCreate
    name: etcd-certs
  - hostPath:
      path: /var/lib/restore
      type: DirectoryOrCreate
    name: etcd-data
status: {}
  • 重新把/home/tmp目录下的组件文件移动/etc/kubernetes/manifests/
mv /home/tmp/*.yaml  /etc/kubernetes/manifests/
  • 验证k8s集群是否正常
controlplane $ kubectl get cs
Warning: v1 ComponentStatus is deprecated in v1.19+
NAME                 STATUS    MESSAGE   ERROR
controller-manager   Healthy   ok        
etcd-0               Healthy   ok        
scheduler            Healthy   ok

到此整个etcd备份与还原操作就完成了。

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
6月前
|
Kubernetes 安全 调度
提升CKA认证成功率,CKA真题中的节点维护全攻略!
提升CKA认证成功率,CKA真题中的节点维护全攻略!
78 0
|
6月前
|
Kubernetes 网络协议 网络安全
提升你的云技能:深入了解CKA认证之k8s升级秘籍!
提升你的云技能:深入了解CKA认证之k8s升级秘籍!
107 0
|
6月前
|
存储 弹性计算 Windows
雾锁王国如何实现存档迁移?
如何把本地存档数据迁移到服务器?如何把一个服务器数据迁移到另一个服务器?如何把Steam云存档数据迁移到本地?
2614 0
|
23天前
|
监控 安全 数据库
深入探究:GitLab数据备份与还原的高效策略
【10月更文挑战第19天】 在现代软件开发中,GitLab作为一个强大的代码管理和协作平台,其数据备份与还原是保障项目安全和连续性的关键环节。本文将深入探讨GitLab数据备份与还原的高效策略,确保在数据丢失或损坏的情况下,能够快速恢复GitLab实例。
39 2
|
3月前
|
存储 Kubernetes Cloud Native
告别数据丢失的噩梦!PersistentVolume全攻略,让你轻松玩转Kubernetes数据持久化秘籍!
【8月更文挑战第25天】随着容器技术的发展,Kubernetes已成为云原生应用的主流部署平台。然而,数据持久化成为一个亟待解决的问题。Kubernetes通过PersistentVolume(PV)提供了解决方案。PV是一种存储资源对象,它抽象出底层存储技术(例如Ceph、GlusterFS或NFS),让用户仅需关注存储容量和访问模式等属性。PV由管理员创建与维护,Pod通过PersistentVolumeClaim(PVC)请求存储资源。本文详细介绍了PV的工作原理、配置方法及示例,帮助读者更好地理解和应用此功能。
128 2
|
3月前
|
Kubernetes Nacos 数据安全/隐私保护
疯了!Nacos 用 Helm 部署开启授权认证频频出错?别急,秘籍在此!
【8月更文挑战第15天】本文指导您通过Helm部署Nacos并开启授权认证,解决途中遇到的问题。首先确认已安装Helm并了解Kubernetes基础。示例`values.yaml`文件启用认证并设置凭据。运行Helm命令完成部署。若认证失败,请复查用户名及密码准确性。面对权限不足错误,可配置权限策略,示例代码展示基于请求头的简单验证逻辑。Nacos启动异常时,利用`kubectl logs`命令分析Pod日志定位问题。遵循本文步骤与示例,助您成功部署并配置Nacos。
89 0
|
6月前
|
数据安全/隐私保护
雾锁王国搭建、存档、使用常见问题汇总(持续更新)
使用雾锁王国的常见问题,例如怎么搭建私服、搜索不到服务器怎么办、存档数据怎么迁移.......
3277 1
雾锁王国搭建、存档、使用常见问题汇总(持续更新)
|
6月前
|
Kubernetes 容器 Perl
k8s学习-CKA真题-Etcd数据库备份恢复
k8s学习-CKA真题-Etcd数据库备份恢复
133 0
|
6月前
|
存储 Kubernetes 应用服务中间件
k8s学习-CKA真题-持久化存储
k8s学习-CKA真题-持久化存储
82 0
你居然还去服务器上捞日志,搭个日志收集系统难道不香么
ELK日志收集系统进阶使用,本文主要讲解如何打造一个线上环境真实可用的日志收集系统。有了它,你就可以和去服务器上捞日志说再见了!