当前位置: 首页 > news >正文

k8s备份恢复(velero)

velero简介

velero官网https://velero.io/
velero-githubhttps://github.com/vmware-tanzu/velero

velero的特性

备份可以按集群资源的子集,按命名空间、资源类型标签选择器进行过滤,从而为备份和恢复的内容提供高度的灵活性
支持复制当前 Kubernetes 集群的资源到其它 Kubernetes 集群
通过聚合 API 服务器公开的资源可以轻松备份和恢复,即使它们存储在单独的 etcd 数据库中

velero的组件

velero由一个客户端和一个服务端组成
客户端:运行在本地的命令行工具,只要配置好kubectl和kubeconfig认证文件就可使用,非常简单
服务端:运行在Kubernetes集群之上,负责执行具体的备份和恢复操作

velero工作流程

在这里插入图片描述
备份数据
本地velero客户端发送备份命令,就会调用API Server创建Backup资源对象
服务端收到通知有新的Backup对象创建并执行验证
服务端开始执行备份过程,向API Server查询需要备份的数据
服务端调用对象存储服务,将备份数据保存到对象对象存储上

恢复数据
本地velero客户端发送恢复指令,就会调用API Server创建Restore资源对象
服务端收到通知有新的Restore对象创建并执行验证
服务端调用对象存储,将指定的备份文件下载下来
服务端开始执行恢复过程,根据备份数据调用API Server重新创建相关资源对象

支持的存储

AWS S3 以及兼容 S3 的存储,比如:
Minio
ceph存储
Google Cloud 存储
Aliyun OSS 存储

与ETCD的区别

与 Etcd 备份相比,直接备份 Etcd 是将集群的全部资源备份起来。而 Velero 就是可以对 Kubernetes 集群内对象级别进行备份。除了对 Kubernetes 集群进行整体备份外,Velero 还可以通过对 Type、Namespace、Label 等对象进行分类备份或者恢复。
备份过程中创建的对象是不会备份的

使用场景

灾备场景: 提供备份恢复k8s集群的能力
迁移场景: 提供拷贝集群资源到其他集群的能力(复制同步开发、测试、生产环境的集群)

备份恢复操作

部署minio

minio在这里是用来保存velero的备份数据,如果你有其它对象存储服务,也可以用它们来替换minio。
minio是一款高性能、分布式的对象存储系统,采用Go语言实现,兼容Amazon S3接口,客户端与存储服务器之间采用http/https通信协议。
minio官网: https://min.io/
minio中文网站: http://www.minio.org.cn/

minio支持单机部署和分布式部署,这里选择容器方式单机部署。

部署命令

docker pull minio/minio:RELEASE.2024-04-06T05-26-02Z-cpuv1
docker run -d --name minio -p 9000:9000 -p 9999:9999 -v /data/minio:/minio --restart=always -e "MINIO_ROOT_USER=admin" -e "MINIO_ROOT_PASSWORD=12345678" minio/minio:RELEASE.2024-04-06T05-26-02Z-cpuv1 server /minio --console-address '0.0.0.0:9999'

访问并创建桶

在这里插入图片描述

部署Velero

服务端:目标Kubernetes集群
客户端: 本地的命令行的工具,需要配合kubernetes认证使用.
项目地址:https://github.com/vmware-tanzu/velero
版本: velero 1.10+ 不再支持标志 --use-restic,需要使用–use-restic 用版本 1.9.x
说明:https://learn.microsoft.com/zh-cn/azure/aks/hybrid/backup-workload-cluster

下载客户端

wget https://github.com/vmware-tanzu/velero/releases/download/v1.13.2/velero-v1.13.2-linux-amd64.tar.gz
tar xf velero-v1.13.2-linux-amd64.tar.gz
cd velero-v1.13.2-linux-amd64/ 
cp velero /usr/local/bin/

测试使用

velero --help

创建访问minio的认证文件

cat << EOF > /root/.velero-auth.txt
[default]
aws_access_key_id = admin
aws_secret_access_key = 12345678
EOF

安装客户端
有证书需要配置,没证书直接操作创建ns
配置velero访问k8s
签发证书,用于velero访问API Server时认证使用

