k8s备份恢复(velero)
velero简介
velero官网: https://velero.io/
velero-github: https://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官网: https://velero.io/ velero-github: https://github.com/vmware-tanzu/velero velero的特性 备份可以按集群资源的子集,按命名空间、资源类型标签选择器进行过滤,从而为备份和恢复的内容提供高度的灵活…...

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

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

【性能优化】安卓性能优化之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启动成功却无法在浏览器访问问题
目录 前言: 问题复现 : 解决问题: 1、修改sysctl.conf文件 2、在sysctl.conf文件增加这段东西 3、 然后保存退出,输入以下命令使其生效 结语: 前言: 这篇文章是小白我今天突然启动es,发现e…...

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

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控制风扇实验
实验案例WIFI控制风扇 项目需求 电脑通过esp8266模块远程遥控风扇。 项目框图 风扇模块封装 #include "sys.h" #include "fan.h"void fan_init(void) {GPIO_InitTypeDef gpio_initstruct;//打开时钟…...
java中的ScheduledExecutorService介绍和使用案例
ScheduledExecutorService 是 Java 并发包 java.util.concurrent 中的一个接口,它提供了一种机制,允许我们安排一个任务在给定的延迟后运行,或者定期地执行。 主要特点 单次调度:可以安排任务在一定的延迟后执行一次。周期性调度…...

4天涨粉14万!这个AI小众赛道粉丝涨疯了吧?保姆级教程免费教会你!
测一下你的搞钱灵敏度有多高,看下面两张截图,有没有发现什么异常值? 发现了吧? 第一张是10月17号截的,第二张是21号,4天时间粉丝从2.8万飙到16.6万,涨粉14万! 这个号我几天之前就发…...

RK3588 技术分享 | 在Android系统中使用NPU实现Yolov5分类检测
随着人工智能和大数据时代的到来,传统嵌入式处理器中的CPU和GPU逐渐无法满足日益增长的深度学习需求。为了应对这一挑战,在一些高端处理器中,NPU(神经网络处理单元)也被集成到了处理器里。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登录 使用管理员,打开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…...
快手 日常实习一面面经
官网投递,三天约面 线上面试 (60mins): 1. 自我介绍 2. 问实习 介绍自己做的业务上一段实习的公司框架和开源的 RPC 框架的区别负责的业务与核心业务的依赖关系场景题 -> 设计高并发下的负载均衡 3. 项目拷打 手写 双检锁…...

Cursor零基础小白教程系列 - 创建你的第一个Cursor 项目
最适合小白零基础的Cursor教程 网站lookai.top相同作者,最新文章会在网站更新,欢迎收藏书签 创建你的第一个Cursor 项目 实操视频 概述 开始使用Cursor进行编程的第一步是创建或导入一个项目。本指南将帮助您了解如何在Cursor中创建新项目、导入现有项…...
通用序列化和反序列化实现思路
本文简单的记录一下采用模板来实现序列化与反序列的思路, 同时采用C20标准的concept和requires来简化模板函数的选择。 首先了解一下自定义类支持序列化的两种方式: 一、序列化自定义类型(侵入式) 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组复制实践 (强一致性主从同步) 2、数据库高可用MHA应用介绍 3、数据库高可用MHA环境…...
React 第五十五节 Router 中 useAsyncError的使用详解
前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...
ES6从入门到精通:前言
ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var…...

css实现圆环展示百分比,根据值动态展示所占比例
代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...

黑马Mybatis
Mybatis 表现层:页面展示 业务层:逻辑处理 持久层:持久数据化保存 在这里插入图片描述 Mybatis快速入门 
JavaScript 中的 ES|QL:利用 Apache Arrow 工具
作者:来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗?了解下一期 Elasticsearch Engineer 培训的时间吧! Elasticsearch 拥有众多新功能,助你为自己…...
Admin.Net中的消息通信SignalR解释
定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...
ssc377d修改flash分区大小
1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...
linux 错误码总结
1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...
根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:
根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...