技术交流QQ群:①185473046   ②190706903   ③203744115   网站地图
登录

下次自动登录
现在的位置: 首页KVM>正文
CentOS-7.x下安装使用KVM虚拟机
2023年02月24日 KVM 暂无评论 ⁄ 被围观 5,000次+

KVM虚拟机简介:

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

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

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

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

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

setenforce 0

3、防火墙设置

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

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

3.1、关闭firewall:

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

-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

vi /etc/hostname #编辑配置文件CentOS 7.x

kvm01 #修改localhost.localdomain为kvm01

:wq! #保存退出

vi /etc/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/vncserver@.service /etc/systemd/system/

cp /lib/systemd/system/vncserver@.service /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

[root@kvm01 ~]#

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客户端连接

下载地址:

https://www.realvnc.com/en/connect/download/viewer/

https://files02.tchspt.com/temp/VNC-Viewer-7.0.1-Windows-64bit.exe

服务器应该安装桌面系统(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 # 拷贝当前的网卡文件,并修改名字

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! #保存退出

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客户端连接虚拟机安装操作系统

#查看所有的虚拟机

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虚拟机完成。

     

  系统运维技术交流QQ群:①185473046 系统运维技术交流□Ⅰ ②190706903 系统运维技术交流™Ⅱ ③203744115 系统运维技术交流™Ⅲ

给我留言

您必须 [ 登录 ] 才能发表留言!



Copyright© 2011-2024 系统运维 All rights reserved
版权声明:本站所有文章均为作者原创内容,如需转载,请注明出处及原文链接
陕ICP备11001040号-3