小阿轩yx-部署 KVM 虚拟化平台

news2024/11/16 11:21:13

小阿轩yx-部署 KVM 虚拟化平台

案例前置知识点

KVM

  • 自 Linux 2.6.20 版本之后就直接整合到 Linux 内核
  • 依托 CPU 虚拟化指令(如Intel-VT、AMD-V)实现高性能的虚拟化支持
  • 与 Linux 内核高度整合,在性能、安全性、兼容性、稳定性上都有很好的表现

KVM 虚拟化架构图

  • 环境中运行的每个虚拟化操作系统都表现为单个独立的系统进程
  • 可以很方便的与 Linux 系统中的安全模块进行整合(SELiinux)
  • 可以灵活的实现资源管理及分配

KVM 原理简介

广义 KVM 实际包含两部分

  • 基于 Linux 内核支持的 KVM 内核模块
  • 经过简化和修改的 Qemu

KVM 内核模块

  • 模拟处理器和内存以支持虚拟机的运行
  • 两者相互结合、相辅相成,构成了一个完整虚拟化平台

Qemu

  • 本身不是 KVM 的一部分
  • 主要处理 I/O 以及为用户提供一个用户空间工具进行虚拟机的管理
  • 是一套完整的虚拟化解决方案
  • 是纯软件实现虚拟化
  • 包括处理器虚拟化、内存虚拟化以及各种虚拟设备的模拟

缺点

  • 模拟出来的,性能比较低

KVM 运行时的三种模式

  • 让 Linux 主机成为一个虚拟机监视器(VMM)
  • 且在原有 Linux 内核模式和用户模式的两种执行模式基础上增加了客户模式

客户模式

  • 可以理解成客户机在操作系统运行中的模式
  • 又分为内核模式和用户模式

内核模式

  • 模拟 CPU 以及内存实现客户模式切换,处理从客户模式的退出

用户模式

  • 为以后提供虚拟机管理的用户空间工具以及代表用户执行 I/O,Qemu 运行在这个模式之下

三种模式层次关系图

KVM 工作原理

  • 用户模式的 Qemu 利用接口 libkvm 通过 ioctl 系统调用进入内核模式。
  • KVM Driver 为虚拟机创建虚拟 CPU 和虚拟内存,然后执行 VMLAUNCH 指令进入客户模式,装载 GuestOS 并运行。
  • Guest OS 运行过程中如果发生中断或者影子缺页等异常,将暂停 Guest OS的运行并保存当前上下文退出到内核模式来处理这些异常。
  • 内核模式处理这些异常时如果不需要 I/0 则处理完成后重新进入客户模式。
  • 如果需要 1/0 则进入到用户模式,由 Qemu 来处理 I/O,处理完成后进入内核模式,再进入客户模式

案例实验环境

  • 采用 CentOS7.9 操作系统,并开启虚拟化支持

主机

.  操作系统

IP地址

主要软件

kvm201

CentOS 7.9 x86_64

192.168.10.211

KVM 虚拟机

kvm202

CentOS 7.9 x86_64

192.168.10.212

案例需求

  • 安装 KVM
  • 完成基本的 KVM 操作管理(创建、启动、停止等)
  • 完成 KVM 命令行操作虚拟机

案例实现思路

  • 准备 KVM 装环境
  • 安装 KVM
  • 配置 KVM 桥接网络
  • 创建 KVM 存储池并安装虚拟机
  • 命令行操作虚拟机
搭建 KVM 虚拟化平台
准备 kvm 虚拟化环境

YUM 安装 KVM

[root@localhost ~]# yum -y install qemu-kvm
[root@localhost ~]# yum -y install qemu-kvm-tools
[root@localhost ~]# yum -y install virt-install
[root@localhost ~]# yum -y install bridge-utils
[root@localhost ~]# yum -y install libvirt virt-manager libguestfs-tools
  • qemu-kvm:kvm 核心包-虚拟操作系统模拟器加速模块

  • qemu-kvm-tools:qemu-kvm 的工具包

  • virt-install:虚拟机安装工具

  • qemu-img :是QEMU的磁盘管理工具

  • bridge-utils:虚拟机与外界通信的命令管理工具

  • libvirt:必须要装的核心工具

  • virt-manager:虚拟机图形管理工具(宿主机有桌面环境时可以考虑安装,命令操作或者远程控制则不需要)

  • QEMU是“Quick Emulator”的缩写,是一个用C语言编写的开源虚拟化软件。

  • QEMU(Quick Emulator)快速仿真器

  • libguestfs-tools:用于访问虚拟机的磁盘映像文件提供的一组命令

