CentOS-7.x下安装使用KVM虚拟机

CentOS-7.x下安装使用KVM虚拟机

KVM虚拟机简介:

Kernel-based Virtual Machine的简介,是一个开源的系统虚拟化模块,目标集合在Linux的各个主要发布版本中。

KVM的虚拟化需要硬件支持(如Intel VT技术或AMD V技术),是基于硬件的完全虚拟化。

Xen是基于硬件支持的完全虚拟化,但Xen本身有自己的进程调节器,存储管理模块等,所以代号比较大。

广为流传的商业系统虚拟化软件VMware ESX系列是基于软件模拟的全虚拟化。

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

1.1如果是在VMware虚拟机中安装,检查Intel VT设置

在VMware设置中将做为主机的CentOS虚拟机的Intel VT或AMD-V功能勾选中,开启VT虚拟化,才能在虚拟机中创建虚拟机。

1.2用下面的命令检查cpu是否支持vt:

cat /proc/cpuinfo|egrep 'vmx|svm'
grep -Ei 'vmx|svm' /proc/cpuinfo

如果出现vmx或者svm关键字就代表支持虚拟化,vmx代表Intel的CPU,svm代表AMD的CPU

2、关闭selinux

sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config 

设置强制 0

3、防火墙设置

如果使用VNC管理KVM虚拟机,需要打开相应的端口,VNC端口默认是从5901开始

CentOS 7.x默认使用的是防火墙作为防火墙,这里改为iptables防火墙。

3.1、关闭防火墙:

systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动
systemctl mask firewalld
systemctl stop firewalld
yum remove firewalld

3.2、安装iptables防火墙

yum install iptables-services #安装

vi /etc/sysconfig/iptables #编辑防火墙配置文件

# sample configuration for iptables service
# you can edit this manually or use system-config-firewall
# please do not ask us to add additional ports/services to this default configuration
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 5900:5999 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
vi /etc/hosts #编辑hosts配置文件
127.0.0.1 kvm01 localhost #修改localhost.localdomain为kvm01
:wq! #保存退出
  -A FORWARD -j REJECT --reject-with icmp-host-prohibited COMMIT

:wq! #保存退出

systemctl restart iptables.service #最后重启防火墙使配置生效
systemctl enable iptables.service #设置防火墙开机启动
/usr/libexec/iptables/iptables.init restart #重启防火墙

4、修改主机名

方便区分宿主机和KVM虚拟化,建议修改宿主机的主机名称

hostnamectl set-hostname kvm01 && bash
或者
vi /etc/hostname #编辑配置文件CentOS 7.x
kvm01 #修改localhost.localdomain为kvm01

:wq! #保存退出

vi /etc/hosts #编辑hosts配置文件
127.0.0.1 kvm01 localhost #修改localhost.localdomain为kvm01
:wq! #保存退出

5、启用网络转发,kvm使用nat方式需要开始

vi /etc/sysctl.conf
net.ipv4.ip_forward=1
:wq! #保存退出
sysctl -p /etc/sysctl.conf

6、安装kvm

6.1使用yum安装

yum install virt-*  virt-manager virt-install libvirt  bridge-utils qemu-kvm qemu-kvm-tools qemu-img  libvirt-client libvirt-python libguestfs-tools

#模块说明

kvm:linux内核中的一个模块,不需要安装只要加载就行,通过用户态进程来管理。

qemu:虚拟化软件,支持多种架构,可扩展,可移植

qemu-kvm:用户态管理KVM,网卡、声卡、PCI设备等的管理

libvirt:是一个虚拟化 API 和虚拟机(VMs)管理后台,支持远程或本地访问,支持多种虚拟化后端 (QEMU/KVM, VirtualBox, Xen,等等)

6.2启动kvm服务

systemctl start libvirtd
systemctl stop libvirtd
systemctl restart libvirtd
systemctl status libvirtd.service #查看状态

6.3设置为开机启动

systemctl enable libvirtd 

6.4检查确认载入kvm模块

lsmod | grep kvm
brctl show
[root@kvm01 ~]# lsmod | grep kvm
kvm_intel 188740 0
kvm 637289 1 kvm_intel
irqbypass 13503 1 kvm
[root@kvm01 ~]# brctl show
bridge name bridge id STP enabled interfaces
virbr0 8000.525400dc6621 yes virbr0-nic

6.5创建软连接

ln -s /usr/libexec/qemu-kvm /usr/bin/qemu-kvm

6.6查看版本

virsh --version
virt-install --version
qemu-kvm --version

7、安装vnc服务,通过vnc连接管理kvm虚拟机使用

