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

KubeVirt备份与还原方案【翻译】

KubeVirt备份与还原方案【翻译】

ref:https://github.com/kubevirt/kubevirt/blob/main/docs/backup-restore-integration.md

备份

  1. 为所有必需的k8s资源构建依赖关系图
  2. 冻结应用程序
  3. pvc数据快照
  4. 解冻应用程序
  5. 将所有必需的k8s资源定义拷贝到一个共享的存储位置
  6. (可选)将PVC数据快照导出到一个共享存储位置

步骤3、5、6不在本文档讨论范围之内

恢复

  1. 使用快照数据填充PVC
  2. 清理并应用所有相关的k8s资源定义

步骤1超出本文档讨论范围

现有的Kubevirt备份解决方案

velero 插件

Velero是用来备份/迁移k8s集群的。kubevirt团队积极维护了一个用于velero的插件。这个插件实现了不少本文档所描述的逻辑。

VirtualMachineSnapshot + VirtualMachineExport API

vm快照和vm导出api

vm snapshot api为kubevirt用户提供了一种快捷的方式来在集群中备份vm。它本身不适合异地备份或灾难恢复。但是跟vm export api一起使用,vm的存储卷就可以被用来拷贝数据到远程位置。

建立kubevirt对象图

!backup-graph.png

(主要就是vm-vmi-pod,以及datavolume-pvc)

对象图中的节点格式:APIGroup-Kind-namespace-name

VM 对象图

apiVersion: kubevirt.io/v1
kind: VirtualMachine
metadata:name: vm1namespace: ns1
...
  • (“kubevirt.io”, “VirtualMachine”, “ns1”, “vm1”)

(apigroup 是 kubevirt.io,kind是VM,在ns1命名空间下,名字叫做vm1)

spec

(spec是kubevirt的crd中自定义内容较多的一个部分)

spec.instancetype

...
spec:instancetype:kind: VirtualMachineInstancetypename: small
...
  • (“instancetype.kubevirt.io”, “VirtualMachineInstancetype”, “ns1”, “small”)

spe.preference

...
spec:preference:kind: VirtualMachinePreferencename: windows
...
  • (“instancetype.kubevirt.io”, “VirtualMachinePreference”, “ns1”, “windows”)

spec.template

见vmi的对象图

VMI 对象图

apiVersion: kubevirt.io/v1
kind: VirtualMachineInstance
metadata:name: vmi1namespace: ns1
...
  • (“kubevirt.io”, “VirtualMachineInstance”, “ns1”, “vmi1”)
  • (“”, “Pod”, “ns1”, “virt-launcher-vmi1-XXXXX”) *

*每个VMI有一个关联的唯一命名的pod,备份过程可以通过使用 kubevirt.io/created-by=<vmi uid>来寻找这个pod的名称

spec.volumes[*].persistentVolumeClaim

...
spec:volumes:- name: v1persistentVolumeClaim:claimName: pvc1
...
  • (“”, “PersistentVolumeClaim”, “ns1”, “pvc1”)
  • (“cdi.kubevirt.io”, “DataVolume”, “ns1”, “pvc1”)

spec.volumes[*].dataVolume

...
spec:volumes:- name: v1dataVolume:name: dv1
...
  • (“”, “PersistentVolumeClaim”, “ns1”, “dv1”)
  • (“cdi.kubevirt.io”, “DataVolume”, “ns1”, “dv1”)

spec.volumes[*].configMap

...
spec:volumes:- name: v1configMap:name: cm1
...
  • (“”, “ConfigMap”, “ns1”, “cm1”)****

(剩下的就不一一复制粘贴了)

  • (“”, “Secret”, “ns1”, “s1”)
  • (“”, “ServiceAccount”, “ns1”, “sa1”)
  • (“”, “PersistentVolumeClaim”, “ns1”, “pvc1”)
  • • (“”, “Secret”, “ns1”, “my-pub-key”)
  • • (“”, “Secret”, “ns1”, “my-user-password”)

