kvm详解
kvm
1、kvm是什么
核心作用:基于linux内核的虚拟机,可以让一台物理机或者虚拟机虚拟出多个虚拟机
-
安装操作系统后,这个源码就集成在里面了,只需要安装对应的包就能使用kvm了
-
开启的条件,这个虚拟机必须cpu虚拟化特性
图解

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

或者使用命令行打开

这样的话,kvm就安装成功了
会看到一个虚拟网卡,默认是default

[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、自定义虚拟机磁盘存储位置
选择这个自定义存储位置,就是刚刚我们创建的磁盘的位置


这样话,安装系统磁盘就不会占用这个根目录的大小,就会占用指定磁盘的大小了
之前的博客写了一个内容,就是关于创建磁盘的问题,等会看一看
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的配置器

这个工具没有包

配置这个包,只需要将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/
关掉刚刚的页面,重新打开

配置kickstart,会生成ks文件








点击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

浙公网安备 33010602011771号