kvm详解

kvm

1、kvm是什么

核心作用:基于linux内核的虚拟机,可以让一台物理机或者虚拟机虚拟出多个虚拟机

  • 安装操作系统后,这个源码就集成在里面了,只需要安装对应的包就能使用kvm了

  • 开启的条件,这个虚拟机必须cpu虚拟化特性

图解

img

kvm套娃的,最多只能套2层,kvm创建的虚拟机不能继续创建虚拟机,最多2层

2、安装kvm

1、检查cpu是否支持虚拟化

# 有显示表示支持,没有的话,就需要再bios里面开启虚拟化支持
egrep '(vmx|svm)' /proc/cpuinfo

2、关闭防火墙和selinux

[root@kvm ~]# systemctl disable firewalld.service --now
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.

[root@kvm ~]# setenforce 0
[root@kvm ~]# vim /etc/selinux/config 
[root@kvm ~]# getenforce 
Permissive

3、安装kvm包

[root@kvm ~]# yum groups list
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
Installed Environment Groups:
   Virtualization Host
   Server with GUI
Available Environment Groups:
   Minimal Install
   Compute Node
   Infrastructure Server
   File and Print Server
   Basic Web Server
   GNOME Desktop
   KDE Plasma Workspaces
   Development and Creative Workstation
Installed Groups:
   System Administration Tools
Available Groups:
   Compatibility Libraries
   Console Internet Tools
   Development Tools
   Graphical Administration Tools
   Legacy UNIX Compatibility
   Scientific Support
   Security Tools
   Smart Card Support
   System Management
Done


# 这个包里面的Virtual Host 就是 kvm虚拟化主机整套的环境

# kvm,qemu,libvirt,virt-manager,虚拟网络,网桥依赖全部都带了


yum groupinstall -y "Virtualization Host"

4、开机自启和验证kvm是否就绪

[root@kvm ~]# systemctl enable libvirtd --now

# 安装这个virt-manager,kvm可视化工具
yum list | grep virt-manager
yum install virt-manager

# 通过这个openssl 进行通信的
yum -y install openssl  

img

或者使用命令行打开

img

这样的话,kvm就安装成功了

会看到一个虚拟网卡,默认是default

img