VMI ReplicaSet

  • (“kubevirt.io”, “VirtualMachineInstanceReplicaSet”, “ns1”, “vmirs1”)
  • (“kubevirt.io”, “VirtualMachineInstance”, “ns1”, “vmirs1XXXX1”) *
  • (“kubevirt.io”, “VirtualMachineInstance”, “ns1”, “vmirs1XXXX2”) *

*一般都有多个VMI关联在一个VMIReplicaSet中,备份过程可以搜寻kubevirt.io/vmReplicaSet= 作为标签选择器。

备份动作

用户文件系统冻结/解冻hook

还原动作

VM还原

如果还原到不同的集群,并且明确设置了mac地址或bios序列号,需要确保不会发生冲突,在这里设置:

/spec/template/spec/domain/devices/interfaces/<index>/macAddress
/spec/template/spec/domain/firmware/serial

VMI还原

如果一个VMI归属于一个VM,则这个VMI不应该被还原。kubevirt controller会根据VM定义重建VMI。否则,VMI定义有可能以VM相同预配置的Mac/bios进行恢复(可能导致重复)。

virt-launcher pod 还原

属于一个VMI,带有”virt-launcher-”前缀的pod不应该被还原。

DataVolume还原

在succeeded阶段的datavolumes需要在还原期间设置以下annotation。否则关联的pvc可能有损坏。除了Succeeded之外任何阶段的datavolumes都不需要注释。

cdi.kubevirt.io/storage.prePopulated: <datavolume name>

PVC还原

归属于DataVolumes的PVC必须在备份/还原时加annotation

cdi.kubevirt.io/storage.populatedFor: <datavolume name>

相关文章:

KubeVirt备份与还原方案【翻译】

KubeVirt备份与还原方案【翻译】 ref:https://github.com/kubevirt/kubevirt/blob/main/docs/backup-restore-integration.md 备份 为所有必需的k8s资源构建依赖关系图冻结应用程序pvc数据快照解冻应用程序将所有必需的k8s资源定义拷贝到一个共享的存储位置&#xff08;可选…...

使用PyQt5设计一款简单的计算器

目录 一、环境配置&#xff1a; 二、代码实现 三、主程序 四、总结 本文使用PyQt5设计一款简单的计算器&#xff0c;可以通过界面交互实现加减乘除的功能&#xff0c;希望能够给初学者一些帮助。主要涉及的知识点有类的定义与初始化、类的成员函数、pyqt5的信号与槽函数等。…...

Htop使用说明

目录 引言 什么是htop htop安装 htop界面介绍 htop功能介绍 引言 我们使用服务器的时候常常需要关注下自己的程序资源占用情况&#xff0c;htop就是一种互动式的进程查查看器&#xff0c;整齐用下来感觉比top的逼格高&#xff0c;造作可视化都更方便些&#xff0c;我觉得还…...

PostgreSQL Linux安装

安装依赖&#xff1a; sudo yum -y install readline-devel zlib-devel 安装Postgres&#xff1a; ssh hadoophadoop001 #下载Postgres wget https://ftp.postgresql.org/pub/source/v14.2/postgresql-14.2.tar.gz tar -zxvf postgresql-14.2.tar.gz -C /data #编译前准备 /dat…...

亚商投资顾问 早餐FM/0509车辆电动化

01/亚商投资顾问 早间导读 1.上交所拟于5月11日举办“发现央企投资价值&#xff0c;促进央企估值回归”交流会 2.监管部门十方面举措加强房地产经纪行业管理 3.广东&#xff1a;推动城市公共服务及货运配送车辆电动化替代 4.昆山两楼盘因大幅降价被暂停网签&#xff1a;降幅…...

AI绘画天花板——Midjourney注册使用保姆级教程(5月5日验证有效)

大家好&#xff0c;我是可夫小子&#xff0c;关注AIGC、读书和自媒体。解锁更多ChatGPT、AI绘画玩法。加我&#xff0c;备注&#xff1a;aigc&#xff0c;拉你进群。 现在市面上AI绘图大概有三大阵营&#xff1a;Midjourney、Stable Diffusion&#xff0c;还有一个就是OpenAI实…...

