k8s学习-CKA真题-Etcd数据库备份恢复

简介: k8s学习-CKA真题-Etcd数据库备份恢复

题目

解析

针对存在的etcd实例https://127.0.0.1:2379,创建一个快照,保存到/srv/data/etcd-snapshot.db。在创建快照的过程中,如果卡住了,就键入ctrl+c终止,然后重试。

然后恢复一个已经存在的快照: /var/lib/backup/etcd-snapshot-previous.db

执行etcdctl命令的证书存放在:

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

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

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

本次实验时就不复制,使用本地的路径了,可以查看配置文件(我的是kubeadm安装的集群):

- --cert-file=/etc/kubernetes/pki/etcd/server.crt
- --key-file=/etc/kubernetes/pki/etcd/server.key
- --trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt

命令

环境搭建

安装etcdctl

敲一下etcdctl,没有的话会提示安装命令,安装后查看一下是否成功

解题

操作前先设置环境变量

export ETCDCTL_API=3

备份

无参数

etcdctl --endpoints="https://127.0.0.1:2379" snapshot save /srv/data/etcd-snapshot.db

有参数

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 /srv/data/etcd-snapshot.db

查看状态

无参数

etcdctl --endpoints="https://127.0.0.1:2379" snapshot status /srv/data/etcd-snapshot.db

有参数

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 status /srv/data/etcd-snapshot.db

还原

还原之前可以删除一个资源,看看一会儿还原后资源是不是恢复了。

创建备份目录

mkdir -p /opt/backup/

移动集群文件,使apiserver等停止

mv /etc/kubernetes/manifests/kube-* /opt/backup

这里我也没有官方的etcd-snapshot-previous.db,就是把前面备份的改了个名字而已

无参数

etcdctl --endpoints="https://127.0.0.1:2379" snapshot restore /var/lib/backup/etcd-snapshot-previous.db --data-dir=/var/lib/etcd-restore

有参数

etcdctl --endpoints="https://127.0.0.1:2379" --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 restore /var/lib/backup/etcd-snapshot-previous.db --data-dir=/var/lib/etcd-restore

修改配置文件

vim /etc/kubernetes/manifests/etcd.yaml
# 将volume配置的path: /var/lib/etcd改成/var/lib/etcd-restore
  volumes:
  - hostPath:
      path: /etc/kubernetes/pki/etcd
      type: DirectoryOrCreate
    name: etcd-certs
  - hostPath:
      path: /var/lib/etcd-restore

还原k8s组件

