虛擬化(KVM)


虛擬化

虛擬化,是指通過虛擬化技術將一台計算機虛擬為多台邏輯計算機。在一台計算機上同時運行多個邏輯計算機,每個邏輯計算機可運行不同的操作系統,並且應用程序都可以在相互獨立的空間內運行而互不影響,從而顯著提高計算機的工作效率

虛擬化使用軟件的方法重新定義划分IT資源,可以實現IT資源的動態分配、靈活調度、跨域共享,提高IT資源利用率,使IT資源能夠真正成為社會基礎設施,服務於各行各業中靈活多變的應用需求。

虛擬化分類

虛擬化技術可分為:全虛擬化和半虛擬化。

  • 全虛擬化:最流行的虛擬化方法使用名為Hypervisor的一種軟件,在虛擬服務器和底層硬件之間建立一個抽象層。VMware和微軟的VirtualPC是代表該方法的兩個商用產品,而基於核心的虛擬機(KVM)是面向Linux系統的開源產品。Hypervisor可以捕獲CPU指令,為指令訪問硬件控制器和外設充當中介。因而,完全虛擬化技術幾乎能讓任何一款操作系統不用改動就能安裝到虛擬服務器上,而它們不知道自己運行在虛擬化環境下。主要缺點是,Hypervisor 給處理器帶來的負荷會很大。
  • 半虛擬化:完全虛擬化是處理器密集型技術,因為它要求Hypervisor管理各個虛擬服務器,並讓它們彼此獨立。減輕這種負擔的一種方法就是,改動客戶端操作系統,讓它以為自己運行在虛擬環境下,能夠與Hypervisor 協同工作。這種方法就叫准虛擬化(para-virtualization)Xen。它是開源准虛擬化技術的一個例子。操作系統作為虛擬服務器在Xen hypervisor上運行之前,它必須在核心層面進行某些改變。因此,Xen適用於BSD、Linux、Solaris及其他開源操作系統,但不適合像Windows這些專有的操作系統進行虛擬化處理,因為它們無法改動。准虛擬化技術的優點是性能高,經過准虛擬化處理的服務器可與Hypervisor協同工作,其響應能力幾乎不亞於未經過虛擬化處理的服務器。准虛擬化與完全虛擬化相比優點明顯,以至於微軟和VMware都在開發這項技術,以完善各自的產品。

虛擬化架構

Hypervisor直接安裝在物理機上,多個虛擬機在 Hypervisor 上運行。Hypervisor 實現方式一般是一個特殊定制的Linux系統。Xen和VMWare的ESXi 都屬於這個類型。(Type-I型)

物理機上首先安裝常規的操作系統,比如 RedHat、Ubuntu和Windows。Hypervisor作為OS上的一個程序模塊運行,並對管理虛擬機進行管理。KVM、VirtualBox和 VMWare Workstation 都屬於這個類型。(Type-II型)

KVM

KVM(Kernel-Based Virtual Machines)是一個基於Linux內核的虛擬化技術, 可以直接將Linux內核轉換為Hypervisor(系統管理程序)從而使得Linux內核能夠直接管理虛擬機, 直接調用Linux內核中的內存管理、進程管理子系統來管理虛擬機。KVM的虛擬化需要硬件支持(如Intel VT技術或者AMD V技術)。是基於硬件的完全虛擬化。

KVM架構

KVM的安裝搭建

基礎環境

​ Centos7-1804系統,內存至少設置成2 GB,在“硬件”選項卡中單擊“處理器”, 勾選虛擬化引擎,並且添加一塊50G大小的新硬盤

檢查cpu參數

啟動虛擬機,查看以下內容

