目 录CONTENT

文章目录

KVM虚拟化平台

简中仙
2020-03-12 / 0 评论 / 0 点赞 / 50 阅读 / 0 字 / 正在检测是否收录...
温馨提示:
本文最后更新于2024-03-05,若内容或图片失效,请留言反馈。 本文如有错误或者侵权的地方,欢迎您批评指正!

KVM是Kernel Virtual Machine的简写,目前Linux发行版必须在64位的系统环境才能运行KVM,同时硬件需要支持VT技术。KVM的前身是QEMU,2008年被RedHat公司收购并获得一项hypervisor技术,不过Red Hat的KVM被认为将成为未来Linux hypervisor的主流。准确来说,KVM仅仅是Linux内核的一个模块。

KVM自Linux2.6.20版本后就直接整合到Linux内核,它依托CPU虚拟化指令集(如Intel-VT、AMD-V)实现高性能的虚拟化支持。由于与Linux内核高度整合,因此在性能、安全性、兼容性、稳定性上都有很好的表现。

一、搭建KVM虚拟化平台

1、安装所需软件

# yum groupinstall -y "GNOME Desktop"			# 安装GNOME桌面环境
# yum -y install qemu-kvm qemu-kvm-tools virt-install qemu-img bridge-utils libvirt virt-manager        # yum安装所需软件
# reboot        # 重新启动

2、验证

# cat /proc/cpuinfo | grep vmx        # 查看CPU是否支持虚拟化(Intel的服务器)AMD服务器可用cat  /proc/cpumfo | grep smv命令查看
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 invpcid_single ssbd ibrs ibpb stibp tpr_shadow vnmi ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 invpcid rdseed adx smap clflushopt xsaveopt xsavec arat md_clear spec_ctrl intel_stibp flush_l1d arch_capabilities
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 invpcid_single ssbd ibrs ibpb stibp tpr_shadow vnmi ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 invpcid rdseed adx smap clflushopt xsaveopt xsavec arat md_clear spec_ctrl intel_stibp flush_l1d arch_capabilities
# lsmod | grep kvm        # 检查KVM模块是否安装
kvm_intel             188688  0 
kvm                   636965  1 kvm_intel
irqbypass              13503  1 kvm

3、开启服务

# systemctl start libvirtd        # 开启服务
# systemctl enable libvirtd        # 开机自启动

4、图形化安装KVM虚拟机

# mkdir -p /data_kvm/store /data_kvm/iso        # 创建存储目录,镜像默认存放的路径/var/lib/libvirt/images/
# cd /data_kvm
# ls
iso  store
# cp /media/CentOS-7-x86_64-DVD-1611.iso /data_kvm/iso/        # 把镜像上传到服务器目录/data_kvm/iso
# virt-manager        # 启动virt-manager工具

在这里插入图片描述

1、创建存储池

创建存储池,双击“QEMU/KVM”,选择“存储”选项卡,然后单击“+”按钮新建存储池。单击“前进”按钮,根据提示输入或浏览用以设置存储目录,如/data_kvm/store,最后单击“完成”按钮即可。

在这里插入图片描述

在这里插入图片描述

2、创建镜像存储池

以同样的操作创建一个镜像存储池,命名为"admin_iso",目录为"/data_kvm/iso"即可。在安装操作系统时,我们把镜像上传到服务器目录/data_kvm/iso。

在这里插入图片描述

在这里插入图片描述

3、创建存储卷

创建存储卷,单击刚创建好的“admin”,单击窗口中“卷”右边的“+”按钮建立一个存储卷,并设置最大容量。

在这里插入图片描述

4、新建虚拟机

单击“完成”按钮后,回到虚拟系统管理器。右击“QEMU/KVM”,然后选择“新建虚拟机”选项,在弹出的对话框中选择“本地安装介质”,然后单击“前进”按钮。单击“浏览按钮选择镜像文件,再选择操作系统型及版本。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

单击“前进”按钮,在对话框中适当分配内存和CPU资源,如1核CPU、1GB内存。

在这里插入图片描述

在这里插入图片描述

在“引导选项”视图中勾选“主机引导时启动虚拟机”复选框,这样在物理宿主机启动后,这个VM也会启动,最后单击应用”按钮。

在这里插入图片描述