[root@kvm ~]# ifconfig 
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.50.129  netmask 255.255.255.0  broadcast 192.168.50.255
        inet6 fe80::20c:29ff:fe40:3233  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:40:32:33  txqueuelen 1000  (Ethernet)
        RX packets 3463  bytes 2953172 (2.8 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1752  bytes 204465 (199.6 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 53  bytes 4296 (4.1 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 53  bytes 4296 (4.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

virbr0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255
        ether 52:54:00:69:7f:5c  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

# 就是virbr0这个网卡的

3、kvm图形化安装虚拟机

使用kvm创建一个虚拟机

上传一个iso镜像,centos 7 镜像

自动选择系统的类型,磁盘10G,1G内存,1个cpu,

选择的网络是default,默认的桥接,可以上外网的

qcow2磁盘,就是使用libvirt虚拟化,都是使用的kvm虚拟化,会在/var/lib/libvirt/images下面生成一个qcow镜像

图形化创建,占用的磁盘是虚拟机的根下面的磁盘,默认占用的是根磁盘,后面可以根据配置修改占用哪个磁盘

安装过程中,将网络开启,会自动获取ip地址,就是这个网桥的地址

# 默认会在这个目录下面创建虚拟机的镜像
# 会占用根目录的空间
[root@kvm images]# pwd
/var/lib/libvirt/images
[root@kvm images]# ll -h 
total 11G
-rw------- 1 qemu qemu 11G May  8 16:42 centos7.qcow2

不占用这个根目录的空间,手动定义磁盘

# kvm借助了这个qemu一部分的源码
# qemu-img 创建一个空的磁盘
[root@kvm kvm_disk]# qemu-img create -f qcow2 kvm-centos7.qcow2 10G


4、自定义虚拟机磁盘存储位置

选择这个自定义存储位置,就是刚刚我们创建的磁盘的位置

img

img

这样话,安装系统磁盘就不会占用这个根目录的大小,就会占用指定磁盘的大小了

之前的博客写了一个内容,就是关于创建磁盘的问题,等会看一看

5、命令行创建虚拟机

# 首先先创建一个磁盘
[root@kvm kvm_disk]# qemu-img create -f qcow2 kvm-centos7.qcow2 10G

[root@kvm kvm_disk]# virt-install \
--name centos2 \
--memory 1024 \
--vcpus 1 \
--disk path=/kvm_disk/kvm-centos7.qcow2 \
--location /iso/CentOS-7-x86_64-DVD-2009.iso \
--network network=default \
--noautoconsole   # 不需要这个console线,直接输出信息,就不需要等待时间即可
# 输出信息
WARNING  No operating system detected, VM performance may suffer. Specify an OS with --os-variant for optimal results.

Starting install...
Retrieving file .treeinfo...                               |  354 B  00:00:00     
Retrieving file vmlinuz...                                 | 6.5 MB  00:00:00     
Retrieving file initrd.img...                              |  53 MB  00:00:00     
Domain installation still in progress. You can reconnect to 
the console to complete the installation process.


创建后,可以在图形化上面进行安装即可

6、kickstart全自动安装虚拟机

1、生成ks文件

有没有更加方便的操作了,就是安装后,图形化点点的操作,也被自动完成了,也就是全自动的安装

全自动安装,参考一个配置,主机名,网络等等
这个文件定义了所有的选项,虚拟机加载里面的选项

-x ks=http://

通过一个网站服务就能访问这个ks.cfg文件,从而实现全自动安装

ks文件如何生成呢?
如何加载这个ks文件

[root@kvm ~]# ls
anaconda-ks.cfg  # 这个文件,linux安装之后,就会有这个文件,初始化的参数记录在里面,我们使用自己生成的ks文件

kickstart工具 centos7版本才有的,8版本没有,因此的话,可以在7版本生成的文件,然后传给8版本使用

[root@kvm ~]# yum -y install system-config-kickstart
[root@kvm ~]# system-config-kickstart 

执行上面的命令就会跳出下面这个图,kickstart的配置器

img

这个工具没有包

img

配置这个包,只需要将yum源的名字更改一下即可,kickstart就能使用了

[development]  # 改成development就能在刚刚的那个页面看到一些包了
name=CentOS-$releasever - Base - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/os/$basearch/
        http://mirrors.aliyuncs.com/centos/$releasever/os/$basearch/
        http://mirrors.cloud.aliyuncs.com/centos/$releasever/os/$basearch/

关掉刚刚的页面,重新打开

img

配置kickstart,会生成ks文件

img

img

img

img

img

img

img

img

点击save就能生成这个ks.cfg文件

[root@kvm iso]# ls
CentOS-7-x86_64-DVD-2009.iso  ks.cfg

还需要开启2个内核参数 net.ifnames=0 biosdevname=0 console=ttyS0 主要就是禁用新的网络命名规则,使用传统的eth0

上面的话,ks文件就生成了

2、安装httpd

配置网站指向ks.cfg,这样的话,就能访问这个文件

yum -y install httpd
cp ks.cfg /var/www/html/
systemctl enable httpd --now
# 需要关闭防火墙,因为后面会找这个文件,所以的话,需要关闭这个防火墙,找不到这个文件

# 能访问到这个内容就没有问题了
curl localhost:/ks.cfg

3、开始全自动安装

# 创建一个虚拟磁盘
qemu-img create -f qcow2 kvm-centos7.qcow2 10G

# 创建虚拟机

[root@kvm kvm_disk]# virt-install \
--name centos77 \
--memory 1024 \
--vcpus 1 \
--disk path=/kvm_disk/kvm-centos7.qcow2 \
--location /iso/CentOS-7-x86_64-DVD-2009.iso \
--network network=default \
--noautoconsole \
-x ks=http://192.168.50.50/ks.cfg

有一个小坑就是,在生成配置文件的时候,要选安装哪些包,磁盘的选择,否则执行命令后,会卡在那个要你选择的地方,就不是自动化安装了

因为有图形化界面,便于观察虚拟机的信息,没有图形化界面的,在安装过程中,不知道虚拟机的ip地址,也不知道进行到哪一步呢?,这个时候怎么办呢?

  • 就需要在kickstart文件中添加console=ttyS0
    bootloader --append="net.ifnames=0 biosdevname=0 console=ttyS0" --location=mbr

  • 没有图形化的话就需要执行上面的操作

# 带上这一行参数,就可以使用console线连接
bootloader --append="net.ifnames=0 biosdevname=0 console=ttyS0" --location=mbr

[root@kvm kvm_disk]# virsh list
 Id    Name                           State
----------------------------------------------------
 8     centos77                       running

# 就能通过这个console连接这个创建的虚拟机了
[root@kvm kvm_disk]# virsh console centos77 
Connected to domain centos77
Escape character is ^]
localhost login: root
Password: 
Last login: Sat May  9 20:37:19 on tty1
[root@localhost ~]# 


# 按 ctrl+] 键 可以退出去




上面这个命令是还没有执行安装的时候可以做的
那如果已经安装好了呢?怎么操作呢?

# 在已经安装好的虚拟机的操作

# 修改内核参数
[root@localhost ~]# vi /etc/default/grub 
[root@localhost ~]# cat /etc/default/grub
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="net.ifnames=0 biosdevname=0 crashkernel=auto rhgb quiet console=ttyS0"
GRUB_DISABLE_RECOVERY="true"

# 重新生成grub文件
[root@localhost ~]# grub2-mkconfig -o /boot/grub2/grub.cfg 
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.10.0-957.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-957.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-79b5645f52ba4e32a4d4c7df30acd457
Found initrd image: /boot/initramfs-0-rescue-79b5645f52ba4e32a4d4c7df30acd457.img
done


# 最后重启,就能使用console连接


注意,上面创建的时候用了noautoconsole 就是释放会话,不开启的话,就会一直卡主
现在的话,我们需要使用console线,直接配置即可

总结

kvm 就是一个集成在linux内核里面的,让这个虚拟机或者物理服务器具有虚拟化的能力,能够创建虚拟机的能力

virsh 命令的学习,后面补充

还需要补充的:

virsh命令用法

  • 图形化界面能操作的,命令行都能使用

kvm深入学习,自定义创建网络,配置文件等等

华为云,底层都是kvm

posted @ 2026-05-08 16:30  乔的港口  阅读(50)  评论(0)    收藏  举报