[root@kvm ~]#  grep -Ei 'vmx|svm' /proc/cpuinfo
//vmx為英特爾的cpu;svm為AMD的cpu。
flags		: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm constant_tsc rep_good nopl tsc_reliable nonstop_tsc eagerfpu pni pclmulqdq ssse3 fma cx16 sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm svm extapic cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw arat npt svm_lock nrip_save vmcb_clean flushbyasid decodeassists fsgsbase bmi1 avx2 smep bmi2 rdseed adx smap clflushopt xsaveopt xsavec xsaves
flags		: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm constant_tsc rep_good nopl tsc_reliable nonstop_tsc eagerfpu pni pclmulqdq ssse3 fma cx16 sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm svm extapic cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw arat npt svm_lock nrip_save vmcb_clean flushbyasid decodeassists fsgsbase bmi1 avx2 smep bmi2 rdseed adx smap clflushopt xsaveopt xsavec xsaves
掛載新硬盤
[root@kvm ~]# lsblk 
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   20G  0 disk 
├─sda1            8:1    0  500M  0 part /boot
└─sda2            8:2    0 19.5G  0 part 
  ├─centos-root 253:0    0 17.5G  0 lvm  /
  └─centos-swap 253:1    0    2G  0 lvm  [SWAP]
sdb               8:16   0   50G  0 disk
sr0              11:0    1    4G  0 rom  
[root@kvm~]# mkfs.ext4 /dev/sdb
······
Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done   //格式化完成
[root@kvm ~]# blkid /dev/sdb   //查看磁盤信息
/dev/sdb: UUID="68535868-50f7-44a7-b180-504efe67298a" TYPE="ext4" 
[root@kvm ~]# mkdir /kvm_data     //創建掛載目錄
[root@kvm ~]# mount /dev/sdb /kvm_data/      //進行掛載
[root@tomcat ~]# cat /etc/fstab       //編輯自動掛載文件,啟動自動掛載
#
# /etc/fstab
# Created by anaconda on Wed Sep 29 07:20:13 2021
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root /                       xfs     defaults        0 0
UUID=581fc9d2-b7c9-41e3-9ab2-17996ea601fa /boot                   xfs     defaults        0 0
/dev/mapper/centos-swap swap                    swap    defaults        0 0
/dev/sdb     /kvm_data                          ext4    defaults        0 0
關閉Selinux和防火牆
[root@kvm ~]# systemctl stop firewalld &&systemctl disable firewalld
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
Removed symlink /etc/systemd/system/basic.target.wants/firewalld.service.
[root@kvm ~]# setenforce 0
[root@kvm ~]# cat /etc/selinux/config    //關閉selinux
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled 
//修改這一位置的內容
# SELINUXTYPE= can take one of three two values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected. 
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted
[root@kvm ~]# getenforce 
Disabled
安裝KVM
[root@kvm ~]# yum install -y  virt-*  libvirt  bridge-utils qemu-img
創建橋接網卡
[root@kvm ~]# cd /etc/sysconfig/network-scripts/
[root@kvm network-scripts]# cp ifcfg-eno16777736 ifcfg-br0
//配置文件名稱根據網卡命名規則命名,ip a可以查看

修改橋接網卡ifcfg-br0的內容,命令如下:

[root@kvm network-scripts]# cat ifcfg-br0 
TYPE=Bridge
BOOTPROTO=none
NAME=br0
DEVICE=br0
ONBOOT=yes
IPADDR=192.168.200.10
NETMASK=255.255.255.0
GATEWAY=192.168.200.2
DNS1=114.114.114.114
DNS2=8.8.8.8
[root@kvm network-scripts]# cat ifcfg-eno16777736
TYPE=Ethernet
BOOTPROTO=none
NAME=eno16777736
DEVICE=eno16777736
ONBOOT=yes
BRIDGE=br0
[root@kvm network-scripts]# service network restart    //重啟網絡服務
啟動libvirtd服務

檢查kvm模塊是否加載:

[root@tomcat ~]# lsmod | grep kvm
kvm_amd                65035  0 
kvm                   525259  1 kvm_amd

啟動libvirtd並檢查是否成功啟動:

[root@tomcat ~]# ps -ef |grep libvirt
root       1200      1  0 19:04 ?        00:00:00 /usr/sbin/libvirtd
nobody     1634      1  0 19:04 ?        00:00:00 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/libexec/libvirt_leaseshelper
root       1635   1634  0 19:04 ?        00:00:00 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/libexec/libvirt_leaseshelper
root       1917   1719  0 19:21 pts/0    00:00:00 grep --color=auto libvirt
[root@kvm ~]# brctl show      //查看兩塊網卡
bridge name	bridge id		STP enabled	interfaces
br0		8000.000c29cb607e	no		eno16777736
virbr0		8000.000000000000	yes		
KVM安裝Centos7虛擬機