单击“开始安装”按钮即可,整个虚拟化配置过程完成。下面就是安装操作系统的工作,和平时安装Linux系统一样。

在这里插入图片描述

5、使用命令安装 KVM 虚拟机

1、使用 virt-install 安装

第一种方法

# virt-install --os-type=linux --os-variant centos7.0 --name test01 --ram 1024 --vcpus 1 --disk=/kvm_vm/test01.raw,format=raw,size=10 --location /iso/CentOS-7-x86_64-DVD-1810.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole

第二种方法

# yum -y install tigervnc virt-viewer virt-v2v
# systemctl start libvirtd
# virt-install --name centos-72 --ram 1024 --vcpus=1 --disk path=/var/lib/libvirt/images/centos-72.img,size=5 --accelerate --cdrom /data_kvm/iso/CentOS-7-x86_64-DVD-1611.iso --network bridge=br0 --graphics vnc
# vncviewer 127.0.0.1        # 测试远程连接
参数说明
--name指定 Guest 名字
--ram指定内存大小
--vcpus指定虚拟机的 CPU 数量
--disk指定虚拟机磁盘存储文件的路径
size=5指定虚拟磁盘的大小,单位是 G
--accelerateKVM或KQEMU内核加速器
--cdrom指定用于全虚拟化 Guest 的虚拟光驱,后指定ISO或 CDROM 镜像
--network指定虚拟机的网卡模式
-x提供额外的内核命令行参数

2、使用 ks 文件,无交互字符界面安装

# yum -y install httpd
# systemctl start httpd
# mkdir /var/www/html/centos7/
# mount /data_kvm/iso/CentOS-7-x86_64-DVD-1611.iso /var/www/html/centos7/

在这里插入图片描述

# cd /var/www/html/
# vim ks.cfg
#platform=x86, AMD64, 或 Intel EM64T
#version=DEVEL
# Install OS instead of upgrade
install
# Keyboard layouts
keyboard 'us'
# Root password
rootpw --iscrypted $1$R3WeI8np$p87QNYBUo5P6Ab5lEBd4q1
# Use network installation
url --url="http://192.168.1.10/centos7"
# System language
lang zh_CN
# Firewall configuration
firewall --disabled
# System authorization information
auth  --useshadow  --passalgo=sha512
# Use graphical install
graphical
firstboot --disable
# SELinux configuration
selinux --disabled

# Network information
network  --bootproto=dhcp --device=ethO --onboot=on
# Reboot after installation
reboot
# System timezone
timezone Asia/Shanghai
# System bootloader configuration
bootloader --location=none
# Partition clearing information
clearpart --all
# Disk partitioning information
part /boot --fstype="xfs" --size=500
part /home --fstype="xfs" --size=4096
part swap --fstype="swap" --size=2048
part / --fstype="xfs" --grow --size=1