7.1yum安装

yum install tigervnc-server tigervnc vnc vnc-server
cp /lib/systemd/system/[email protected] /etc/systemd/system/
cp /lib/systemd/system/[email protected] /etc/systemd/system/vncserver@:1.service
vi /etc/systemd/system/vncserver@:1.service
​#ExecStart=/usr/bin/vncserver_wrapper <USER> %i  #注释掉此行,修改为下面这一行
ExecStart=/sbin/runuser -l root -c "/usr/bin/vncserver %i"   #添加
PIDFile=/root/.vnc/%H%i.pid  #添加
:wq! #保存退出
#设置开机启动
systemctl enable vncserver@:1.service

7.2运行tigervnc-serve

vncserver安装

#根据提示输入远程登录的密码

[root@kvm01 ~]# vncserver
You will require a password to access your desktops.
Password:
Verify:
Would you like to enter a view-only password (y/n)? y
Password:
Verify:
xauth: file /root/.Xauthority does not exist
New 'kvm01:1 (root)' desktop is kvm01:1
Creating default startup script /root/.vnc/xstartup
Creating default config /root/.vnc/config
Starting applications specified in /root/.vnc/xstartup
Log file is /root/.vnc/kvm01:1.log

7.3查看vnc开启的桌面

vncserver -list

[root@kvm01 ~]# vncserver -list
TigerVNC server sessions:
X DISPLAY # PROCESS ID
:1 14222
#:1表示VNC端口号是:5901

7.4使用VNC Viewer客户端连接

服务器应该安装桌面系统(GNOME)之后,再通过VNC-Viewer客户端连接控制,否则连接出现蓝屏。

GNOME、KDE都是基于X-Window的桌面环境,必须先安装X-Window才能运行。

#安装X-Window

yum groupinstall "X Window System" #注意有引号 

#安装GNOME桌面

#Graphical Administration Tools包相当于VMware tools,屏幕会自适应
yum groupinstall "GNOME Desktop" "Graphical Administration Tools"
systemctl stop vncserver@:1.service  #停止
systemctl start vncserver@:1.service  #启动

8、配置kvm网络

kvm虚拟机的网络配置有两种模式:桥接模式和NAT模式

8.1两种模式的区别

NAT模式:也是用户模式,数据包由NAT方式通过主机的接口进行传送,可以访问公网,但是无法从外部访问虚拟机网络,所以一般不会用到。

Nat模式配置比较简单,只需要在启动虚拟机后,设置ip地址为dhcp自动获得即可联网,也可以修改ip地址为固定ip,但是宿主机必须启用网络转发。

Bridge:也就是桥接模式,这种模式允许虚拟机像一个独立的主机一样拥有网络,外部的机器可以直接访问到虚拟机内部,但需要网卡支持,一般有线网卡都支持。

CentOS下如果安装了桌面环境,网络会由NetworkManager进行管理,NetworkManager不支持桥接,需要关闭NetworkManger

systemctl stop NetworkManager #停止此服务
chkconfig NetworkManager off
chkconfig network on service
NetworkManager stop service network start

8.2配置网卡为桥接模式Bridge

cd /etc/sysconfig/network-scripts/
cp ifcfg-ens33 ifcfg-br0 # 拷贝当前的网卡文件,并修改名字

修改桥接网卡br0的配置

vi /etc/sysconfig/network-scripts/ifcfg-br0 #修改下面的配置
TYPE=Bridge #将type改为Bridge
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static #修改为static一般设置为静态ip
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=br0 #修改为br0
UUID=62e23b7e-0ab5-42d1-9b21-2b8c389fac19
DEVICE=br0 #修改为br0
ONBOOT=yes
IPADDR=192.168.21.79 #该ip将为宿主机的IP地址
PREFIXO=24
GATEWAY=192.168.21.2
DNS1=8.8.8.8
DNS2=8.8.4.4
:wq! #保存退出

修改ens33网卡配置:

vi /etc/sysconfig/network-scripts/ifcfg-ens33 #修改下面的配置
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none #将这项改为none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
#UUID=62e23b7e-0ab5-42d1-9b21-2b8c389fac19 #注释掉
DEVICE=ens33
ONBOOT=yes
#IPADDR=192.168.21.79 #注释掉
#PREFIXO=24 #注释掉
#GATEWAY=192.168.21.2 #注释掉
#DNS1=8.8.8.8 #注释掉
#DNS2=8.8.4.4 #注释掉
BRIDGE=br0 #添加该行
:wq! #保存退出

重启并生效桥接模式生效

