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

news/2024/11/28 11:41:57/

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>

http://www.ppmy.cn/news/62845.html

相关文章

Python——基于YOLOV8的车牌识别(源码+教程)

目录 一、前言 二 、完成效果 三、 项目包 四、运行项目 &#xff08;教程&#xff09; 一、前言 YOLOv8LPRNet车牌定位与识别https://www.bilibili.com/video/BV1vk4y1E7MZ/ 最近做了有一个车牌识别的小需求&#xff0c;今天完成了&#xff0c;在此记录和分享 首先&#x…

计算机二级java经典题目及其解析

解析: 栈的存储空间为S(1:50)&#xff0c;初始状态为top51&#xff0c;表示栈的可用空间从S(1)到S(50)&#xff0c;栈顶指针初始指向S(51)的位置&#xff0c;表示当前栈为空。 经过一系列正常的入栈与退栈操作后&#xff0c;top50&#xff0c;表示栈顶指针已经向下移动了一个位…

单词词义、词性、例句查询python代码

单词发音、词义、词性、例句查询、输出结果更简洁&#xff0c;一次可查多个单词 运行该代码&#xff0c;命令窗口输入单词&#xff0c;单词用“/”分开&#xff0c;例如&#xff1a;noisy/problem/community/neighbor 可以更多。先安装两个python包requests、 beautifulsoup4&…

解开 AWS Lambda 调用的奥秘:异步与同步

AWS Lambda是一种非常有用的云计算平台&#xff0c;允许企业在不管理基础设施的情况下运行代码。但是&#xff0c;Lambda函数的调用类型可能会让新手感到困惑。通过了解异步和同步调用之间的主要区别&#xff0c;您将能够设置Lambda函数以实现最高效率。下面深入探讨了AWS Lamb…

MySQL基础(九)子查询

子查询指一个查询语句嵌套在另一个查询语句内部的查询&#xff0c;这个特性从MySQL 4.1开始引入。 SQL 中子查询的使用大大增强了 SELECT 查询的能力&#xff0c;因为很多时候查询需要从结果集中获取数据&#xff0c;或者需要从同一个表中先计算得出一个数据结果&#xff0c;然…

xray简单使用指南

前言收到需求如下 用户还需要一个报告 询问了群里的小伙伴推荐使用xray进行扫描 xray漏洞扫描G了&#xff0c;领导不满意的是还需要人写测试报告&#xff0c;因此采用awvs可以直接生成PDF发给甲方看。 awvs漏洞扫描文章如下所示 https://blog.csdn.net/weixin_44259638/articl…

Java基础(十八)网络编程

1. 网络编程概述 Java是 Internet 上的语言&#xff0c;它从语言级上提供了对网络应用程序的支持&#xff0c;程序员能够很容易开发常见的网络应用程序。 Java提供的网络类库&#xff0c;可以实现无痛的网络连接&#xff0c;联网的底层细节被隐藏在 Java 的本机安装系统里&am…

win10常用操作集合 - vhd/wsl/等等

文章目录 wsl常用操作 - cli操作​vhd常用操作 - UI操作扩容缩容碎片整理常见问题1 win10 UI 基本配置win10网络配置防火墙配置 wsl常用操作 - cli操作 前提: BIOS要使能虚拟化相关的vt-d和IOMMU。安装&#xff1a;wsl --install。该命令会自动启用windows功能的wsl子系统和虚…