永久关闭防火墙、内核机制

[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld
[root@localhost ~]# setenforce 0
[root@localhost ~]# vim /etc/sysconfig/selinux
//修改前
SELINUX=enforcing
//修改后
SELINUX=disabled

修改主机名

[root@localhost ~]# hostnamectl set-hostname kvm01
[root@localhost ~]# bash

修改 hosts 文件

[root@kvm01 ~]# vim /etc/hosts
//添加地址
192.168.10.201 kvm01
192.168.10.202 kvm02

关闭虚拟机

[root@kvm01 ~]# poweroff

增加处理器数量,设置 CPU 支持虚拟化,然后开机

开机后验证

[root@kvm01 ~]# cat /proc/cpuinfo | grep vmx

查看内核模块

[root@kvm01 ~]# lsmod | grep kvm
kvm_intel    188740    0
kvm          637289    1    kvm_intel
irqbypass    13503     1    kvm

设置 KVM 网络

[root@kvm01 ~]# cd /etc/sysconfig/network-scripts/

拷贝配置文件

[root@kvm01 network-scripts]# cp ifcfg-ens33 ifcfg-br0

修改物理网卡为桥接模式

[root@kvm01 network-scripts]# vim ifcfg-ens33
//添加配置
BRIDGE=br0

修改 br0 网卡

[root@kvm01 network-scripts]# vim /ifcfg-br0
//修改配置
TYPE=Bridge
NAME=br0
DEVICE=br0

重启网络并退出

[root@kvm01 network-scripts]# systemctl restart network
[root@kvm01 network-scripts]# cd

到这里做一个 KVM 快照

KVM 管理工具

[root@kvm01 ~]# virt-manager

这一步修改页面字体大小

创建存储池

双击

自定义名称

为存储池指定路径

为存储池添加卷

打开 XShell 连接上服务器用 ftp 上传镜像

鼠标右键,然后点击新建 

选本地安装

选完之后前进 

直接前进

开始安装 ,切换到 Install 选项

最小安装、自动分区 

设置 ROOT 密码

登录,然后查看地址,ping 一下外网 

新开一个服务器测试

列出所有虚拟机运行状态

[root@kvm01 ~]# virsh list --all
Id    名称        状态
-----------------------
2    test01    running

虚拟机关机与开机

[root@kvm01 ~]# virsh shutdown test01
域    test01    被关闭
[root@kvm01 ~]# virsh start test01
域    test01    已开始

强制系统关闭电源

[root@kvm01 ~]# virsh destroy test01
域    test01    被删除

切换到 qemu 目录下

[root@kvm01 qemu]# cd qemu

 通过配置文件启动虚拟机

[root@kvm01 qemu]# virsh create test01.xml
域 test01被创建 (从 test01.xml)

挂起虚拟机

[root@kvm01 qemu]# virsh suspend test01
域    test01 被挂起

恢复虚拟机

[root@kvm01 qemu]# virsh resume test01
域    test01 被重新恢复

配置虚拟机实例伴随宿主机自动启动

[root@kvm01 qemu]# virsh autostart test01
域    test01标记为自动开始

导出虚拟机配置

[root@kvm01 qemu]# virsh dumpxml test01>test02.xml

虚拟机的删除与添加

[root@kvm01 qemu]# virsh shutdown test01
域     test01 被关闭
[root@kvm01 qemu]# virsh undefine test01
域    test01 已经被取消定义

通过备份的配置文件重新定义虚拟机

[root@kvm01 ~]# cd /qemu 
[root@kvm01 qemu]# mv test02.xml test01.xml

重新定义虚拟机

[root@kvm01 qemu]# virsh define test01.xml
定义域    test01 (从 test01.xml)

启动

[root@kvm01 qemu]# virsh start test01
域    test01 已开始
KVM 文件管理

查看当前磁盘格式

[root@kvm01 qemu]# qemu-img info /data_kvm/store/test01.qcow2
image: /data_kvm/store/test01.qcow2
file format: qcow2
virtual size:20G(21474836480 bytes)
disk size: 1.6G
cluster size:65536
Format specific information:
    compat: 1.1
    lazy refcounts: true
  • 如果虚拟机磁盘不是 qcow2 格式,可以通过 qemu-img 命令转换磁盘文件格式

特殊属性

[root@kvm01 qemu]# virsh shutdown test01
域    test01 被关闭

关机状态下管理磁盘文件

[root@kvm01 qemu]# virt-cat -a /data_kvm/store/test01.qcow2 /etc/hosts
127.0.0.1    localhost    localhost.localdomain    localhost4    localhost4.localdomain4    ::1          localhost    localhost.localdomain    localhost6    localhost6.localdomain6

编辑配置文件

[root@kvm01 qemu]# virt-edit -a /data_kvm/store/test01.qcow2 /etc/hosts
//添加配置
192.168.10.201 kvm01

查看磁盘信息

[root@kvm01 qemu]# virt-df test01
文件系统                    1K-blocks    已用空间    可用空间    使用百分比%
test01:/dev/sda1           1038336       107452     930884          11%
test01:/dev/centos/root    17811456      1254740    16556716        8%
虚拟机克隆

从 test01 克隆 test02

[root@kvm01 qemu]# virt-clone -o test01 -n test02 -f /data_kvm/store/test02.qcow2
正在分配    'test02.qcow2'    |    20GB    00:03
成功克隆    'test02'。

查看虚拟机状态

[root@kvm01 qemu]# virsh list --all
Id        名称        状态
---------------------------
-        testo1       关闭
-        test02       关闭

启动虚拟机

[root@kvm01 qemu]# virsh start test02
域    test02 已开始

查看状态

[root@kvm01 qemu]# virsh list --all
Id        名称            状态
---------------------------------
9        test02           running
-        testo1           关闭

这里再拍个快照

虚拟机快照

[root@kvm01 qemu]# virsh snapshot-create test01
已生成域快照    1722309693
[root@kvm01 qemu]# virsh snapshot-create test01
已生成域快照    1722309704

查看当前虚拟机快照版本信息

[root@kvm01 qemu]# virsh snapshot-current test01

列出有几个快照

[root@kvm01 qemu]# virsh snapshot-list test01
名称            生成时间            状态
---------------------------------------------
1722309693     2024-07-30 11:21:33 +0800 shutoff
1722309704     2024-07-30 11:21:44 +0800 shutoff

恢复快照

[root@kvm01 qemu]# virsh snapshot-revert test01 1722309704

查看当前快照版本信息

[root@kvm01 qemu]# virsh snapshot-current test01

删除快照

[root@kvm01 qemu]# virsh snapshot-delete test01 1722309704
已删除域快照    1722309704

查看状态

[root@kvm01 qemu]# virsh snapshot-list test01
名称            生成时间                    状态
-------------------------------------------------
1722309693      2024-07-30 11:21:33 +0800 shutoff

小阿轩yx-部署 KVM 虚拟化平台

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1960905.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

11day-C++list容器使用

这里写目录标题 1. list的介绍及使用1.1 list的介绍1.2.1 list的构造1.2.2 list iterator的使用1.2.3 list capacity1.2.4 list element access1.2.5 list modifiers1.2.6 list的迭代器失效 2. list的模拟实现2.1 list的反向迭代器 1. list的介绍及使用 1.1 list的介绍 list的…

Teamcenter用本地胖客户端启动时,可以看到插件的菜单项,但是用Eclipse启动时看不到

用本地胖客户端启动时,可以看到定制包的插件菜单项,但是用Eclipse启动时,看不到? 原因: 是因为Eclipse启动下,是采用 JAVA1.8 来运行的。但是本机的胖客户端是采用JAVA 11来运行的 解决办法:…

二,SSM 搭建环境:持久化层

二,SSM 搭建环境:持久化层 文章目录 二,SSM 搭建环境:持久化层物理建模:创建对应的 数据库和数据表Mybatis 逆向工程 的配置设置执行逆向生成资源归位(逆行生成的内容,移动到对应模块的包当中去)移动&#…

Hive-内部表和外部表

区别 内部表实例 准备数据 查看数据 删除数据 外部表实例 准备数据 查看数据 删除数据 区别 内部表:管理元数据(记录数据的文件和目录的信息)和数据。当删除内部表时,会删除数据和表的元数据,所以当多个表关…

Creo protoolkit 二次开发(三) 遍历模型的特征

一、特征概念 Creo是基于特征的参数化建模,在模型树上的每个项目都是特征。 模型主要由各类特征构成。以零件模型为例,其基本特征包括基准特征、拉伸特征、孔特征、倒圆角特征、旋转特征、曲面特征、切口特征、阵列特征和扫描特征等。这些特征的叠加形成…

angular入门基础教程(七)系统路由

路由的实现 当我们系统越来复杂,功能越来越多,路由也就是必须的了。在 ng 中如何实现路由呢? 启用路由 在 app 目录下,新建一个 router 目录,把 app.routers.ts 文件拷贝过来,并修改一下。 import { Ro…

【数据结构】链式二叉树的实现和思路分析及二叉树OJ

【数据结构】链式二叉树的实现和思路分析及二叉树OJ 🔥个人主页:大白的编程日记 🔥专栏:数据结构 文章目录 【数据结构】链式二叉树的实现和思路分析及二叉树OJ前言一.链式二叉树的定义及结构二.链式二叉树的遍历2.1前序遍历2.2中…

《LeetCode热题100》---<双指针篇四道②>

本篇博客讲解LeetCode热题100道双指针篇中的 第三道:三数之和(中等) 第四道:接雨水(困难) 第三道:三数之和(中等) 法一:暴力枚举(三重循环&#x…

Java学习Day18:基础篇8

多态 基本信息: 应用场景: 可以把子类对象赋值给父类对象,实现多态从而使用同一种方法; 多态中调用成员的特点 1.调用成员变量都看左边 调用成员变量:编译看左边,运行也看左边 编译看左边: javac编译代码的时候&a…

【BSV生态亮点】体育进入区块链时代:波兰奥委会与Zetly建立战略伙伴关系

​​发表时间:2024年7月18日 波兰奥运委员会和Zetly宣布正式建立战略伙伴关系。这一合作是波兰将现代技术、数字资产和创新解决方案整合到波兰体育中的重要一步,将把波兰体育产业带入数字时代。 Zetly是一个非常活跃的数字平台,它将体育与区…

3.6.锚框

锚框 ​ 13.4. 锚框 — 动手学深度学习 2.0.0 documentation (d2l.ai) ​ 一类目标检测算法是基于锚框的,步骤如下: ​ 使用多个被称为锚框的区域(边缘框),预测每个锚框里是否含有关注的物体,如果有,则预测从这个锚…

双指针-【3,4,5,6,7,8】

第三题:快乐数 . - 力扣(LeetCode). - 备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/happy-number/算法思想: 1.每个…

jdk版本管理利器-sdkman

1.什么是sdkman? sdkman是一个轻量级、支持多平台的开源开发工具管理器,可以通过它安装任意主流发行版本(例如OpenJDK、Kona、GraalVM等等)的任意版本的JDK。通过下面的命令可以轻易安装sdkman: 2.安装 curl -s "https://…

IFM易福门LR3000LR3300液位传感器操作说明

IFM易福门LR3000LR3300液位传感器操作说明

使用ssh-remote连接远程vscode运行yolo项目时的一点坑

使用ssh-remote连接远程vscode运行yolo项目时的一点坑 1.坑1 因为我是直接下载的release包,然后运行 pip install -e .来下载依赖的,那么这个时候需要使用YOLO时都需要在下载的release文件的目录下的py文件才能生效 比方说我下载的yolov8(ultralytic…

SpringBoot 快速上手

1. 环境准备 ⾃检Idea版本: 社区版: 2021.1 -2022.1.4 专业版: ⽆要求 如果个⼈电脑安装的idea不在这个范围, 需要卸载重新安装. Idea 卸载参考: https://blog.csdn.net/qq_19072921/article/details/126408402 (⼀定要删除注册表) 2. Maven 2.1 什么是Maven 官⽅…

Stable Diffusion 模型的安装和使用

一、SD模型简介 Stable Diffusion的绘图风格主要由模型来控制,基础模型主要由二次元图片训练获得,所以在不安装其他模型的情况下,只能生成二次元风格的图像。 模型能够有效地控制生成的画风和内容。 常用的模型网站有: Stable D…

Taro 框架中使用iconfont 阿里巴巴矢量图标 class版

想必大家都知道这个图标库的 图标还是很多的‘ 大家应该都也用过 最进开发 Taro nut-ui 的H5 移动端的时候 我发现一些图标我在组件库中找不到 我看到了nut-ui 中还有另一种使用方法 这个叫做 自定一图标 、 我来用实际操作 代码 来介绍一下 这个怎么使用 我总结文章 …

docker环境安装kafka/Flink/clickhouse镜像

1、安装Kafka服务 1、将一下三个tar文件复制到ubuntu指定目录下 2、进入到/home/cl/app目录,使用docker命令加载tar镜像文件 # cd /home/cl/app # docker load -i kafka.tar # docker load -i kafka-manager.tar # docker load -i kafka-zookeeper.tar3、查看d…

MySQL基础练习题11-换座位

题目:交换每两个连续的学生的座位号。如果学生的数量是奇数,则最后一个学生的id不交换。按 id 升序 返回结果表。 准备数据 分析数据 方法一:利用power函数对id进行交换,得出的答案只有0或1 第一步:用power()函数将…