systemctl restart network #重启网络
brctl show #查看桥接信息
ip addr #查看ip

网卡桥接设置生效后查看:

 

[root@kvm01 network-scripts]# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.000c29e4770f no ens33
virbr0 8000.525400dc6621 yes virbr0-nic
[root@kvm01 network-scripts]# systemctl restart network
[root@kvm01 network-scripts]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UP group default qlen 1000
link/ether 00:0c:29:e4:77:0f brd ff:ff:ff:ff:ff:ff
3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
link/ether 52:54:00:dc:66:21 brd ff:ff:ff:ff:ff:ff
inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
valid_lft forever preferred_lft forever
4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN group default qlen 1000
link/ether 52:54:00:dc:66:21 brd ff:ff:ff:ff:ff:ff
5: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 00:0c:29:e4:77:0f brd ff:ff:ff:ff:ff:ff
inet 192.168.21.79/24 brd 192.168.21.255 scope global noprefixroute br0
valid_lft forever preferred_lft forever
inet6 fe80::aad7:fe66:8ef9:5da4/64 scope link noprefixroute
valid_lft forever preferred_lft forever

 

ens33网卡的IP绑定到br0上了,这样网卡就配置完成了。

9、创建kvm虚拟机

9.1创建iso和images存放目录

 

#创建系统镜像iso存放目录
mkdir -p /data/libvirt/iso
#创建kvm虚拟机文件存放目录
mkdir -p /data/libvirt/images
#KVM虚拟机默认image文件存放位置为/var/lib/libvirt/images
#修改为自定义路径/data/libvirt/images
vi /etc/libvirt/storage/default.xml
<path>/data/libvirt/images</path> #修改
:wq! #保存退出
systemctl restart libvirtd #重启服务

 

9.2上传iso镜像文件

上传系统镜像文件到存放目录/data/libvirt/iso

9.3创建kvm虚拟机

#查询kvm支持的操作系统

osinfo-query os

#创建使用vnc连接的kvm虚拟机

#CentOS系统

virt-install --name=testvnc01 --ram=1024 --vcpu=1 --os-type=linux --os-variant=rhel7 --disk path=/data/libvirt/images/testvnc01.img,size=10 --accelerate --location=/data/libvirt/iso/CentOS-7-x86_64-Minimal-2009.iso --vnc --vncport=5910 --vnclisten=0.0.0.0 --network bridge=br0,model=virtio --noautoconsole

#第一次安装完成点Reboot后服务器不会重启,需要在控制台启动

#查看虚拟机

virsh list --all

#启动虚拟机

virsh start testvnc01

#Windows系统

virt-install --name=testwin2k3 --ram=1024 --vcpu=1 --os-type=windows --os-variant=win2k3 --disk path=/data/libvirt/images/testwin2k3.img,size=10 --disk device=cdrom,path=/data/libvirt/iso/windows_server_2003.iso --vnc --vncport=5922 --vnclisten=0.0.0.0 --network bridge=br0,model=virtio --noautoconsole

#KVM下windows使用virtio驱动

KVM下windows虚拟机默认disk使用的是Qemu IDE硬盘,网卡默认是100M网卡。

为了使kvm主机在相同的配置下,有更好的效率,需要命名用半虚拟化将驱动改为为了virtio,使硬盘工作在SCSI模式,网卡为1000M

https://github.com/virtio-win/kvm-guest-drivers-windows

#支持windows server 2003系统

https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/virtio-win-0.1.96/virtio-win-0.1.96.iso

#支持win8以上的系统

https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/virtio-win-0.1.229-1/virtio-win.iso

#下载好virtio镜像文件,上传到宿主机iso存放目录下面

#挂载virtio镜像到虚拟机testwin2k3的虚拟光驱下

virsh attach-disk testwin2k3 /data/libvirt/iso/virtio-win-0.1.96.iso hdb --type cdrom

#新增一块虚拟机磁盘

qemu-img create -f qcow2 /data/libvirt/images/testwin2k3new.img 1G

#动态向虚拟机添加virtio磁盘

virsh attach-disk testwin2k3 --source /data/libvirt/images/testwin2k3new.img --target vdb --targetbus=virtio --persistent --driver qemu --subdriver qcow2

#使用如下命令,为虚拟机testwin2k3添加网卡:

virsh attach-interface testwin2k3 --type bridge --source br0 --model virtio

#其中testwin2k3为要添加网卡的虚拟机,--type为要添加网卡的类型,--source为使用kvm服务器的那个网卡。

#使用挂载的光驱安装硬盘和网卡驱动

#查看kvm虚拟机信息