学习笔记(2)项目结构描述 - manifest.json和pages.json

目录 1&#xff0c;manifest.json2&#xff0c;pages.json2.1&#xff0c;pages2.2&#xff0c;globalStyle2.3&#xff0c;tabBar 1&#xff0c;manifest.json 官方详情 uni-app 的 appid 由 DCloud 云端分配&#xff0c;主要用于 DCloud 相关的云服务&#xff0c;请勿自行修…...

vector、deque、list相关知识点

vector erase返回迭代器指向删除元素后的元素insert返回迭代器指插入的元素reserve只给容器底层开指定大小内存空间&#xff0c;并不添加新元素 deque 底层数据结构 动态开辟的二维数组&#xff0c;一维数组从2开始&#xff0c;以2倍方式扩容&#xff0c;每次扩容和&#x…...

多维时序 | MATLAB实现基于VMD-SSA-LSSVM、SSA-LSSVM、VMD-LSSVM、LSSVM的多变量时间序列预测对比

多维时序 | MATLAB实现基于VMD-SSA-LSSVM、SSA-LSSVM、VMD-LSSVM、LSSVM的多变量时间序列预测对比 目录 多维时序 | MATLAB实现基于VMD-SSA-LSSVM、SSA-LSSVM、VMD-LSSVM、LSSVM的多变量时间序列预测对比预测效果基本介绍程序设计学习总结参考资料 预测效果 基本介绍 多维时序 …...

设计模式——适配器模式(类适配器、对象适配器)

是什么&#xff1f; 我们平时的有线耳机接口分为USB的和Type-C的接口&#xff0c;但是手机的耳机插口却只有一个&#xff0c;像华为的耳机插口现在基本都是Type-c的&#xff0c;那如果我们现在只有USB接口的耳机怎么办呢&#xff0c;这个时候就需要使用到一个转换器&#xff0c…...

iOS开发多target

场景 背景:设想一下有一个场景,一个业务分为多种身份,他们大部分功能是相同的,但是也有自己的差异性。这种情况,想要构建出不同身份的APP。你会怎么做??? 当然,你可以拷贝一份代码出来,给项目重新命名。这样做的好处是,他们互相不会冲突,不用去关心是否有逻辑的冲…...

100种思维模型之每日评估思维模型-58

曾子曰&#xff1a;吾日三省吾省&#xff0c;为人谋而不忠乎&#xff1f;与朋友交不信乎&#xff1f;传不习乎&#xff1f; 曾国藩&#xff0c;坚持每日写复盘日记&#xff0c;最后他用自己的实践经历向我们证明&#xff1a;一个智商很平庸、出身很普通且有着各种毛病的人&…...

libreoffice api

libreOffice API是用于访问libreOffice的编程接口。可以使用libreOffice API创建、打开、修改和打印libreOffice文档。 LibreOffice API支持Basic、Java、C/C、Javascript、Python语言。 这是通过一种称为通用网络对象 (Universal Network Objects, UNO) 的技术实现的&#xff…...

全网最火,Web自动化测试驱动模型详全,一语点通超实用...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 自动化测试模型&a…...

如何写软件测试简历项目经验,靠这个面试都要赶场

一、前言&#xff1a;浅谈面试 面试是我们进入一个公司的门槛&#xff0c;通过了面试才能进入公司&#xff0c;你的面试结果和你的薪资是息息相关的。那如何才能顺利的通过面试&#xff0c;得到公司的认可呢?面试软件测试要注意哪些问题呢?下面和笔者一起来看看吧。这里分享一…...

【Linux】Linux下安装Mysql(图文解说详细版)

文章目录 前言第一步&#xff0c;进到opt文件夹下面&#xff0c;为什么&#xff1f;因为opt文件夹相当于Windows下的D://software第二步&#xff0c;用yum安装第三步&#xff0c;设置mysql的相关配置第四步&#xff0c;设置远程连接。第五步&#xff0c;更改mysql的语言第六步&…...

Cookie和Session的API、登录页面