openssl genrsa --out velero-user.key 2048
openssl req -new -key velero-user.key \
-out velero-user.csr \
-subj "/CN=velero-user/O=k8s"openssl x509 -req -days 3650 \
-CA /etc/kubernetes/ssl/ca.pem \
-CAkey /etc/kubernetes/ssl/ca-key.pem -CAcreateserial \
-in velero-user.csr -out velero-user.crt
rm -f velero-user.csr

准备kubeconfig认证文件

kubectl config set-cluster k8s-cluster1 --embed-certs \
--server=https://192.168.122.188:6443 -\
-certificate-authority=/etc/kubernetes/ssl/ca.pem \
--kubeconfig=/data/velero/velero-user.configkubectl config set-credentials velero-user --embed-certs \
--client-certificate=/data/velero/velero-user.crt \
--client-key=/data/velero/velero-user.key \
--kubeconfig=/data/velero/velero-user.configkubectl config set-context velero-user@k8s-cluster1 \
--cluster=k8s-cluster1 --user=velero-user \
--kubeconfig=/data/velero/velero-user.confikubectl config use-context velero-user@k8s-cluster1 --kubeconfig=/data/velero/velero-user.config

为velero-user用户授权

kubectl create clusterrolebinding velero-user@clusteradmin --clusterrole=cluster-admin --user=velero-user

创建ns

kubectl create ns velero

下载aws访问控制插件docker pull velero/velero-plugin-for-aws:v1.9.2
执行安装velero服务端

velero install --kubeconfig  /root/.kube/config --namespace velero --provider aws --plugins velero/velero-plugin-for-aws:latest --use-volume-snapshots=false --use-restic  --bucket new  --secret-file /root/.velero-auth.txt --backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://114.132.60.178:31900velero install --kubeconfig  /root/.kube/config --namespace velero --provider aws --plugins velero/velero-plugin-for-aws:v1.9.2 --use-volume-snapshots=false --bucket new  --secret-file /root/.velero-auth.txt --backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://10.0.12.11:9000

完成安装后,在velero的namespace中出现了两个pod,分别是velero服务端和辅助数据备份的restic。
在这里插入图片描述
在这里插入图片描述
查看velero pod运行状态日志kubectl logs deployment/velero -n velero
stroage location 必须是valid有效的
在这里插入图片描述
nginx备份恢复测试
备份测试
查看nginx命名空间下的nginx
在这里插入图片描述
备份nginx空间,备份名称为nginx-backup

velero backup create nginx-backup --include-namespaces nginx

查看备份状态,状态为Completed表示备份成功
velero backup get --namespace velero
在这里插入图片描述查看备份位置
velero backup-location get

在这里插入图片描述恢复测试
由于上面备份的是整个nginx空间,所以可以连同ns一起删除
通过上面备份文件nginx-backup文件恢复
velero restore create --from-backup nginx-backup --wait
在这里插入图片描述nginx空间下所有资源已经恢复
在这里插入图片描述

跨集群数据迁移

将本集群的数据迁移至其他集群,理论上完成3步骤即可:
1.镜像上传
本例中本集群 和 其他集群使用了相同的初始化步骤,且网络互通,因此无需上传镜像。
2.部署velero
在其他集群上相同的步骤(两个集群连接同一个对象存储服务)
3.使用velero恢复指定的备份源
在恢复时,目标集群只需要执行velero restore 命令,即可完成集群迁移。
在这里插入图片描述
演示
部署完成之后,进行nginx整个空间恢复

velero restore create --from-backup nginx-backup --wait

在这里插入图片描述
另一个集群已经有了nginx空间下的所有资源
在这里插入图片描述

跨集群跨版本测试(k8s1.25-1.23)

备份测试

查看mysql名称空间下的资源(hostPath存储)
在这里插入图片描述
在mysql创建库表
在这里插入图片描述
在这里插入图片描述
备份mysql空间,备份名称为backup

velero backup create backup --include-namespaces mysql

查看备份状态,状态为Completed表示备份成功

velero backup get --namespace velero

在这里插入图片描述
可以在minio上查看备份数据
在这里插入图片描述

恢复测试

由于上面备份的是整个mysql空间,所以直接在其他集群恢复

velero restore create --from-backup backup --wait