virsh dumpxml testwin2k3

#关闭虚拟机

virsh shutdown testwin2k3

#编辑虚拟机配置文件

virsh edit testwin2k3
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2' cache='none' io='native'/> #添加修改
<source file='/data/libvirt/images/testwin2k3.img'/>
<target dev='vda' bus='virtio'/> #修改
</disk>
:wq! #保存退出

#其实就是删除<address type='drive' controller='0' bus='0' target='0' unit='0'/>这一行

#在driver name这一行添加cache='none' io='native',把<target dev='hda' bus='ide'/> 修改为<target dev='vda' bus='virtio'/>

#启动kvm虚拟机

virsh start testwin2k3

Windows系统使用的磁盘设备和网卡设备都会替换成virtio,此时网络和磁盘性能将有很大提高,能明显感觉到启动速度变快了。

#同样可以把网卡的配置模式修改为<model type='virtio'/>,将网卡速度提升到1GB

virtio更快的原因:

1、kvm因为使用了硬件虚拟化,所以其cpu方面的运行效率是很高的

2、kvm在I/O虚拟化方面,传统的方式是利用QEMU纯软件的方式来模拟I/O设备

3、每次虚机发起I/O请求的时候,KVM内核模块会捕获这次请求,然后处理后将其放入I/O共享页,并通知用户空间中运行的QEMU程序

3、QEMU获得I/O操作,交由硬件模拟代码(Emulation)来模拟出本次I/O操作之后,将结果放回I/O共享页,同时通知KVM内核模块读取I/O共享页的操作结果,把结果返回给虚机。

4、由于这种方式每次I/O操作经过的路径很复杂,其效率很低。

virtio这种方案:

1、virtio其实就是一个运行于Hypervisor之上的api接口,让客户机知道自己运行于虚拟化环境中

2、进行I/O操作的时候通过virtio与Hypervisor通信,从而使虚机有更好的性能

使用vnc客户端连接虚拟机安装操作系统

9.4KVM管理虚拟机常见操作

#查看所有的虚拟机

virsh list --all

#启动kvm虚拟机

virsh start testwin2k3

#关闭kvm虚拟机

virsh shutdown testwin2k3
virsh destroy testwin2k3 #强制断电

#删除kvm虚拟机

virsh undefine testwin2k3

#查看磁盘信息

virsh domblklist testwin2k3

[root@kvm01 qemu]# virsh domblklist testwin2k3
目标 源
------------------------------------------------
hda /data/libvirt/images/testwin2k3.img
hdb /data/libvirt/iso/windows_server_2003.iso
vdb /data/libvirt/images/testwin2k3new.img

#从虚拟机删除磁盘

virsh detach-disk testwin2k3 /data/libvirt/images/testwin2k3new.img
[root@kvm01 qemu]# virsh detach-disk testwin2k3 /data/libvirt/images/testwin2k3new.img
成功分离磁盘

 #创建快照

virsh snapshot-create-as --domain testwin2k3 --name testwin2k3_snapshot --description "system clear"

已生成域快照 testwin2k3_snapshot

#查看快照信息

virsh snapshot-list testwin2k3

名称 生成时间 状态
------------------------------------------------------------
testwin2k3_snapshot 2023-02-21 11:36:56 +0800 running

 #查看快照详细信息

virsh snapshot-dumpxml --domain testwin2k3 --snapshotname testwin2k3_snapshot

#恢复快照

virsh snapshot-revert testwin2k3 testwin2k3_snapshot

#删除快照

virsh snapshot-delete --domain testwin2k3 --snapshotname testwin2k3_snapshot

已删除域快照 testwin2k3_snapshot

#kvm虚拟机克隆

virsh list --all #查看虚拟机列表
virsh shutdown testvnc01#克隆这台虚拟机前需要关闭
virsh destroy testvnc01 #强制断电
cat /etc/libvirt/qemu/testvnc01.xml #查看虚拟机配置文件

虚拟机磁盘文件: /data/libvirt/images/testvnc01.img

虚拟机名称:testvnc01

#克隆testvnc0生成新的testvnc03

virt-clone -o testvnc01 -n testvnc03 -f /data/libvirt/images/testvnc03.img
-o 被克隆虚拟机
-n 克隆后新的虚拟机
-f 克隆后新虚拟机的磁盘

至此,CentOS-7.x下安装使用KVM虚拟机完成。

文章转载:https://www.osyunwei.com/archives/13299.html

版权声明:
作者:WaterBear
链接:https://l-t.top/2525.html
来源:雷霆运维
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>
文章目录
关闭
目 录