KVM虚拟化

article/2025/10/14 16:29:07

文章目录

  • 虚拟化介绍
  • kvm简介
  • Qemu-KVM虚拟化
  • 部署kvm
  • KVM管理界面安装

虚拟化介绍

虚拟化:在一台计算机上虚拟出多个逻辑的计算机,而且每个逻辑计算机
它可以是不同操作系统

虚拟化技术:可以扩大硬件容量,单个cpu模拟出多个cpu并行,
允许一个平台上同时运行多个操作系统,应用程序都可以在相互独立
的空间内运行,而且互不影响。

为什么企业使用虚拟化技术

1、节约成本
2、提高效率,物理机我们一般称为宿主机(Host),宿主机上面的虚拟机称为客户机(Guest)。

那么 Host 是如何将自己的硬件资源虚拟化,并提供给 Guest 使用的呢?
这个主要是通过一个叫做 Hypervisor 的程序实现的。
Hypervisor:一种运行在物理服务器硬件与操作系统之间的中间软件层
可允许多个操作系统和应用来共享硬件资源
根据 Hypervisor 的实现方式和所处的位置,虚拟化又分为两种:
完全虚拟化:直接在物理机上部署虚拟化,且不需要修改操作系统内核
半虚拟化:需要修改操作系统内核,使其支持虚拟化驱动来实现虚拟化技术

全虚拟化
image-1664564665421

半虚拟化
image-1664564698960

kvm简介

kVM 全称是 Kernel-Based Virtual Machine。也就是说 KVM 是基于 Linux 内核实现的。
KVM有一个内核模块叫 kvm.ko,只用于管理虚拟 CPU 和内存。
那 IO 的虚拟化,比如存储和网络设备则是由 Linux 内核与Qemu来实现。

Qemu-KVM虚拟化

KVM本身不执行任何设备模拟,需要用户空间程序QEMU通过/dev/kvm接口设置一个虚拟客户机的地址空间。

  • KVM和Qemu的关系
    • Qemu是一个独立的虚拟化解决方案,通过intel-VT 或AMD SVM实现全虚拟化,安装qemu的系统,可以直接模拟出另一个完全不同的系统环境。QEMU本身可以不依赖于KVM,但是如果有KVM的存在并且硬件(处理器)支持比如Intel VT功能,那么QEMU在对处理器虚拟化这一块可以利用KVM提供的功能来提升性能。
    • KVM是集成到Linux内核的Hypervisor,是X86架构且硬件支持虚拟化技术(Intel-VT或AMD-V)的Linux的全虚拟化解决方案。它是Linux的一个很小的模块,利用Linux做大量的事,如任务调度、内存管理与硬件设备交互等。准确来说,KVM是Linux kernel的一个模块。
  • Qemu的三种运行模式:
    • 1.第一种模式是通过kqemu模块实现内核态的加速。
    • 2.第二种模式是在用户态直接运行QEMU,由QEMU对目标机的 所有 指令进行翻译后执行,相当于全虚拟化。
    • 3.第三种模式则是KVM官方提供的kvm-qemu加速模式。
  • qmeu的两种特点:
    • 1.QEMU可以在没有主机内核驱动程序的情况下运行。
    • 2.它适用于多种操作系统(GNU / Linux,* BSD,Mac OS X,Windows)和体系结构。
    • 3.它执行FPU的精确软件仿真。

QEMU的两种操作模式:完整的系统仿真和用户模式仿真。

  • QEMU用户模式仿真具有以下功能:
    • 1.通用Linux系统调用转换器,包括大部分ioctls。
    • 2.使用本机CPU clone的仿真为线程使用Linux调度程序。
    • 3.通过将主机信号重新映射到目标信号来实现精确信号处理。
  • QEMU全系统仿真具有以下特点:
    • 1.QEMU使用完整的软件MMU来实现最大的便携性。
    • 2.QEMU可以选择使用内核加速器,如kvm。加速器本地执行大部分客户代码,同时继续模拟机器的其余部分。
    • 3.可以仿真各种硬件设备,并且在某些情况下,客户机操作系统可以透明地使用主机设备(例如串行和并行端口,USB,驱动器)。主机设备传递可用于与外部物理外围设备(例如网络摄像头,调制解调器或磁带驱动器)交谈。
    • 4.对称多处理(SMP)支持。目前,内核加速器需要使用多个主机CPU进行仿真。