mv /opt/backup/* /etc/kubernetes/manifests
systemctl restart kubelet

结果

设置环境变量

如果配置文件中已经设置,命令行同时设置会有冲突

去除参数即可

删除一个pod,方便验证是否还原成功

还原结果如下图所示:

修改etcd配置如下图所示

还原后重启成功截图如下图所示:

可以看到还原前删除的foolbar

二进制安装时

博主是使用kubeadm安装的k8s,当使用二进制安装时,配置文件位置有所不同,其他一致。

二进制安装时,etcd不再是容器的方式。

查看etcd的配置,使用命令

systemctl status etcd

可以找到–config-file,例如/etc/etcd/etcd.config.yaml

或者使用ps命令查找

ps aux | grep "config.yaml"

模拟环境

题目

Make a backup of etcd running on cluster3-controlplane1 and save it on the controlplane node at /tmp/etcd-backup.db.

Then create a Pod of your kind in the cluster.

Finally restore the backup, confirm the cluster is still working and that the created Pod is no longer with us.

分析

备份运行在cluster3-controlplane1上的etcd,并将其保存在cluster3-controlplane1节点的 /tmp/ectd-backup.db 、上。

然后在集群中创建一个Pod。

最后恢复备份,确认集群仍在工作,并且创建的Pod已不在。

重点还是找到几个文件的位置。

解题

备份

ETCDCTL_API=3 etcdctl snapshot save /tmp/etcd-backup.db \
--cacert /etc/kubernetes/pki/etcd/ca.crt \
--cert /etc/kubernetes/pki/etcd/server.crt \
--key /etc/kubernetes/pki/etcd/server.key

创建一个pod

kubectl run test --image=nginx
kubectl geet po | grep test

移动组件

还原

etcdctl snapshot restore /tmp/etcd-backup.db \
--data-dir /var/lib/etcd-backup \
--cacert /etc/kubernetes/pki/etcd/ca.crt \
--cert /etc/kubernetes/pki/etcd/server.crt \
--key /etc/kubernetes/pki/etcd/server.key

修改etcd.yaml文件

移动组件配置文件

总结

  1. 查看etcd.yaml中的cert等文件路径,用于etcdctl命令的参数
  2. 备份
  3. 创建一个资源(可选,用于验证)
  4. 移动组件配置文件位置(包含etcd.yaml)
  5. 还原到指定目录
  6. 修改etcd.yaml配置文件,将挂载路径修改为还原时指定的目录
  7. 移动组件配置文件,恢复集群
  8. 查看之前创建的资源(可选,用于验证)

参考

k8s - 为 Kubernetes 运行 etcd 集群

k8s二进制安装

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
12月前
|
存储 Kubernetes 持续交付
k8s学习
【10月更文挑战第1天】
432 4
|
10月前
|
存储 JSON NoSQL
学习 MongoDB:打开强大的数据库技术大门
MongoDB 是一个基于分布式文件存储的文档数据库,由 C++ 编写,旨在为 Web 应用提供可扩展的高性能数据存储解决方案。它与 MySQL 类似,但使用文档结构而非表结构。核心概念包括:数据库(Database)、集合(Collection)、文档(Document)和字段(Field)。MongoDB 使用 BSON 格式存储数据,支持多种数据类型,如字符串、整数、数组等,并通过二进制编码实现高效存储和传输。BSON 文档结构类似 JSON,但更紧凑,适合网络传输。
279 15
|
Kubernetes 应用服务中间件 nginx
k8s学习--YAML资源清单文件托管服务nginx
k8s学习--YAML资源清单文件托管服务nginx
216 2
k8s学习--YAML资源清单文件托管服务nginx
|
12月前
|
存储 Kubernetes Cloud Native
Kubernetes上的数据库
【10月更文挑战第16天】数据库在Kubernetes上的应用日益普及,超过72%的组织已在Kubernetes上运行数据库。这得益于Kubernetes的声明式特性和标准化部署,能够加速开发、降低成本、减少复杂性,并提高系统的弹性和正常运行时间。Kubernetes为数据管理提供了自动化操作、环境一致性、数据可移植性和自助服务功能,特别适合现代云原生应用。然而,引入数据库到Kubernetes时需考虑团队技能、自动化支持及存储配置等问题。
88 1
|
12月前
|
SQL NoSQL 关系型数据库
数据库学习
【10月更文挑战第8天】
130 1
|
12月前
|
关系型数据库 MySQL Java
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
这篇文章是关于如何使用Django框架配置MySQL数据库,创建模型实例,并自动或手动创建数据库表,以及对这些表进行操作的详细教程。
398 0
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
|
12月前
|
存储 Kubernetes 调度
|
12月前
|
Java 关系型数据库 MySQL
springboot学习五:springboot整合Mybatis 连接 mysql数据库
这篇文章是关于如何使用Spring Boot整合MyBatis来连接MySQL数据库,并进行基本的增删改查操作的教程。
2368 0
springboot学习五:springboot整合Mybatis 连接 mysql数据库
|
12月前
|
Java 关系型数据库 MySQL
springboot学习四:springboot链接mysql数据库,使用JdbcTemplate 操作mysql
这篇文章是关于如何使用Spring Boot框架通过JdbcTemplate操作MySQL数据库的教程。
661 0
springboot学习四:springboot链接mysql数据库,使用JdbcTemplate 操作mysql
|
Kubernetes API 调度
k8s学习--pod的所有状态详解(图例展示)
k8s学习--pod的所有状态详解(图例展示)
1312 1

热门文章

最新文章

推荐镜像

更多