KVM虚拟化
目录
KVM 虚拟化
环境准备
支持虚拟化的条件
Inter 的 cpu:VMX
AMD 的 cpu:SVM
# 在cpuinfo中可以查看具体的支持虚拟化信息
[root@lb01 ~]# grep -E "svm|vmx" /proc/cpuinfo
# 如果没有支持可在虚拟机设置中开启虚拟化
KVM 安装实践(简易版)
安装 kvm
# 安装管理工具
[root@lb01 ~]# yum install -y qemu-kvm libvirt
# 安装virt命令
[root@lb01 ~]# yum install -y virt-install
Kvm:linux 内核的一个模块,模块不需要安装,只需要加载
Qemu:虚拟化软件,可以虚拟不同的 cpu,支持异构(x86 架构可虚拟化出不是 x86 的架构)
Qemu-kvm:用户态管理 kvm,网卡,声卡,PCI 设备等都是 qemu 来管理的
创建虚拟磁盘
# 创建qcow2磁盘
[root@lb01 ~]# qemu-img create -f raw /opt/CentOS-7-x86_64.raw 10G
[root@lb01 ~]# qemu-img create -f qcow2 /opt/CentOS-7-x86_64.qcow2 10G
# 转换磁盘格式
[root@lb01 ~]# qemu-img convert -c -f raw -O qcow2 /opt/CentOS-7-x86_64.raw /opt/CentOS-7-x86_64.qcow2
# 创建虚拟磁盘:
-f指定格式
路径:/opt/CentOS-7-x86_64.raw 大小为10G
格式:1.raw 创建多大占用多大磁盘空间
2.qcow2 占用磁盘大小根据使用量来决定
显示内核中 kvm 状态
[root@lb01 ~]# lsmod |grep kvm
kvm_intel 183621 0
kvm 586948 1 kvm_intel
irqbypass 13503 1 kvm
启动服务
#开机自启
[root@lb01 opt]# systemctl enable libvirtd
#启动libvirt
[root@lb01 opt]# systemctl start libvirtd
上传镜像
法一:
#下载镜像到/opt目录下
[root@lb01 opt]# wget http://mirrors.aliyun.com/centos/7.2.1511/isos/x86_64/CentOS-7-x86_64-DVD-1511.iso
法二:
# 利用CRT的SFTP上传
CRT ==> File ==> Connect SFTP Session (英文版CRT)
CRT ==> 文件 ==> 连接到SFTP (中文版CRT)
sftp> cd /opt
sftp> put D:/ISO/CentOS-7-x86_64-DVD-1511.iso
法三:
#进入opt目录
[root@linux-node1 ~]# cd /opt/
#将镜像从cdrom挂载到opt下
[root@linux-node1 opt]# dd if=/dev/cdrom of=/opt/CentOS-7.1-x86_64.iso
创建虚拟机
Virt-install 重要命令介绍:
virt-install –help
-n(Name): 指定虚拟机的名称
–memory(–raw): 指定内存大小
–cpu: 指定 cpu 的核数(默认为 1)
–cdrom: 指定镜像
–disk: 指定磁盘路径(即上文创建的虚拟磁盘)
–virt-type: 指定虚拟机类型(kvm,qemu,xen)
–network: 指定网络类型
[root@lb01 opt]# virt-install \
--virt-type kvm \
--name CentOS-7-x86_64 \
--ram 1024 \
--cdrom=/opt/CentOS-7.1-x86_64.iso \
--disk path=/opt/CentOS-7-x86_64.raw \
--disk /opt/CentOS-7-x86_64.qcow2 \
--network network=default \
--graphics vnc,listen=0.0.0.0 \
--noautoconsole
注解:
虚拟机类型:kvm
虚拟机名字:CentOS-7-x86_64
虚拟机内存:1024M
虚拟机镜像路径:/tmp/CentOS-7-x86_64-DVD-1511.iso
虚拟机磁盘格式:raw
虚拟机磁盘格式:qcow2
虚拟机网络类型:默认
指定控制台:VNC
指定不自动试图连接到客户机控制台
使用 VNC 连接 kvm
https://www.realvnc.com/en/connect/download/viewer/
Ctrl+N
打开新连接窗口
经过安装虚拟机的过程后需要重新开启虚拟机
此时还不能连接外网
更改虚拟机网桥连接设置
默认情况下是 NAT,但是在生产环境,使用的更多的是桥接模式,更改虚拟机为网桥模式
网桥的基本原理就是创建一个桥接接口 br0,在屋里网卡和虚拟网络接口之间传递数据。
#添加网桥br0
[root@lb01 opt]# brctl addbr br0
#桥接br0和eth0
[root@lb01 opt]# brctl addif br0 eth0
注:此时会断网如果是远程操作服务器不在身边,建议写成脚本来执行
#删除eth0的IP
[root@lb01 opt]# ip addr del dev eth0 10.0.0.5/24
#给br0设置IP
[root@lb01 opt]# ifconfig br0 10.0.0.5/24 up
#给br0设置网关
[root@lb01 opt]# route add default gw 10.0.0.2
脚本如下(br0里的IP要和eth0一样xshell就不会段连了,和虚拟IP无关)
#!/bin/bash
brctl addbr br0
brctl addif br0 eth0
ip addr del dev eth0 10.0.0.5/24
ifconfig br0 10.0.0.5/24 up
route add default gw 10.0.0.2
修改虚拟机配置
[root@lb01 ~]# virsh edit CentOS-7-x86_64
将:
<interface type='network'>
<mac address='52:54:00:6f:fd:f9'/>
<source network='default'/>
修改为:
<interface type='bridge'>
<mac address='52:54:00:6f:fd:f9'/>
<source bridge='br0'/>
#关闭虚拟机
[root@lb01 ~]# virsh shutdown CentOS-7-x86_64
#启动虚拟机
[root@lb01 ~]# virsh start CentOS-7-x86_64
可以连上了
虚拟机基本操作
生成kvm虚拟机: virt-install
查看再运行的虚拟机: virsh list
查看kvm虚拟机配置文件: virsh dumpxml name
启动kvm虚拟机: virsh start name
正常关机: virsh shutdown name
非正常关机: virsh destroy name
删除: virsh undefine name (彻底删除,无法找回,除非备份xml文件)
根据配置文件定义虚拟机: virsh define file-name.xml
挂起,终止: virsh suspend name
回复挂起状态: virsh resumed name
拓展
热添加 CPU
#虚拟机xml路径
[root@lb01 opt]# cd /etc/libvirt/qemu/
#查看虚拟机xml文件
[root@lb01 qemu]# ll
total 8
-rw------- 1 root root 4508 Sep 6 17:49 CentOS-7-x86_64.xml
drwx------ 3 root root 42 Sep 6 17:46 networks
注:修改虚拟机xml文件不直接修改上文所述文件,要在用virsh管理命令修改
#控制台内修改
[root@lb01 qemu]# virsh
virsh # edit CentOS-7-x86_64
#控制台外修改
[root@lb01 qemu]# virsh edit CentOS-7-x86_64
注:热添加的CPU数不能超过最大值
#编辑配置文件
[root@lb01 qemu]# virsh edit CentOS-7-x86_64
#当前为1 自动扩容 最大为4
##将这个删除
<vcpu placement='static'>1</vcpu>
##修改为这个
<vcpu placement='auto' current="1" >4</vcpu>
#关闭虚拟机
[root@lb01 qemu]# virsh shutdown CentOS-7-x86_64
#开启虚拟机
[root@lb01 qemu]# virsh start CentOS-7-x86_64
##没有热添加cpu之前先查看cpu的个数:
[root@lb01 qemu]# cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 154
model name : 12th Gen Intel(R) Core(TM) i7-12700H
stepping : 3
microcode : 0x423
cpu MHz : 2687.991
cache size : 24576 KB
physical id : 0
siblings : 1
core id : 0
cpu cores : 1
apicid : 0
initial apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 32
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon rep_good nopl xtopology tsc_reliable nonstop_tsc eagerfpu pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch ssbd ibrs ibpb stibp ibrs_enhanced tpr_shadow vnmi ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid rdseed adx smap clflushopt clwb sha_ni xsaveopt xsavec xgetbv1 arat umip pku ospke gfni vaes vpclmulqdq spec_ctrl intel_stibp flush_l1d arch_capabilities
bogomips : 5375.98
clflush size : 64
cache_alignment : 64
address sizes : 45 bits physical, 48 bits virtual
power management:
processor : 1
vendor_id : GenuineIntel
cpu family : 6
model : 154
model name : 12th Gen Intel(R) Core(TM) i7-12700H
stepping : 3
microcode : 0x423
cpu MHz : 2687.991
cache size : 24576 KB
physical id : 2
siblings : 1
core id : 0
cpu cores : 1
apicid : 2
initial apicid : 2
fpu : yes
fpu_exception : yes
cpuid level : 32
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon rep_good nopl xtopology tsc_reliable nonstop_tsc eagerfpu pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch ssbd ibrs ibpb stibp ibrs_enhanced tpr_shadow vnmi ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid rdseed adx smap clflushopt clwb sha_ni xsaveopt xsavec xgetbv1 arat umip pku ospke gfni vaes vpclmulqdq spec_ctrl intel_stibp flush_l1d arch_capabilities
bogomips : 5375.98
clflush size : 64
cache_alignment : 64
address sizes : 45 bits physical, 48 bits virtual
power management:
#热添加CPU
[root@lb01 qemu]# virsh setvcpus CentOS-7-x86_64 2 --live
##添加完cpu后,查看cpu个数:
[root@lb01 qemu]# cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 154
model name : 12th Gen Intel(R) Core(TM) i7-12700H
stepping : 3
microcode : 0x423
cpu MHz : 2687.991
cache size : 24576 KB
physical id : 0
siblings : 1
core id : 0
cpu cores : 1
apicid : 0
initial apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 32
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon rep_good nopl xtopology tsc_reliable nonstop_tsc eagerfpu pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch ssbd ibrs ibpb stibp ibrs_enhanced tpr_shadow vnmi ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid rdseed adx smap clflushopt clwb sha_ni xsaveopt xsavec xgetbv1 arat umip pku ospke gfni vaes vpclmulqdq spec_ctrl intel_stibp flush_l1d arch_capabilities
bogomips : 5375.98
clflush size : 64
cache_alignment : 64
address sizes : 45 bits physical, 48 bits virtual
power management:
processor : 1
vendor_id : GenuineIntel
cpu family : 6
model : 154
model name : 12th Gen Intel(R) Core(TM) i7-12700H
stepping : 3
microcode : 0x423
cpu MHz : 2687.991
cache size : 24576 KB
physical id : 2
siblings : 1
core id : 0
cpu cores : 1
apicid : 2
initial apicid : 2
fpu : yes
fpu_exception : yes
cpuid level : 32
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon rep_good nopl xtopology tsc_reliable nonstop_tsc eagerfpu pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch ssbd ibrs ibpb stibp ibrs_enhanced tpr_shadow vnmi ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid rdseed adx smap clflushopt clwb sha_ni xsaveopt xsavec xgetbv1 arat umip pku ospke gfni vaes vpclmulqdq spec_ctrl intel_stibp flush_l1d arch_capabilities
bogomips : 5375.98
clflush size : 64
cache_alignment : 64
address sizes : 45 bits physical, 48 bits virtual
power management:
激活 CPU (高版本的 kvm 不需要这样做,直接可以激活)
[root@lb01 qemu]# echo "1" > /sys/devices/system/cpu/cpu1/online
[root@lb01 qemu]# cat /sys/devices/system/cpu/cpu0/online
1
[root@lb01 qemu]# cat /sys/devices/system/cpu/cpu1/online
1
第二种添加 cpu 的方法:安装时指定
[root@lb01 qemu]# virt-install –vcpus 5 –vcpus 5,maxcpus=10,cpuset=1-4,6,8 –vcpus sockets=2,cores=4,thread=2