在这里插入图片描述
空间下所有资源已经迁移成功
在这里插入图片描述
查看库表(没有)
在这里插入图片描述

问题

我在源mysql创建的库表,没还原出来。
跨集群跨版本测试(k8s1.23-1.19集群网络打通,使用同一个共享存储(pv))
恢复之前先停掉原先的es
创建es,类型为deployment,挂载pvc,创建在es名称空间。
在这里插入图片描述往es里插入几条索引
查看索引:

curl -XGET '192.168.123.240:30920/_cat/indices?v&pretty'

在这里插入图片描述

备份数据

创建整个es名称空间的备份为es-backup

velero backup create es-backup --include-namespaces es

在这里插入图片描述

恢复数据

先停掉原先的es
另一个集群执行命令

velero restore create --from-backup es-backup --wait

在这里插入图片描述
查看es名称空间
在这里插入图片描述
查看pv、pvc
在这里插入图片描述
查看索引:

curl -XGET '192.168.123.91:30920/_cat/indices?v&pretty'

在这里插入图片描述

相关文章:

k8s备份恢复(velero)

velero简介 velero官网&#xff1a; https://velero.io/ velero-github&#xff1a; https://github.com/vmware-tanzu/velero velero的特性 备份可以按集群资源的子集&#xff0c;按命名空间、资源类型标签选择器进行过滤&#xff0c;从而为备份和恢复的内容提供高度的灵活…...

LED户外屏:面对复杂环境的七大挑战

户外LED显示屏作为现代城市广告和信息传播的重要媒介&#xff0c;其应用范围越来越广泛。然而&#xff0c;与室内环境相比&#xff0c;户外环境的复杂多变对LED显示屏提出了更高的要求。本文将探讨户外LED显示屏在设计和应用过程中必须考虑的七个关键问题。 1. 高分辨率 户外LE…...

LabVIEW自动化流动返混实验系统

随着工业自动化的不断发展&#xff0c;连续流动反应器在化工、医药等领域中的应用日益广泛。传统的流动返混实验操作复杂&#xff0c;数据记录和处理不便&#xff0c;基于LabVIEW的全自动流动返混实验系统能自动测定多釜反应器、单釜反应器和管式反应器的停留时间分布&#xff…...

【性能优化】安卓性能优化之CPU优化

【性能优化】安卓性能优化之CPU优化 CPU优化及常用工具原理与文章参考常用ADB常用原理、监控手段原理监控手段多线程并发解决耗时UI相关 常见场景排查CPU占用过高常用系统/开源分析工具AndroidStudio ProfilerSystraceBtracePerfettoTraceView和 Profile ANR相关ANR原理及常见场…...

springboot二手图书交易系统-计算机设计毕业源码88413

目 录 摘要 1 绪论 1.1研究背景 1.2研究意义 1.3论文结构与章节安排 2 二手图书交易系统系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 数据流程 3.3.2 业务流程 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非功能性分析 2.4 系统用例分析 2.5本章小结 3 二手…...

解决ElasticSearch启动成功却无法在浏览器访问问题

目录 前言&#xff1a; 问题复现 &#xff1a; 解决问题&#xff1a; 1、修改sysctl.conf文件 2、在sysctl.conf文件增加这段东西 3、 然后保存退出&#xff0c;输入以下命令使其生效 结语&#xff1a; 前言&#xff1a; 这篇文章是小白我今天突然启动es&#xff0c;发现e…...

稀土有色包芯线良好的导电性

稀土有色包芯线是一种结合了稀土元素和有色金属(如铜、铝、镁等)的特殊线材。以下是对稀土有色包芯线的详细介绍&#xff1a; 一、组成与结构 芯线&#xff1a;由稀土元素和有色金属组成的合金制成。稀土元素(如镧、铈、镁等)的添加量在一定范围内&#xff0c;以确保合金性能的…...

SIP 业务举例之 Call Forwarding Unconditional(无条件呼转)

目录 1. Call Forwarding Unconditional 简介 2. RFC5359 的 Call Forwarding Unconditional 信令流程 PS:Dialog 建立条件 Dialog 会话完全建立 3. Call Forwarding Unconditional 过程总结 博主wx:yuanlai45_csdn 博主qq:2777137742 想要 深入学习 5GC IMS 等通信知识…...