部署kvm

环境说明

主机名ip系统
kvm192.168.202.138centos 8

首先先修改机器配置

  • 内存尽量给大点,cpu虚拟化功能都勾选,虚拟计数器看情况勾选

在这里插入图片描述

//新建分区,将硬盘所有大小都给这个分区

KVM管理界面安装

Kvm的web界面是由webvirtmgr程序提供的

//安装依赖包
[root@centos8 ~]# yum -y install git python2-pip supervisor nginx python2-devel
[root@centos8 ~]#  wget http://mirror.centos.org/centos/7/os/x86_64/Packages/libxml2-python-2.9.1-6.el7.5.x86_64.rpm
//下载webvirtmgr
[root@centos8 ~]# wget https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/p/python-websockify-0.6.0-2.el7.noarch.rpm
[root@centos8 ~]# rpm -ivh --nodeps libxml2-python-2.9.1-6.el7.5.x86_64.rpm
warning: libxml2-python-2.9.1-6.el7.5.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
Verifying...                          ################################# [100%]
Preparing...                          ################################# [100%]
Updating / installing...1:libxml2-python-2.9.1-6.el7.5     ################################# [100%]//升级pip
[root@centos8 ~]# pip2 install --upgrade pip
WARNING: Running pip install with root privileges is generally not a good idea. Try `pip2 install --user` instead.
Collecting pipDownloading https://files.pythonhosted.org/packages/27/79/8a850fe3496446ff0d584327ae44e7500daf6764ca1a382d2d02789accf7/pip-20.3.4-py2.py3-none-any.whl (1.5MB)100% |████████████████████████████████| 1.5MB 51kB/s 
Installing collected packages: pipFound existing installation: pip 9.0.3Uninstalling pip-9.0.3:Successfully uninstalled pip-9.0.3
Successfully installed pip-20.3.4
You are using pip version 20.3.4, however version 22.2.2 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
[root@centos8 ~]# pip -V
pip 20.3.4 from /usr/lib/python2.7/site-packages/pip (python 2.7)//github拉取webvirtmgr
[root@centos8 ~]# cd /usr/local/src/
[root@centos8 src]# git clone http://github.com/retspen/webvirtmgr.git[root@centos8 src]# cd webvirtmgr/
[root@centos8 webvirtmgr]# ls
conf                  images       networks          setup.py
console               instance     README.rst        storages
create                interfaces   requirements.txt  templates
deploy                locale       secrets           Vagrantfile
dev-requirements.txt  manage.py    serverlog         vrtManager
hostdetail            MANIFEST.in  servers           webvirtmgr//安装webvirtmgr
[root@centos8 webvirtmgr]# pip install -r requirements.txt//检查sqlite3是否安装
[root@centos8 webvirtmgr]# python3
Python 3.6.8 (default, Jan 19 2022, 23:28:49) 
[GCC 8.5.0 20210514 (Red Hat 8.5.0-7)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sqlite3
>>> exit()//初始化账号信息
[root@centos8 webvirtmgr]# python2 manage.py syncdb
WARNING:root:No local_settings file found.
Creating tables ...
Creating table auth_permission
Creating table auth_group_permissions
Creating table auth_group
Creating table auth_user_groups
Creating table auth_user_user_permissions
Creating table auth_user
Creating table django_content_type
Creating table django_session
Creating table django_site
Creating table servers_compute
Creating table instance_instance
Creating table create_flavorYou just installed Django's auth system, which means you don't have any superusers defined.
Would you like to create one now? (yes/no): yes
Username (leave blank to use 'root'): root
Email address: wjh@qq.com
Password: 
Password (again): 
Superuser created successfully.
Installing custom SQL ...
Installing indexes ...
Installed 6 object(s) from 1 fixture(s)//拷贝web网页到指定目录
[root@centos8 webvirtmgr]# mkdir /var/www/
[root@centos8 webvirtmgr]#  cp -r /usr/local/src/webvirtmgr/ /var/www/
[root@centos8 webvirtmgr]# chown -R nginx.nginx /var/www/webvirtmgr///配置密钥认证
由于这里webvirtmgr和kvm服务部署在同一台机器,所以这里是本地信任;如果kvm部署在其他机器上的时候,那么就需要把公钥发送到kvm主机中
[root@centos8 ~]# ssh-keygen 
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:PQ3B2ODEaZM8hFyvvjJzQFGrU9zEoVzze4O/TEZ2pD0 root@centos8
The key's randomart image is:
+---[RSA 3072]----+
|     . B*O*.     |
|      +=XB++     |
|       oBo+ .   .|
|      .o o o o + |
|     .o S o + *Eo|
|      .o   . = o.|
|       ..     +  |
|      + ..   + . |
|       =.     o  |
+----[SHA256]-----+[root@centos8 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.137.130/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host '192.168.137.130 (192.168.137.130)' can't be established.
ECDSA key fingerprint is SHA256:u3A9HCdz3qc1ZfyEQNpSYXCaJOq8Gt1t0g7nfv8eh0o.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@192.168.137.130's password: Number of key(s) added: 1Now try logging into the machine, with:   "ssh 'root@192.168.137.130'"
and check to make sure that only the key(s) you wanted were added.//配置端口转发
[root@centos8 ~]# ssh 192.168.137.130 -L localhost:8000:localhost:8000//查看端口
[root@centos8 ~]# ss -anlt
State  Recv-Q  Send-Q   Local Address:Port   Peer Address:Port Process 
LISTEN 0       128            0.0.0.0:111         0.0.0.0:*            
LISTEN 0       32       192.168.122.1:53          0.0.0.0:*            
LISTEN 0       128            0.0.0.0:22          0.0.0.0:*            
LISTEN 0       128          127.0.0.1:6080        0.0.0.0:*            
LISTEN 0       128          127.0.0.1:8000        0.0.0.0:*            
LISTEN 0       128               [::]:111            [::]:*            
LISTEN 0       128               [::]:22             [::]:*            
LISTEN 0       128              [::1]:6080           [::]:*            
LISTEN 0       128              [::1]:8000           [::]:*   //配置nginx
[root@centos8 ~]# cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak
[root@centos8 ~]# vim /etc/nginx/nginx.conf删除listen       [::]:80;行
参数server_name行改成server_name  localhost;
删除root         /usr/share/nginx/html;行
server {listen       80 ;server_name  localhost;在include /etc/nginx/default.d/*.conf;行下添加location / {root    html;index   index.html index.htm;//配置nginx虚拟机
[root@centos8 ~]# vim /etc/nginx/conf.d/webvirtmgr.conf
server {listen 80 default_server;server_name $hostname;#access_log /var/log/nginx/webvirtmgr_access_log;location /static/ {root /var/www/webvirtmgr/webvirtmgr;expires max;}location / {proxy_pass http://127.0.0.1:8000;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-for $proxy_add_x_forwarded_for;proxy_set_header Host $host:$server_port;proxy_set_header X-Forwarded-Proto $remote_addr;proxy_connect_timeout 600;proxy_read_timeout 600;proxy_send_timeout 600;client_max_body_size 1024M;}
}//确保bind绑定本机的8000端口
[root@centos8 ~]# grep "bind"  /var/www/webvirtmgr/conf/gunicorn.conf.py
# bind - The socket to bind.
bind = '127.0.0.1:8000'//重启nginx服务,并查看端口
[root@centos8 ~]# systemctl restart nginx.service
[root@centos8 ~]# ss -anlt
State  Recv-Q  Send-Q   Local Address:Port   Peer Address:Port Process 
LISTEN 0       128            0.0.0.0:111         0.0.0.0:*            
LISTEN 0       128            0.0.0.0:80          0.0.0.0:*            
LISTEN 0       32       192.168.122.1:53          0.0.0.0:*            
LISTEN 0       128            0.0.0.0:22          0.0.0.0:*            
LISTEN 0       128          127.0.0.1:6080        0.0.0.0:*            
LISTEN 0       128          127.0.0.1:8000        0.0.0.0:*            
LISTEN 0       128               [::]:111            [::]:*            
LISTEN 0       128               [::]:22             [::]:*            
LISTEN 0       128              [::1]:6080           [::]:*            
LISTEN 0       128              [::1]:8000           [::]:* //设置supervisor
[root@centos8 ~]# vim /etc/supervisord.conf 
//最后一行添加
[program:webvirtmgr]
command=/usr/bin/python2 /var/www/webvirtmgr/manage.py run_gunicorn -c /var/www/webvirtmgr/conf/gunicorn.conf.py
directory=/var/www/webvirtmgr
autostart=true
autorestart=true
logfile=/var/log/supervisor/webvirtmgr.log
log_stderr=true
user=nginx[program:webvirtmgr-console]
command=/usr/bin/python2 /var/www/webvirtmgr/console/webvirtmgr-console
directory=/var/www/webvirtmgr
autostart=true
autorestart=true
stdout_logfile=/var/log/supervisor/webvirtmgr-console.log
redirect_stderr=true
user=nginx//启动并开机自启
[root@centos8 ~]# systemctl enable --now supervisord.service//配置nginx用户
[root@centos8 ~]# su - nginx -s /bin/bash
[nginx@centos8 ~]$ ssh-keygen -t rsa 
Generating public/private rsa key pair.
Enter file in which to save the key (/var/lib/nginx/.ssh/id_rsa): 
Created directory '/var/lib/nginx/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /var/lib/nginx/.ssh/id_rsa.
Your public key has been saved in /var/lib/nginx/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:eQItHVwOqs0LWzkuCpdj+DKNLpHA3izm/6EU8ghS6No nginx@centos8
The key's randomart image is:
+---[RSA 3072]----+
|       .o..      |
| .     +.+       |
|o .   + o .      |
|oo   + + .       |
|=+o.o * S .      |
|**++.= o o       |
|*=Eoo.o          |
|=*oo...          |
|o++o..           |
+----[SHA256]-----+[nginx@centos8 ~]$ echo -e "StrictHostKeyChecking=no\nUserKnownHostsFile=/dev/null" > ~/.ssh/config
[nginx@centos8 ~]$ cat .ssh/config
StrictHostKeyChecking=no
UserKnownHostsFile=/dev/null
[nginx@centos8 ~]$ chmod 600 .ssh/config
[nginx@centos8 ~]$ ssh-copy-id root@192.168.137.130
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/var/lib/nginx/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
Warning: Permanently added '192.168.137.130' (ECDSA) to the list of known hosts.
root@192.168.137.130's password: Number of key(s) added: 1Now try logging into the machine, with:   "ssh 'root@192.168.137.130'"
and check to make sure that only the key(s) you wanted were added.[nginx@centos8 ~]$ exit
logout[root@centos8 ~]#  vim /etc/polkit-1/localauthority/50-local.d/50-libvirt-remote-access.pkla
[Remote libvirt SSH access]
Identity=unix-user:root
Action=org.libvirt.unix.manage
ResultAny=yes
ResultInactive=yes
ResultActive=yes[root@centos8 ~]# systemctl restart nginx.service 
[root@centos8 ~]# systemctl restart libvirtd
channel 1012: open failed: connect failed: Device or resource busy
channel 1013: open failed: connect failed: Device or resource busy发现问题所在,我53端口一直没起来
web界面,nginx也报错502,原来是selinux permissive模式不行,必须disabled永久关闭
重开reboot

web界面登录
在这里插入图片描述
新建连接
在这里插入图片描述新建存储池
在这里插入图片描述通过工具上传镜像

在这里插入图片描述//新建镜像
在这里插入图片描述

网络池,新建网络
在这里插入图片描述

自定义创建虚拟机
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

开始安装
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
安装完成
在这里插入图片描述


http://chatgpt.dhexx.cn/article/kivbAEsQ.shtml

相关文章

虚拟化技术KVM入门学习

目录 一、虚拟化技术概述二、主流虚拟化介绍1、虚拟化技术主要分类2、平台虚拟化技术分类 三、KVM虚拟化技术简介1、KVM架构及解析 四、KVM软件安装1、环境准备2、查看CPU是否支持VT技术3、清理环境,卸载原有KVM4、安装软件5、启动服务6、查看kvm模块加载 五、Guest…

KVM虚拟化技术

KVM虚拟化技术 Qemu-kvm kvm virt-manager VNC Qemu-kvm创建和管理虚拟机 一.KVM简介 KVM(名称来自英语:Kernel-basedVirtual Machine的缩写,即基于内核的虚拟机),是一种用于Linux内核中的虚拟化基础设施,可…

KVM虚拟化(一)

一、KVM虚拟化架构 1、主流虚拟机架构 图中对比了几种主流虚拟化技术架构:ESXi、Xen与KVM,其主要差别在与各组件(CPU、内存、磁盘与网络IO)的虚拟化与调度管理实现组件有所不同。在ESXi中,所有虚拟化功能都在内核实现…

虚拟化技术-KVM详解

一、 KVM概述 1.1 KVM 即 Kernel-based Virtual Machine 基于内核的虚拟机。 KVM,是一个开源的系统虚拟化模块,自 Linux 2.6.20 之后集成在 Linux 的各个主要发行版本中。它使用 Linux 自身的调度器进行管理,所以相对于Xen,其核心…

盘点腾讯后台开发各级工程师(T1-T9)需要具备哪些能力

作为一个程序员,不管是初入职场的菜鸟还是做开发多年的老鸟,都希望有机会能进大厂,最近有不少小伙伴问腾讯好不好进?需要的技术栈是怎么样的?本文就给大家普及一下腾讯后台开发各级工程师(T1-T9&#xff09…

大华热成像摄像头整合web 后台开发

大华热成像摄像头整合web 后台开发 项目背景:需要web后台主动抓拍/自动监控上报到web后台,通过百度智能云人脸识别。并推送到微信公众号 涉及平台:web后台,大华ndk,百度人脸识别 1、大华热成像ndk 包及 demo解析说明本…

微信公众号后台开发总结

微信公众号后台开发总结 一、项目简介 当前需要做一个公众号后台,前期需要实现的功能有: (1) 在用户关注公众号时便获取用户的信息同时还要将用户信息存入数据库。 (2) 在用户给公众号发送消…

c/c++后台开发前景到底如何?该如何提升?

最近听到很多人都在讲:在这个Java热火朝天,人工智能高能吹捧的市场,c/c开发人员还有人要? 小编想说的是:有,而且很多企业都是有在招c/c开发人才。 只是IT这个行业:普遍高端稀缺,中端…

程序员告诉你:C/C++后台开发需要学习哪些技能书

前言:后台开发工程师主流使用的编程语言有C、Java、PHP以及目前慢慢流行的Golang等。小编就将以C的角度,讲讲如何学习和准备后台开发的岗位。 一、语言基础 无论是C开发还是Java开发,对于一个码农而言,最重要的就是对于编程语言的…

c++后台开发适合入坑吗?就业前景如何?

一、什么是c后台开发? c后台开发也可以叫c后端开发,其实从技术上来说并无不同。 c后台开发就是基于linux环境和C语言的服务器程序开发,像qq服务器、微信服务器、王者荣耀服务器等等。虽然现在各种高级语言大火,但是在高性能这一…

后台开发之常用工具

最近windows电脑系统又莫名地崩了,重装了系统,其他磁盘文件还保留着,发现大部分软件之前装载D盘,还是可以继续用的,只需要将路径配置到环境变量即可。 趁着每个软件重新配置的机会,再来梳理一下平时开发过…

微信公众号后台开发

最近公司要做微信工作号开发,觉得有趣,便接了这单活。 1.首先已经申请了微信工作号,打开微信公众号平台 https://mp.weixin.qq.com/ AppId是这个公众号的唯一识别码,相当于登录名 AppSecret 是公众号的开发者密码,就相…

C++后台开发技术栈

目录 岗位要求 Linux C开发(vivio) C后台开发技术栈 岗位要求 Linux C开发(vivio) 熟悉掌握多线程/多进程 网络编程 常见RPC框架 设计模式 gdb调试等技术 计算框架mpi、tensorflow的研究与优化,不断提升性能…

C++后台开发学习路线

1.路线 一. 基础阶段 c/c编程语言 linux基础 数据结构与算法 设计模式 脚本语言(可选) 二. 入门阶段 linux系统编程 linux网络编程 三. 进阶阶段 数据库mysql 分布式缓存redis 网络库 四. 项目实践阶段 编写简单FTP服务器 C入门到精通Linux学习链接&#xff1a…

后台开发技术(1)--概述

说到后台开发,首选就有一个问题:什么是后台开发。就我理解,就是做服务器端开发。在服务器端运行着不同功能的服务,有直接与客户端连接的,有实现某一特定业务的比如用户注册登录,有数据存储的如基于mysql,memcached,redis等做的存储系统,除此之外还有一些满足运维监控系统…

腾讯T9职级后台开发要具备哪些专业的能力及知识点?

前言 首先说明这里的后台开发指的就是Linux上的C 编程。因为很多人对后台开发有误解,通常人们说前端后台,后台就马上联想到web后台, java、php和各种web框架横飞的既视感。 web后台属于后台,但后台却不只有web后台。两者是包含关系。 从网络协议的角度分析, web后台聚焦的是HT…

带你了解网络的魅力——tcping和ping区别

一、指代不同 1、ping:是Windows、Unix和Linux系统下的一个命令。ping也属于一个通信协议,是TCP/IP协议的一部分。通过ICMP协议发送报文到对方主机上任意一个60000以上的端口,然后获取对方主机的回复 2、tcping:是一种面向连百接…

ping TCP端口的实用小工具tcping

ping 大家都很熟悉的ping 命令,属于网络层的ICMP协议,只能检查 IP 的连通性或网络连接速度, 无法检测IP的端口状态。 telnet telnet命令,属于应用层的协议,用于远程登录,也可用于检测IP的端口状态。但是…

tcping检测端口

1.下载 tcping.exe - ping over a tcp connection (elifulkerson.com) 2.放置路径 C:\Windows\System32 3.使用 -4,优先使用IPv4 -6,优先使用IPv6 -h,使用http模式 -t,让命令持续运行,直到使用ctrl c指令退出 -n 数…

使用TCPing或PSPing工具检测TCP延迟

测试网络的延迟可以使用ping,mtr,tracert等命令,但是测试TCP端口的访问延迟无法使用以上软件完成,此时可以使用TCPPing或者PSPing来测试TCP端口的延迟情况。 TCPPing 到网上搜索tcping,下载该工具后。放到C:\Wi…