上傳Centos7-1804鏡像到/tmp下:

[root@tomcat ~]# ll /tmp/
total 4365316
-rw-r--r--. 1 qemu qemu 4470079488 Sep  2 22:17 CentOS-7-x86_64-DVD-1804.iso

使用virt-install進行CentOS 7的安裝:

[root@tomcat ~]# virt-install --name=test --memory=512,maxmemory=1024 --vcpus=1,maxvcpus=2 --os-type=linux --os-variant=rhel7 --location=/tmp/CentOS-7-x86_64-DVD-1804.iso --disk path=/kvm_data/test.img,size=10 --bridge=br0 --graphics=none --console=pty,target_type=serial --extra-args="console=tty0 console=ttyS0"

命令解釋:

  • --name:指定虛擬機的名稱。
  • --memory:指定分配給虛擬機的內存資源大小。
  • maxmemory:指定可調節的最大內存資源大小,因為KVM支持熱調整虛擬機的資源。
  • --vcpus:指定分配給虛擬機的CPU核心數量。
  • maxvcpus:指定可調節的最大CPU核心數量。
  • --os-type:指定虛擬機安裝的操作系統類型。
  • --os-variant:指定系統的發行版本。
  • --location:指定ISO鏡像文件所在的路徑,支持使用網絡資源路徑,也就是說可以使用URL。
  • --disk path:指定虛擬硬盤所存放的路徑及名稱,size則是指定該硬盤的可用大小,單位是G。
  • --bridge:指定使用哪一個橋接網卡,也就是說使用橋接的網絡模式。
  • --graphics:指定是否開啟圖形。
  • --console:定義終端的屬性,target_type 則是定義終端的類型。
  • --extra-args:定義終端額外的參數。

配置虛擬機基礎設置,帶[!]基本都是需要配置的

Starting installer, one moment...
anaconda 21.48.22.134-1 for CentOS 7 started.
 * installation log files are stored in /tmp during the installation
 * shell is available on TTY2
 * when reporting a bug add logs from /tmp as separate text/plain attachments
23:30:35 Not asking for VNC because we don't have a network
================================================================================
================================================================================
Installation

 1) [x] Language settings                 2) [!] Time settings
        (English (United States))                (Timezone is not set.)
 3) [!] Installation source               4) [!] Software selection
        (Processing...)                          (Processing...)
 5) [!] Installation Destination          6) [x] Kdump
        (No disks selected)                      (Kdump is enabled)
 7) [ ] Network configuration             8) [!] Root password
        (Not connected)                          (Password is not set.)
 9) [!] User creation
        (No user will be created)
  Please make your choice from above ['q' to quit | 'b' to begin installation |
  'r' to refresh]: 

配置2和5還有8就可以開始輸入b開始安裝虛擬機了,安裝成功后輸入root和設置的密碼進入

    Installation complete.  Press return to quit 
//按回車
……………………
CentOS Linux 7 (Core)
Kernel 3.10.0-327.el7.x86_64 on an x86_64
localhost login: root
Password: 123456
[root@localhost ~]# 
//按“Ctrl+]”鍵,退出終端,回到宿主機。
[root@kvm ~]# 

KVM基本管理

常用命令

查看虛擬機列表,只能看到正在運行的虛擬機:

[root@kvm ~]# virsh list
 Id    Name                           State
----------------------------------------------------
 2     test                           running

進入指定的虛擬機:

[root@kvm ~]# virsh console test
Connected to domain test
Escape character is ^]
//如果遲遲未動敲下回車就ok,下面就是正常登錄時需要輸入的用戶名密碼
CentOS Linux 7 (Core)
Kernel 3.10.0-327.el7.x86_64 on an x86_64

localhost login: 
//如果報錯error: operation failed: Active console session exists for this domain,將進程kill再進入

其他常用命令:

virsh shutdown test 
//關閉虛擬機
virsh start test 
//開啟虛擬機
virsh destroy test
//類似stop,這個是強制停止
virsh undefine test
//徹底銷毀虛擬機,會刪除虛擬機配置文件,virsh list --all就看不到
virsh autostart test
//宿主機開機該虛擬機也開機
virsh autostart --disable test
//解除開機啟動
virsh suspend test
//掛起
virsh resume test
//恢復
克隆虛擬機