%post --interpreter=/bin/bash
rm -rf /etc/yum.repo.d/*
cat >> /etc/yum.repo.d/yum.repo << EOF
[centos7]
name=centos7
baseurl=http://192.168.1.10/centos7
gpgcheck=0
EOF
%end

%packages
@development
@gnome-desktop

%end
# virt-install --name centos7.32 --ram 1024 --vcpus=1 --disk path=/data_kvm/store/centos-7.32.qcow2,size=13 --accelerate --location=http://192.168.1.10/centos7/ --network bridge=br0 -x "ks=http://192.168.1.10/ks.cfg"

二、KVM基本管理

1、查看虚拟机

# ls /etc/libvirt/qemu        # 查KVM的配置文件存放目录
autostart  centos7.0.xml  networks
# virsh list --all        # 查看虚拟机列表
 Id    名称                         状态
----------------------------------------------------
 2     centos7.0                      running
# virsh dominfo centos7.0         # 查看虚拟机详细信息域
Id:             -
名称:       centos7.0
UUID:           47bf2df1-2085-4d7d-acc2-15e9c2f09e92
OS 类型:    hvm
状态:       关闭
CPU:          1
最大内存: 1048576 KiB
使用的内存: 1048576 KiB
持久:       是
自动启动: 禁用
管理的保存: 否
安全性模式: none
安全性 DOI: 0

2、虚拟机域的开关机

# virsh start centos7.0        # 启动虚拟机
域 centos7.0 已开始
 # virsh shutdown centos7.0        # 关闭虚拟机
域 centos7.0 被关闭
# virsh destroy centos7.0        # 强制实例系统关闭电源
域 centos7.0 被删除

3、导出配置(备份)

# virsh dumpxml centos7.0 > /etc/libvirt/qemu/centos7.2.xml        # 导出虚拟机配置
# virsh define centos7.0.xml 
定义域 centos7.0(从 centos7.0.xml)
# virsh create /etc/libvirt/qemu/centos7.0.xml        # 通过配置文件启动虚拟机系统实例
域 centos7.0 被创建(从 /etc/libvirt/qemu/centos7.0.xml)

4、删除虚拟机

# virsh undefine centos7.0         # 删除虚拟机
域 centos7.0 已经被取消定义

5、修改配置文件

# vim /etc/libvirt/qemu/centos7.0.xml        # 通过vim命令修改
# virsh edit centos7.0        # 通过virsh命令修改
# virsh domrename centos7.0 centos7.2        # 虚拟机的重命名(7.2以上)

6、查看虚拟机对应的VNC端口(已安装VNC服务)

# virsh vncdisplay centos7.0
:0        # 默认不加端口,指定的也是:0,也就是5900

7、挂起虚拟机

# virsh suspend centos7.0        # 挂起虚拟机
域 centos7.0 被挂起
# virsh resume centos7.0        # 恢复虚拟机
域 centos7.0 被重新恢复

8、开机自启

# virsh autostart centos7.0        # 配置虚拟机实例伴随宿主机自动启动
域 centos7.0标记为自动开始
# virsh autostart --disable centos7.0        # 取消开机自启

注意:如果kvm虚拟机在另一块磁盘上,记得设置开机自动挂载 sdb1,不然后开机启动不了虚拟机

# vim /etc/fstab
/dev/sdb1       /data_kvm     xfs        defaults   0   0

三、KVM磁盘管理

磁盘格式说明
RAW裸格式。占用空间较大,性能较好,但不支持虚拟机快照功能
QCOW2(copy on write) 写时复制。占用空间较小,支持快照,性能比RAW稍差一些

1、磁盘格式

# qemu-img info /data_kvm/store/admin.kvm       # 查看磁盘信息
image: /data_kvm/store/admin.kvm
file format: qcow2
virtual size: 8.0G (8589934592 bytes)
disk size: 1.6G
cluster_size: 65536
Format specific information:
    compat: 1.1
    lazy refcounts: true
# qemu-img create /kvm_vm/123.raw 5G       # 创建磁盘(默认是裸格式)
# qemu-img create -f qcow2 /kvm_vm/456.qcow2 5G       # 创建指定格式磁盘
# qemu-img convert -f raw -O qcow2 /kvm_vm/123.raw /kvm_vm/123.qcow2       # 转换磁盘格式

2、快照管理

# virsh snapshot-create centos7.0        # 创建快照
已生成域快照 1596527654
# virsh snapshot-current centos7.0        # 查看虚拟机快照版本信息
<domainsnapshot>
  <name>1596527654</name>
  <state>shutoff</state>
  <creationTime>1596527654</creationTime>
  <memory snapshot='no'/>
# virsh snapshot-list centos7.0        # 查看快照信息
 名称               生成时间              状态
------------------------------------------------------------
 1596527654           2020-08-04 15:54:14 +0800 shutoff
# virsh snapshot-revert centos7.0 1596527654        # 恢复虚拟机状态
# virsh snapshot-delete centos7.0 1596527654        # 删除快照
已删除域快照 1596527654

四、虚拟机域的克隆

1、自动克隆(完整克隆)

# virt-clone --auto-clone -o centos7.0 -n centos7.3
正在分配 'centos7.3.qcow2'                              | 8.0 GB  00:06     

成功克隆 'centos7.3'。

2、手动克隆(完整克隆)

# cd /etc/libvirt/qemu/
# cp test01.xml test02.xml        # 复制xml配置文件
# cp centos.raw test02.raw        # 复制磁盘文件
# vim test02.xml 
<domain type='kvm'>
  <name>test02</name>        # 更改name字段,删除UUID
  <memory unit='KiB'>1048576</memory>
......
  <devices>
    <emulator>/usr/libexec/qemu-kvm</emulator>
    <disk type='file' device='disk'>
      <driver name='qemu' type='raw'/>
      <source file='/kvm_vm/test02.raw'/>        # 修改磁盘路径以及名称
......
    </controller>
    <interface type='network'>        # 删除mac addres
      <source network='default'/>
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
# virsh define test02.xml        # 重新生成一个虚拟机

3、链接克隆

做一个链接的磁盘,然后第二个新的虚拟机更改xml配置文件,磁盘信息指定新的链接磁盘。

# qemu-img create -f qcow2 -b centos.raw test02.qcow2

五、设置KVM网络

模式说明
用户模式即NAT方式,这种方式是默认网络,数据包由NAT方式通过主机的接口进行传送,可以访问外网,但是无法从外部访问虚拟机网络
桥接模式这种模式允许虚拟机像一台独立的主机一样拥有网络,外部的机器可以直接访冋到虚拟机内部,但需要网卡支持,一般有线网卡都支持

1、NAT模式

1、外部主机设置

# echo net.ipv4.ip_forward = 1 >>/etc/sysctl.conf
# sysctl -p
net.ipv4.ip_forward = 1

2、KVM主机设置

# vi /etc/sysconfig/network-scripts/ifcfg-eth0
......
ONBOOT=yes

2、桥接模式

1、外部主机设置

# systemctl stop NetworkManager
# virsh iface-bridge ens33 br0
使用附加设备 br0 生成桥接 ens33 失败
已启动桥接接口 br0
# brctl show
bridge name	bridge id		STP enabled	interfaces
br0		8000.000c29b7e3d0	yes		ens33
virbr0		8000.525400de1f59	yes		virbr0-nic
							vnet0
# virsh edit test02 
    </controller>
    <interface type='bridge'>
      <mac address='52:54:00:71:a8:7a'/>
      <source bridge='br0'/>
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
# virsh start test02
域 test02 已开始
# curl 192.168.1.128:80
www.baidu.com

2、KVM主机设置

# ip a
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: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 52:54:00:71:a8:7a brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.128/24 brd 192.168.1.255 scope global noprefixroute dynamic eth0
       valid_lft 1715sec preferred_lft 1715sec
    inet6 fe80::1fb8:58e9:31e7:30e8/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
# yum -y install nginx
# systemctl start nginx
# echo "www.baidu.com" > /usr/share/nginx/html/index.html

六、KVM虚拟机的迁移

主机IP地址主机名
原主机192.168.1.10kvm01
待迁移主机192.168.1.20kvm02
nfs服务器192.168.1.30nfs

1、冷迁移(静态迁移)

前提是待迁移虚拟机需要关机

# scp /etc/libvirt/qemu/test01.xml
192.168.1.20:/etc/libvirt/qemu/
# scp /kvm-vm/centos.raw 192.168.1.20:/kvm-vm/

2、热迁移(动态迁移)

1、创建共享磁盘并挂载

# mkdir /kvmshare
# vim /etc/exports
/kvmshare *(rw,sync,no_root_squash)
# systemctl start nfs
# systemctl enable nfs
Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.
# systemctl start rpcbind
# systemctl enable rpcbind
# mkdir /kvm-share
# chmod -R 777 /kvm-share/
# mount -t nfs 192.168.1.30:/kvmshare /kvm-share/
# mkdir /kvm-share
# chmod -R 777 /kvm-share/
# mount -t nfs 192.168.1.30:/kvmshare /kvm-share/

在这里插入图片描述

在这里插入图片描述

2、在共享磁盘上安装系统

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3、设置桥接网络

# systemctl stop NetworkManager
# virsh iface-bridge ens33 br0
使用附加设备 br0 生成桥接 ens33 失败
已启动桥接接口 br0
# virsh edit test02
    </controller>
    <interface type='bridge'>
      <mac address='52:54:00:71:a8:7a'/>
      <source bridge='br0'/>
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
编辑了域 test02 XML 配置。
# virsh start test02
域 test02 已开始
# yum -y install openssh-askpass
# systemctl stop NetworkManager
# virsh iface-bridge ens33 br0
Created bridge br0 with attached device ens33
Bridge interface br0 started

4、迁移虚拟机

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

0

评论区