目录 一、Cookie 和 Session 1、HttpServletRequest 类中的相关方法 2、HttpServletResponse 类中的相关方法 3、HttpSession 类中的相关方法 4、Cookie 类中的相关方法 二、网页登录 1、约定前后端交互接口 2、编写一个简单的登录页面 3、编写一个Servlet 来处理这个…...

C++数据结构:手撕红黑树

目录 一. 红黑树的概念及结构 二. 红黑树节点的定义 三. 红黑树节点的插入 3.1 初步查找插入节点的位置并插入节点 3.2 红黑树结构的调整 3.3 红黑树节点插入完整版代码 四. 红黑树的结构检查 4.1 检查是否为搜索树 4.2 检查节点颜色是否满足要求 附录&#xff1a;红黑…...

Spring IoC 深度学习

Io回顾 IoC 是 Inversion of Control 的简写&#xff0c;译为“控制反转”&#xff0c;它不是一门技术&#xff0c;而是一种设计思想&#xff0c;是一个重要的面向对象编程法则&#xff0c;能够指导我们如何设计出松耦合、更优良的程序。 Spring 通过 IoC 容器来管理所有 Jav…...

C语言从入门到精通第17天(指针和数组联用)

指针和数组联用 不同类型指针变量之间的区别数组的指针指针数组 不同类型指针变量之间的区别 在了解数组和指针联用之前&#xff0c;我们先对指针变量进行补充。我们对比一下int *p1和char *p2的区别&#xff1f; 相同点&#xff1a; 都是指针变量都是用来保存一个内存地址编…...

【网络】每天掌握一个Linux命令 - iftop

在Linux系统中&#xff0c;iftop是网络管理的得力助手&#xff0c;能实时监控网络流量、连接情况等&#xff0c;帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

java_网络服务相关_gateway_nacos_feign区别联系

1. spring-cloud-starter-gateway 作用&#xff1a;作为微服务架构的网关&#xff0c;统一入口&#xff0c;处理所有外部请求。 核心能力&#xff1a; 路由转发&#xff08;基于路径、服务名等&#xff09;过滤器&#xff08;鉴权、限流、日志、Header 处理&#xff09;支持负…...

React Native 导航系统实战(React Navigation)

导航系统实战&#xff08;React Navigation&#xff09; React Navigation 是 React Native 应用中最常用的导航库之一&#xff0c;它提供了多种导航模式&#xff0c;如堆栈导航&#xff08;Stack Navigator&#xff09;、标签导航&#xff08;Tab Navigator&#xff09;和抽屉…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统

医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上&#xff0c;开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识&#xff0c;在 vs 2017 平台上&#xff0c;进行 ASP.NET 应用程序和简易网站的开发&#xff1b;初步熟悉开发一…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)

0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述&#xff0c;后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作&#xff0c;其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

基于服务器使用 apt 安装、配置 Nginx

&#x1f9fe; 一、查看可安装的 Nginx 版本 首先&#xff0c;你可以运行以下命令查看可用版本&#xff1a; apt-cache madison nginx-core输出示例&#xff1a; nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版​分享

平时用 iPhone 的时候&#xff0c;难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵&#xff0c;或者买了二手 iPhone 却被原来的 iCloud 账号锁住&#xff0c;这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

全球首个30米分辨率湿地数据集(2000—2022)

数据简介 今天我们分享的数据是全球30米分辨率湿地数据集&#xff0c;包含8种湿地亚类&#xff0c;该数据以0.5X0.5的瓦片存储&#xff0c;我们整理了所有属于中国的瓦片名称与其对应省份&#xff0c;方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...

【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验

系列回顾&#xff1a; 在上一篇中&#xff0c;我们成功地为应用集成了数据库&#xff0c;并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了&#xff01;但是&#xff0c;如果你仔细审视那些 API&#xff0c;会发现它们还很“粗糙”&#xff1a;有…...

MySQL中【正则表达式】用法

MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现&#xff08;两者等价&#xff09;&#xff0c;用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例&#xff1a; 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...