基于stm32的esp8266的WIFI控制风扇实验

实验案例&#xff37;&#xff29;&#xff26;&#xff29;控制风扇 项目需求 电脑通过esp8266模块远程遥控风扇。 项目框图 ​ 风扇模块封装 #include "sys.h" #include "fan.h"void fan_init(void) {GPIO_InitTypeDef gpio_initstruct;//打开时钟…...

java中的ScheduledExecutorService介绍和使用案例

ScheduledExecutorService 是 Java 并发包 java.util.concurrent 中的一个接口&#xff0c;它提供了一种机制&#xff0c;允许我们安排一个任务在给定的延迟后运行&#xff0c;或者定期地执行。 主要特点 单次调度&#xff1a;可以安排任务在一定的延迟后执行一次。周期性调度…...

4天涨粉14万!这个AI小众赛道粉丝涨疯了吧?保姆级教程免费教会你!

测一下你的搞钱灵敏度有多高&#xff0c;看下面两张截图&#xff0c;有没有发现什么异常值&#xff1f; 发现了吧&#xff1f; 第一张是10月17号截的&#xff0c;第二张是21号&#xff0c;4天时间粉丝从2.8万飙到16.6万&#xff0c;涨粉14万&#xff01; 这个号我几天之前就发…...

RK3588 技术分享 | 在Android系统中使用NPU实现Yolov5分类检测

随着人工智能和大数据时代的到来&#xff0c;传统嵌入式处理器中的CPU和GPU逐渐无法满足日益增长的深度学习需求。为了应对这一挑战&#xff0c;在一些高端处理器中&#xff0c;NPU&#xff08;神经网络处理单元&#xff09;也被集成到了处理器里。NPU的出现不仅减轻了CPU和GPU…...

itext 转换word文档转pdf

itext 转换word文档转pdf <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.2</version><scope>compile</scope></dependency> <dependency><groupId>org.a…...

WSL-默认root登录

WSL-默认root登录 使用管理员&#xff0c;打开powershell PS C:\WINDOWS\system32> wsl -l 适用于 Linux 的 Windows 子系统分发版: Ubuntu-22.04 (默认) PS C:\WINDOWS\system32> ubuntu2204.exe config --default-user root PS C:\WINDOWS\system32>修改之后&…...

ASIO网络调试助手之四:浅谈QTcpServer性能

网络上有些质疑Qt Network模块性能的声音,本文将从理论和压测两个方面对比ASIO tcp server和QTcpServer在Windows上的性能,最后给出结论。 一.理论 QTcpServer在Windows上的实现是基于select模型,源码位置:5.12.6\Src\qtbase\src\network\socket\qnativesocketengine_win…...

快手 日常实习一面面经

官网投递&#xff0c;三天约面 线上面试 &#xff08;60mins&#xff09;&#xff1a; 1. 自我介绍 2. 问实习 介绍自己做的业务上一段实习的公司框架和开源的 RPC 框架的区别负责的业务与核心业务的依赖关系场景题 -> 设计高并发下的负载均衡 3. 项目拷打 手写 双检锁…...

Cursor零基础小白教程系列 - 创建你的第一个Cursor 项目

最适合小白零基础的Cursor教程 网站lookai.top相同作者&#xff0c;最新文章会在网站更新&#xff0c;欢迎收藏书签 创建你的第一个Cursor 项目 实操视频 概述 开始使用Cursor进行编程的第一步是创建或导入一个项目。本指南将帮助您了解如何在Cursor中创建新项目、导入现有项…...

通用序列化和反序列化实现思路

本文简单的记录一下采用模板来实现序列化与反序列的思路&#xff0c; 同时采用C20标准的concept和requires来简化模板函数的选择。 首先了解一下自定义类支持序列化的两种方式&#xff1a; 一、序列化自定义类型&#xff08;侵入式&#xff09; struct Test {std::string na…...

书生营第四期L0G2000 Python 基础知识

闯关任务 Leetcode 383(笔记中提交代码与leetcode提交通过截图) class Solution:def canConstruct(self, ransomNote: str, magazine: str) -> bool:note [0]*26maga [0]*26for s in ransomNote:note[ord(s)-ord(a)] 1for s in magazine:maga[ord(s)-ord(a)] 1for i in…...

