Centos7 KVM虚拟化
KVM是Kernel-based Virtual Machine的简称,是一个开源的,基于内核的系统虚拟化模块,自Linux2.6.20开始,各大主流Linux发行版都已经将其集成与发行版中。相比于Xen(Xen的早期产品时基于软件的半虚拟化产品,新版本则是基于硬件支持的完全虚拟化),其核心源码较少,但是要求硬件支持完全虚拟化(Inter VT或AMD V),KVM由内核加载并使用Linux系统的调度器进行管理,因此KVM对资源的管理效率较高,而反观Xen则有自己的进程调度器,存储管理模块等,所以源码较为庞大,在基于Linux操作系统的虚拟化产品中占有较大份额,其中商业虚拟化软件Vmware ESX系列是基于软件模拟的Full-Virtualization
配置环境只需要一台Centos7的虚拟机就可以了,配置给的高一点(别太低,因为要在虚拟机里创建虚拟机)
在开始配置之前,先说明一下配置顺序:
- 检查cpu是否包含相关指令集
- 安装KVM需要的相关软件包
- 安装图形化操作界面(易于之后使用图形化界面创建虚拟机)
- 修改网卡配置(添加一块桥接网卡)
- 给新新盘分区(80G那个),格式化文件系统,挂在至文件(为之后的虚拟机提供存储空间,如果你的空间足够,就跳过)
- 使用FTP或SFTP或其他传输工具将Centos7的镜像上传至KVM服务器(怎么弄进去是你的事,反正你得弄进去)
- 使用图形化界面创建虚拟机
- 使用命令行创建虚拟机
STEP1:检测CPU是否包含相关的指令集
[root@localhost ~]# egrep '(vmx|svm)' /proc/cpuinfo
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon 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 tpr_shadow vnmi ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 invpcid rtm mpx rdseed adx smap clflushopt xsaveopt xsavec arat spec_ctrl intel_stibp flush_l1d arch_capabilities
STEP2:安装KVM相关的软件包,并启动libvirtd服务
[root@localhost ~]# yum install -y qemu-kvm libvirt virt-install bridge-utils virt-manager
- qemu-kvm:KVM与QEMU的结合,KVM负责CPU+内存虚拟化,QEMU负责其他IO设备虚拟化
- libvirt:用于虚拟化平台的开源API,后台程序和管理工具,可用于管理KVM,Xen,VMware ESX,QEMU等
- virt-install:virt-install是一个命令行工具,它能够为KVM,Xen或其他支持libvrit API的pypervisor创建虚拟机并安装
- bridge-utils:Linux网桥工具
- virt-manager:virt-manager是一套虚拟化的桌面管理器,像Vmware的vCenter和XenCenter相似
[root@localhost ~]# systemctl start libvirtd ##启动libvirtd服务
扫描二维码关注公众号,回复: 7657404 查看本文章[root@localhost ~]# systemctl enable libvirtd ##设置libvirtd服务开机自启动
STEP4:安装图形化界面(如果你已经是图形化,自然就不需要安装了)
[root@localhost network-scripts]# yum groupinstall -y "Server with GUI"
修改网卡参数
STEP1:将你的Centos7虚拟机的网卡设置到桥接模式,将ifcfg-ens33网卡参数修改至下图
##很多文章的网卡都不一样比如eth0,enp5s0,ens37等等,命名不一样,但修改的东西不要搞错,是你桥接出去的那块网卡
[root@localhost network-scripts]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# vim ifcfg-ens33
TYPE=Ethernet
DEVICE=ens33
ONBOOT=yes
BRIDGE=br0 ##之后你那块桥接网卡叫什么名字这里就是什么名字
STEP2:创建br0网卡并配置如下参数
[root@localhost network-scripts]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# vim ifcfg-br0
TYPE=Bridge
BOOTPROTO=none
IPADDR=192.168.100.100
PREFIX=24
GATEWAY=192.168.100.1
DEVICE=br0
ONBOOT=yes
STEP3:重启网络服务
[root@localhost network-scripts]# systemctl restart network
STEP4:使用ifconfig查看当前系统网络配置
[root@localhost network-scripts]# ifconfig
br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.100.100 netmask 255.255.255.0 broadcast 192.168.100.255
inet6 fe80::20c:29ff:fe0c:3a7e prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:0c:3a:7e txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 10 bytes 740 (740.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
ether 00:0c:29:0c:3a:7e txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 21 bytes 1612 (1.5 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
新硬盘分区并挂载
STEP1:使用lsblk命令查看新硬盘在/dev文件中的位置
[root@localhost network-scripts]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 19G 0 part
├─centos-root 253:0 0 17G 0 lvm /
└─centos-swap 253:1 0 2G 0 lvm [SWAP]
sdb 8:16 0 80G 0 disk
sr0 11:0 1 4.3G 0 rom /mnt/cdrom
STEP2:使用fdisk工具对其进行分区(简单点操作的话,到了p那步之后一直回车就好了)
[root@localhost network-scripts]# fdisk /dev/sdb
Command (m for help): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): pCommand (m for help): w
STEP3:使用fdisk -l查看分区情况
[root@localhost network-scripts]# fdisk -l
Disk /dev/sdb: 85.9 GB, 85899345920 bytes, 167772160 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x448fe9a7Device Boot Start End Blocks Id System
/dev/sdb1 2048 167772159 83885056 83 Linux
STEP4:使用mkfs命令,为分区写入文件系统
[root@localhost network-scripts]# mkfs -t ext3 /dev/sdb1
Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
STEP5:在根目录创建目录(挂载点)并将分区挂载
[root@localhost network-scripts]# mkdir /sdb1
[root@localhost network-scripts]# mount /dev/sdb1 /sdb1
将Centos7的ISO镜像上传至KVM
STEP1:在根目录创建/iso目录用于存放iso文件
[root@localhost network-scripts]# mkdir /iso
STEP2:使用任何方法将Centos7镜像上传至/iso
[root@localhost /]# ls /iso
CentOS-7-x86_64-DVD-1810.iso
创建KVM虚拟机
STEP1:打开图形化界面(如果已经是图形化界面的请跳过这步)
[root@localhost network-scripts]#startx
STEP2:在左上角“Applications”--->“system tools”--->”Virtual Machine Manager“(打开KVM管理工具)
STEP3:点击左上角“File"--->"New Virtual Machine"(新建虚拟机)
STEP4:到这一界面后,选择第一个(因为ISO在本地),然后forward(下一步)
下图四个选项分别意为:
- Local Install Media (ISO image or CDROM):本地安装介质(ISO映像或光驱)
- Network Install (HTTP,FTP ,or NFS):网络安装(HTTP,FTP,NFS)
- Network Boot (PXE):网络引导
- import existing disk image:导入现有磁盘映像
STEP5:到此界面点击”Browse“--->点击左下角的”+“号---取名为”iso“,类型选择为”dir“--->路径选择为”/iso"
STEP6:选择刚刚上传的镜像,双击即可
STEP7:选择完成后,依然“Forward”即可
STEP8:分配的内存大小与CPU数量,点击”Forward“
STEP9:在分配磁盘大小时,选择”Select or create custom storage“(选择或创建自定义存储)(如果你的系统空间管够,就选择第一个,然后直接跳到STEP12即可)
STEP10:点击左下角”+“--->取名为”KVMDisk“--->路径设置为“/sdb1”--->点击“Finish”完成
STEP11:选择刚刚创建的KVMDisk--->点击中间的”+”--->取名为“Centos7-1”--->点击“Finish”--->点击"Choose Volume"
STEP12:在这里选择刚刚创建的桥接网卡(br0)
STEP13:到此为止基本就完成了,就可以装系统了
使用命令行创建虚拟机
STEP1:安装所需的软件
[root@localhost sdb1]# yum install virt-viewer
STEP2:输入下框命令,环境继续使用上面的即可(因为下面的实验将基于上面的环境)
[root@localhost sdb1]# virt-install -n centos7-5 -r 1024 \
--disk /sdb1/centos7-5.qcow2,size=10 \
--network bridge=br0 --os-type=linux --os-variant=CentOS7.0 \
--cdrom /iso/CentOS-7-x86_64-DVD-1810.iso \
--graphics vnc,port=5955,listen='0.0.0.0',password='abc.123'
对命令进行逐一解释:
- -n centos7-5:-n [name] 为创建的虚拟机名称
- -r 1024:-r [size] 为虚拟机分配的内存大小(单位MB)
- --disk /sdb1/centos7-5.qcow2:--disk [/path/name] 将虚拟机的磁盘文件建在目标位置,后缀为raw | qcow2 | qed
- size=10:--disk后面,给虚拟机分配多少存储空间(单位G)
- --network bridge=br0:选择网卡为桥接网卡br0
- --os-type=linux:选择操作系统类型
- --os-variant=CentOS7.0:选择操作系统发行版(要打全对,打错在之后会报错)
- --cdrom /iso/CentOS-7-x86_64-DVD-1810.iso:操作系统ISO所在路径
- --graphics vnc,port=5955:设置VNC服务端的端口为5955
- listen='0.0.0.0':跟在vnc参数后,指侦听在哪块网卡上
- password='abc.123':VNC客户端访问服务端的密码
STEP3:可以使用ss命令查看本地的vnc端口开启状态
[root@localhost sdb1]# ss -tunlp | grep 5955
tcp LISTEN 0 1 *:5955 *:* users:(("qemu-kvm",pid=49026,fd=18))
STEP4:使用VNC客户端连接桥接网卡IP:5955即可(不做演示了)
virt系列命令列表
命令形式 | 作用 |
virt-install | 用于创建虚拟机,详细命令可查阅相关手册 |
virsh list --all | 查看所有虚拟机 |
virsh start name |
启用名为name的虚拟机 |
virsh destroy name |
停用名为name的虚拟机 |
virsh undefine name | 删除名为name的虚拟机 |
virsh console name | 连接到名为name的虚拟机的控制台 |
☆附注1:如果在图形化界面创建虚拟机时,出现如下报错:
- 原因:libvirtd调用紫禁城dmidecode超时无法响应,可能和Vmware的兼容性有关
- 解决方法:killall dmidecode,在结束掉dmidecode进程后,KVM随即恢复正常