KVM虛擬化架構
•KVM模塊直接整合在Linux內核中
KVM的組成
KVM Driver
•虛擬機創建
•虛擬機內存分配
•虛擬機CPU寄存器讀寫
•虛擬CPU運行
QEMU(經過簡化與修改)
•模擬PC硬件的用戶控件組件
•提供I/O設備模型及訪問外設的途徑
KVM虛擬化三種模式
•客戶模式: 虛擬機
•用戶設置: 設置
•內核模式: KVM Driver 內核態
KVM工作原理
實驗操作
1、在虛擬機開機前,先在虛擬機上添加一個硬盤,並將硬盤格式化,並掛載到/data/目錄下
開啓虛擬機的虛擬化
[root@localhost ~]# fdisk -l
磁盤 /dev/sdb:107.4 GB, 107374182400 字節,209715200 個扇區
Units = 扇區 of 1 * 512 = 512 bytes
扇區大小(邏輯/物理):512 字節 / 512 字節
I/O 大小(最小/最佳):512 字節 / 512 字節
磁盤 /dev/sda:42.9 GB, 42949672960 字節,83886080 個扇區
Units = 扇區 of 1 * 512 = 512 bytes
扇區大小(邏輯/物理):512 字節 / 512 字節
I/O 大小(最小/最佳):512 字節 / 512 字節
磁盤標籤類型:dos
磁盤標識符:0x000be35b
設備 Boot Start End Blocks Id System
/dev/sda1 * 2048 12584959 6291456 83 Linux
/dev/sda2 12584960 54527999 20971520 83 Linux
/dev/sda3 54528000 62916607 4194304 82 Linux swap / Solaris
/dev/sda4 62916608 83886079 10484736 5 Extended
/dev/sda5 62918656 83886079 10483712 83 Linux
[root@localhost ~]# fdisk /dev/sdb
歡迎使用 fdisk (util-linux 2.23.2)。
更改將停留在內存中,直到您決定將更改寫入磁盤。
使用寫入命令前請三思。
Device does not contain a recognized partition table
使用磁盤標識符 0xc2432934 創建新的 DOS 磁盤標籤。
命令(輸入 m 獲取幫助):n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
分區號 (1-4,默認 1):
起始 扇區 (2048-209715199,默認爲 2048):
將使用默認值 2048
Last 扇區, +扇區 or +size{K,M,G} (2048-209715199,默認爲 209715199):
將使用默認值 209715199
分區 1 已設置爲 Linux 類型,大小設爲 100 GiB
命令(輸入 m 獲取幫助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盤。
[root@localhost ~]#
[root@localhost ~]# mkfs /dev/sdb1
mke2fs 1.42.9 (28-Dec-2013)
文件系統標籤=
OS type: Linux
塊大小=4096 (log=2)
分塊大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
6553600 inodes, 26214144 blocks
1310707 blocks (5.00%) reserved for the super user
第一個數據塊=0
Maximum filesystem blocks=4294967296
800 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872
Allocating group tables: 完成
正在寫入inode表: 完成
Writing superblocks and filesystem accounting information: 完成
[root@localhost ~]# mkdir /data
[root@localhost ~]# mount /dev/sdb1 /data/
[root@localhost ~]# df -hT
文件系統 類型 容量 已用 可用 已用% 掛載點
/dev/sda2 xfs 20G 3.3G 17G 17% /
devtmpfs devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs tmpfs 1.9G 9.0M 1.9G 1% /run
tmpfs tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/sda5 xfs 10G 37M 10G 1% /home
/dev/sda1 xfs 6.0G 174M 5.9G 3% /boot
tmpfs tmpfs 378M 12K 378M 1% /run/user/42
tmpfs tmpfs 378M 0 378M 0% /run/user/0
/dev/sdb1 ext2 99G 60M 94G 1% /data
[root@localhost ~]#
2、在宿主機共享所需鏡像,並掛載到虛擬機上
[root@localhost ~]# mount.cifs //192.168.100.100/tools /mnt/
Password for root@//192.168.100.100/tools:
[root@localhost ~]#
3、配置KVM必須環境包
[root@localhost ~]# yum groupinstall "GNOME Desktop" -y ##安裝桌面環境
[root@localhost ~]# yum install qemu-kvm -y ##KVM模塊
[root@localhost ~]# yum install qemu-kvm-tools -y ##KVM調試工具
[root@localhost ~]# yum install virt-install -y ##構建虛擬機的命令行工具
[root@localhost ~]# yum install qemu-img -y ##qemu組件,創建磁盤,啓動虛擬機
[root@localhost ~]# yum install bridge-utils -y ##網絡支持工具
[root@localhost ~]# yum install libvirt -y ##虛擬機管理工具
[root@localhost ~]# yum install virt-manager -y ##圖像化管理虛擬機
4、判斷cpu是否支持虛擬化。並查看虛擬機模塊
[root@localhost ~]# lsmod | grep kvm
kvm_intel 170086 0
kvm 566340 1 kvm_intel
irqbypass 13503 1 kvm
[root@localhost ~]#
cat /proc/cpuinfo | grep svm ##AMD服務器可用
cat /proc/cpuinfo | grep vmx ##inter服務器可用
egrep '(vmx|svm)' /proc/cpuinfo ##兩者都可用
5、開啓服務,並設置開機自啓動
#開啓服務
[root@localhost ~]# systemctl start libvirtd
#開機自啓動
[root@localhost ~]# systemctl enable libvirtd
6、將所需鏡像,將掛載的軟件包移動到/data/目錄下
[root@localhost ~]# cd /data/
#創建兩個文件
[root@localhost data]# mkdir vdisk viso
#複製並調到後臺運行
[root@localhost data]# cp -r /mnt/CentOS-7-x86_64-DVD-1708.iso /data/viso &
[1] 29318
[root@localhost data]#
[1]+ 完成 cp -i -r /mnt/CentOS-7-x86_64-DVD-1708.iso /data/viso
[root@localhost data]# ls viso/
CentOS-7-x86_64-DVD-1708.iso
[root@localhost data]#
7、配置虛擬機的橋接網卡
#進入網卡文件
[root@localhost data]# cd /etc/sysconfig/network-scripts/
#複製創建br0網卡
[root@localhost network-scripts]# cp -p ifcfg-ens33 ifcfg-br0
#進入ens33網卡,設置橋接命令
[root@localhost network-scripts]# vim ifcfg-ens33
##末行添加
#橋接命令
BRIDGE=br0
#配置橋接網卡,將橋接網卡設置爲靜態的地址
[root@localhost network-scripts]# vim ifcfg-br0
TYPE=bridge
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
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
DEVICE=br0
ONBOOT=yes
IPADDR=192.168.52.134
NETMASK=255.255.255.0
GATEWAY=192.168.52.1
[root@localhost network-scripts]# systemctl restart network ##重啓網卡
[root@localhost network-scripts]# ifconfig ##查看網卡信息
br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.52.134 netmask 255.255.255.0 broadcast 192.168.52.255
inet6 fe80::69d9:68eb:e59e:c66f prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:eb:34:07 txqueuelen 1000 (Ethernet)
RX packets 14 bytes 1274 (1.2 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 29 bytes 4473 (4.3 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
ether 00:0c:29:eb:34:07 txqueuelen 1000 (Ethernet)
RX packets 3356082 bytes 4925169168 (4.5 GiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 227829 bytes 18565675 (17.7 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
8、進入圖形化管理界面
[root@localhost ~]# virt-manager