Day12-数据库服务冗余架构

Day-12-数据库服务高可用集群 1、数据库MGR组复制实践2、数据库高可用MHA应用介绍3、数据库高可用MHA环境准备4、数据库高可用MHA原理机制5、数据库高可用MHA功能配置 1、数据库MGR组复制实践 &#xff08;强一致性主从同步) 2、数据库高可用MHA应用介绍 3、数据库高可用MHA环境…...

工程地质软件市场:发展现状、趋势与策略建议

一、引言 在工程建设领域&#xff0c;准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具&#xff0c;正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...

页面渲染流程与性能优化

页面渲染流程与性能优化详解&#xff08;完整版&#xff09; 一、现代浏览器渲染流程&#xff08;详细说明&#xff09; 1. 构建DOM树 浏览器接收到HTML文档后&#xff0c;会逐步解析并构建DOM&#xff08;Document Object Model&#xff09;树。具体过程如下&#xff1a; (…...

MODBUS TCP转CANopen 技术赋能高效协同作业

在现代工业自动化领域&#xff0c;MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步&#xff0c;这两种通讯协议也正在被逐步融合&#xff0c;形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...

MySQL JOIN 表过多的优化思路

当 MySQL 查询涉及大量表 JOIN 时&#xff0c;性能会显著下降。以下是优化思路和简易实现方法&#xff1a; 一、核心优化思路 减少 JOIN 数量 数据冗余&#xff1a;添加必要的冗余字段&#xff08;如订单表直接存储用户名&#xff09;合并表&#xff1a;将频繁关联的小表合并成…...

Ubuntu Cursor升级成v1.0

0. 当前版本低 使用当前 Cursor v0.50时 GitHub Copilot Chat 打不开&#xff0c;快捷键也不好用&#xff0c;当看到 Cursor 升级后&#xff0c;还是蛮高兴的 1. 下载 Cursor 下载地址&#xff1a;https://www.cursor.com/cn/downloads 点击下载 Linux (x64) &#xff0c;…...

在 Spring Boot 项目里,MYSQL中json类型字段使用

前言&#xff1a; 因为程序特殊需求导致&#xff0c;需要mysql数据库存储json类型数据&#xff0c;因此记录一下使用流程 1.java实体中新增字段 private List<User> users 2.增加mybatis-plus注解 TableField(typeHandler FastjsonTypeHandler.class) private Lis…...

Chrome 浏览器前端与客户端双向通信实战

Chrome 前端&#xff08;即页面 JS / Web UI&#xff09;与客户端&#xff08;C 后端&#xff09;的交互机制&#xff0c;是 Chromium 架构中非常核心的一环。下面我将按常见场景&#xff0c;从通道、流程、技术栈几个角度做一套完整的分析&#xff0c;特别适合你这种在分析和改…...

WEB3全栈开发——面试专业技能点P4数据库

一、mysql2 原生驱动及其连接机制 概念介绍 mysql2 是 Node.js 环境中广泛使用的 MySQL 客户端库&#xff0c;基于 mysql 库改进而来&#xff0c;具有更好的性能、Promise 支持、流式查询、二进制数据处理能力等。 主要特点&#xff1a; 支持 Promise / async-await&#xf…...

结构化文件管理实战:实现目录自动创建与归类

手动操作容易因疲劳或疏忽导致命名错误、路径混乱等问题&#xff0c;进而引发后续程序异常。使用工具进行标准化操作&#xff0c;能有效降低出错概率。 需要快速整理大量文件的技术用户而言&#xff0c;这款工具提供了一种轻便高效的解决方案。程序体积仅有 156KB&#xff0c;…...

CTF show 数学不及格

拿到题目先查一下壳&#xff0c;看一下信息 发现是一个ELF文件&#xff0c;64位的 ​ 用IDA Pro 64 打开这个文件 ​ 然后点击F5进行伪代码转换 可以看到有五个if判断&#xff0c;第一个argc ! 5这个判断并没有起太大作用&#xff0c;主要是下面四个if判断 ​ 根据题目…...