克隆虛擬機之前,要關閉虛擬機

[root@kvm ~]# virt-clone  --original test --name test02 --file /kvm_data/test02.img
Allocating 'test02.img'                        3% 
[=                    ]  20 MB/s | 365 MB  00:08:23 ETA
//開始克隆
[root@kvm ~]# virt-clone  --original test --name test02 --file 
/kvm_data/test02.img
Allocating 	'test02.img'         |  10 GB  00:00:35     
Clone 'test02' created successfully.    //克隆完成且成功
  • --original:指定克隆源虛擬機。
  • --name:指定克隆后的虛擬機名字。
  • --file:指定目標虛擬機的虛擬磁盤文件。

查看虛擬機配置文件/etc/libvirt/qemu/,看是否增加test02.xml文件:

[root@kvm ~]# ls /etc/libvirt/qemu/
networks  test02.xml  test.xml

啟動克隆的虛擬機:

[root@kvm ~]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 -     test                           shut off
 -     test02                         shut off

[root@kvm ~]# virsh start test02
Domain test02 started
快照管理

創建快照:

[root@kvm ~]# virsh snapshot-create test
Domain snapshot 1634514681 created

查看test.img信息,同時會查看到快照列表:

[root@kvm ~]# qemu-img info /kvm_data/test.img 
image: /kvm_data/test.img
file format: qcow2
virtual size: 10G (10737418240 bytes)
disk size: 1.3G
cluster_size: 65536
Snapshot list:
ID        TAG                 VM SIZE                DATE       VM CLOCK
1         1634514681                0 2021-10-17 19:51:21   00:00:00.000
Format specific information:
    compat: 1.1
    lazy refcounts: true

列出所有快照:

[root@kvm ~]# virsh snapshot-list test
 Name                 Creation Time             State
------------------------------------------------------------
 1634514681           2021-10-17 19:51:21 -0400 shutoff

查看所有快照配置文件:

[root@kvm ~]# ls /var/lib/libvirt/qemu/snapshot/test/
1634514681.xml

恢復指定快照:

[root@kvm ~]# virsh snapshot-revert test 1634514681

刪除指定快照:

[root@kvm ~]# virsh snapshot-delete test 1634514681
Domain snapshot 1634514681 deleted
遷移虛擬機

首先關閉虛擬機:

[root@kvm ~]# virsh shutdown test
Domain test is being shutdown

查看虛擬機磁盤所在目錄:

[root@tomcat ~]# virsh domblklist test
Target     Source
------------------------------------------------
vda        /kvm_data/test.img
hda        -
[root@kvm ~]# virsh dumpxml test > /etc/libvirt/qemu/test03.xml 
//如果是遠程機器,需要把該配置文件拷貝到遠程機器上
[root@kvm ~]# rsync -av /kvm_data/test.img  /kvm_data/test03.img
//-bash: rsync: command not found則yum install -y rsync
//如果是遷移到遠程,則需要把該磁盤文件拷貝到遠程機器上
sending incremental file list
test.img
sent 10,742,006,844 bytes  received 35 bytes  60,179,310.25 bytes/sec
total size is 10,739,384,832  speedup is 1.00

如果遷移到本機,需要修改配置文件:

[root@kvm ~]# vim /etc/libvirt/qemu/test03.xml 
 <name>test03</name>    //修改domname: 
 <uuid>c57da9f4-5cf3-4efc-86c7-62a1d9a160a9</uuid>   //修改uuid(隨便改一下數字,位數不要變)
    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2'/>
      <source file='/kvm_data/test03.img'/>    //修改磁盤路徑
      <target dev='vda' bus='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
    </disk>

定義新虛擬機:

[root@kvm ~]# virsh define /etc/libvirt/qemu/test03.xml  
Domain test03 defined from /etc/libvirt/qemu/test03.xml

查看虛擬機列表,會發現新遷移的虛擬機test03:

[root@kvm ~]#  virsh list --all
 Id    Name                           State
----------------------------------------------------
 -     test                           shut off
 -     test03                         shut off


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM