KVM

一、虛擬化技術(shù)之KVM

KVM 是Kernel-based Virtual Machine的簡稱,是一個開源的系統(tǒng)虛擬化模塊,自Linux 2.6.20之后集成在Linux的各個主要發(fā)行版本中。它使用Linux自身的調(diào)度器進(jìn)行管理,所以相對于Xen(https://zhuanlan.zhihu.com/p/33324585),其核心源碼很少。KVM目前已成為學(xué)術(shù)界的主流VMM之一。 KVM的虛擬化需要硬件支持(如Intel VT技術(shù)或者AMD V技術(shù))。是基于硬件的完全虛擬化。而Xen早期則是基于軟件模擬的Para-Virtualization,新版本則是基于硬件支持的完全虛擬化。但Xen本身有自己的進(jìn)程調(diào)度器,存儲管理模塊等,所以代碼較為龐大。廣為流傳的商業(yè)系統(tǒng)虛擬化軟件VMware ESXI系列是Full-Virtualization,IBM文檔:http://www.ibm.com/developerworks/cn/linux/l-using-kvm/

1.Guest:客戶機(jī)系統(tǒng),包括CPU(vCPU)、內(nèi)存、驅(qū)動(Console、網(wǎng)卡、I/O 設(shè)備驅(qū)動等),被KVM置于一種受限制的CPU模式下運行.
 
2.KVM:運行在內(nèi)核空間,提供 CPU 和內(nèi)存的虛級化,以及客戶機(jī)的 I/O攔截,Guest的部分I/O被KVM攔截后,交給 QEMU處理。
 
3.QEMU:修改過的被KVM虛機(jī)使用的QEMU代碼,運行在用戶空間,提供硬件I/O虛擬化,通過IOCTL/dev/kvm設(shè)備和KVM交互,但是,KVM本身不執(zhí)行任何硬件模擬,需要用戶空間程序通過 /dev/kvm 接口設(shè)置一個客戶機(jī)虛擬服務(wù)器的地址空間,向它提供模擬I/O,并將它的視頻顯示映射回宿主的顯示屏。目前這個應(yīng)用程序是QEMU。

1.1 環(huán)境準(zhǔn)備

1.1.1 CPU開啟虛擬化

KVM需要宿主機(jī)CPU必須支持虛擬化功能,因此如果是在vmware workstation上使用虛擬機(jī)做宿主機(jī),那么必須要在虛擬機(jī)配置界面的處理器選項中開啟虛擬機(jī)化功能。


1.1.2 確認(rèn)CPU指令集

1、查看主機(jī)的CUP是否開啟了虛擬化支持
[root@centos7 ~]# grep -E "vmx|svm" /proc/cpuinfo | wc -l(顯示物理核心CPU的指令集)
2

1.1.3 查看Linux內(nèi)核中KVM的模塊

[root@centos7 ~]# lsmod | grep kvm
kvm_intel             183621  0 
kvm                   586948  1 kvm_intel
irqbypass              13503  1 kvm

1.1.4 安裝KVM的管理命令

1.安裝kvm的管理命令
 
[root@centos7 ~]# yum install qemu-kvm qemu-kvm-tools libvirt virt-manager virt-install  
 
說明:
模擬器,模擬鼠標(biāo)、鍵盤等:qemu-kvm qemu-kvm-tools
啟動虛擬機(jī)的一個主程序,用來管理虛擬機(jī):libvirt
使用WEB界面遠(yuǎn)程管理虛擬機(jī):virt-manager
 
2.啟動libvirtd服務(wù)
[root@centos7 ~]# systemctl start libvirtd
[root@centos7 ~]# systemctl enable libvirtd
[root@centos7 ~]#
 
3.生成NAT網(wǎng)卡“virbr0”(可以訪問其他主機(jī),但其他主機(jī)訪問不了本機(jī)“virbr0”的IP地址)
 
[root@centos7 ~]# ifconfig virbr0
virbr0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255
        ether 52:54:00:93:29:ff  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
 
[root@centos7 ~]#
 
4.查找“virbr0”網(wǎng)卡的配置文件
[root@centos7 ~]# grep 192.168.122.1 /etc/ -R
/etc/libvirt/qemu/networks/autostart/default.xml:  <ip address='192.168.122.1' netmask='255.255.255.0'>
/etc/libvirt/qemu/networks/default.xml:  <ip address='192.168.122.1' netmask='255.255.255.0'>
[root@centos7 ~]#
 
說明:
“/etc/libvirt/qemu/networks/autostart/default.xml”文件是“/etc/libvirt/qemu/networks/default.xml”文件的軟連接
 
5.修改“virbr0”網(wǎng)卡的配置文件
[root@centos7 ~]# vim /etc/libvirt/qemu/networks/default.xml
 
說明:
“ip address”項可修改IP地址
“DHCP”項修改:動態(tài)分配給kvm虛擬機(jī)的IP地址

1.2 創(chuàng)建虛擬機(jī)

創(chuàng)建虛擬機(jī)的步驟:

安裝kvm管理命令-->查看CPU指令、內(nèi)存容量是否滿足條件-->創(chuàng)建虛擬機(jī)使用的網(wǎng)卡-->創(chuàng)建虛擬機(jī)的磁盤(重點)-->準(zhǔn)備虛擬機(jī)所使用的ISO鏡像

注意:"KVM的NAT網(wǎng)絡(luò)虛擬機(jī)",只能連接宿主機(jī)外的其他虛擬機(jī),而宿主機(jī)外的其他虛擬機(jī)不能連接到這個“NAT虛擬機(jī)”。(想實現(xiàn)這個效果,可用KVM的橋接網(wǎng)絡(luò)虛擬機(jī))

1.2.1 虛擬機(jī)磁盤的格式

1.根據(jù)存儲數(shù)據(jù)方式的不同可以分為兩種格式,一種是稀疏模式。一種是全鏡像模式,全鏡像模式無法做快照,IO層面是有qemu模擬的,CPU和內(nèi)存是有KVM實現(xiàn)的,以下是KVM的功能:

KVM 所支持的功能包括:
1. 支持CPU 和 memory 超分(Overcommit)
2. 支持半虛擬化I/O (virtio)
3. 支持熱插拔 (cpu,塊設(shè)備、網(wǎng)絡(luò)設(shè)備等)
4. 支持實時遷移(Live Migration)
5. 支持 PCI 設(shè)備直接分配和 單根I/O 虛擬化 (SR-IOV)
6. 支持 內(nèi)核同頁合并 (KSM )
7. 支持 NUMA (Non-Uniform Memory Access,非一致存儲訪問結(jié)構(gòu) )

2.KVM工具集合

1. libvirt:操作和管理KVM虛機(jī)的虛擬化 API,使用 C 語言編寫,可以由 Python,Ruby, Perl, PHP, Java 等語言調(diào)用??梢圆僮靼?KVM,vmware,XEN,Hyper-v, LXC 等 Hypervisor。
2. Virsh:基于 libvirt 的 命令行工具 (CLI)
3. Virt-Manager:基于 libvirt 的 GUI 工具
4. virt-v2v:虛機(jī)格式遷移工具
5. virt-* 工具:包括 Virt-install (創(chuàng)建KVM虛機(jī)的命令行工具), Virt-viewer (連接到虛機(jī)屏幕的工具),Virt-clone(虛機(jī)克隆工具),virt-top 等
6. sVirt:安全工具

3.磁盤格式

(1)raw:指定多大就創(chuàng)建多大,直接占用指定大小的空間

老牌的格式,用一個字來形容就是裸,你隨便dd一個file就模擬了一個raw格式的鏡像。由于裸的徹底,性能上來說的話還是不錯的。目前來看,KVM和XEN默認(rèn)的格式好像還是這個格式。因為其原始,有很多原生的特性,例如直接掛載也是一件簡單的事情。裸的好處還有就是簡單,支持轉(zhuǎn)換成其它格式的虛擬機(jī)鏡像對裸露的它來說還是很簡單的(如果其它格式需要轉(zhuǎn)換,有時候還是需要它做為中間格式),空間使用來看,這個很像磁盤,使用多少就是多少(du -h看到的大小就是使用大?。绻阋颜麎K磁盤都拿走的話得全盤拿了(copy鏡像的時候),會比較消耗網(wǎng)絡(luò)帶寬和I/O。接下來還有個有趣的問題,如果那天你的硬盤用著用著不夠用了,你咋辦,在買一塊盤。但raw格式的就比較犀利了,可以在原來的盤上追加空間:
dd if=/dev/zero of=zeros.raw bs=1024k count=4096(先創(chuàng)建4G的空間)
cat foresight.img zeros.raw > new-foresight.img(追加到原有的鏡像之后)
 
當(dāng)然,好東西是吹出來的,誰用誰知道,還是有挺多問題的。由于原生的裸格式,不支持snapshot也是很正常的。傳說有朋友用版本管理軟件對raw格式的文件做版本管理從而達(dá)到snapshot的能力,估計可行,但沒試過,這里也不妄加評論。但如果你使用LVM的裸設(shè)備,那就另當(dāng)別論。說到LVM還是十分的犀利的,當(dāng)年用LVM做虛擬機(jī)的鏡像,那性能杠杠的。而且現(xiàn)在好多兄弟用虛擬化都采用LVM來做的。在LVM上做了很多的優(yōu)化,國外聽說也有朋友在LVM增量備份方面做了很多的工作。目前來看LVM的snapshot、性能、可擴(kuò)展性方面都還是有相當(dāng)?shù)男Ч摹D壳皝砜吹脑?,備份的話也問題不大。就是在虛擬機(jī)遷移方面還是有很大的限制。但目前虛擬化的現(xiàn)狀來看,真正需要熱遷移的情況目前需求還不是很強(qiáng)烈。雖然使用LVM做虛擬機(jī)鏡像的相關(guān)公開資料比較少,但目前來看犧牲一點靈活性,換取性能和便于管理還是不錯的選擇。對于LVM相關(guān)的特性及使用可以參考如下鏈接:
http://www.ibm.com/developerworks/linux/library/l-lvm2/index.html

(2)cow
···
曾經(jīng)qemu的寫時拷貝的鏡像格式,目前由于歷史遺留原因不支持窗口模式。從某種意義上來說是個棄嬰,還沒得它成熟就死在腹中,后來被qcow格式所取代。
···
(3)qcow

一代的qemu的cow格式,剛剛出現(xiàn)的時候有比較好的特性,但其性能和raw格式對比還是有很大的差距,目前已經(jīng)被新版本的qcow2取代。其性能可以查看如下鏈接:
http://www.linux-kvm.org/page/Qcow2

(4)qcow2(推薦)
是openstack默認(rèn)也是比較推薦的格式,將差異保存在一個文件,文件比較小而且做快照也比較小,空間是動態(tài)增長的

現(xiàn)在比較主流的一種虛擬化鏡像格式,經(jīng)過一代的優(yōu)化,目前qcow2的性能上接近raw裸格式的性能,這個也算是redhat的官方渠道了,對于qcow2的格式,幾點還是比較突出的,qcow2的snapshot,可以在鏡像上做N多個快照:更小的存儲空間,即使是不支持holes的文件系統(tǒng)也可以(這下du -h和ls -lh看到的就一樣了),支持多個snapshot,對歷史snapshot進(jìn)行管理,支持zlib的磁盤壓縮,支持AES的加密

(5)vmdk

VMware的格式,這個格式說的蛋疼一點就有點牛X,原本VMware就是做虛擬化起家,自己做了一個集群的VMDK的pool,做了自己的虛擬機(jī)鏡像格式。又拉著一些公司搞了一個OVF的統(tǒng)一封包。從性能和功能上來說,vmdk應(yīng)該算最出色的,由于vmdk結(jié)合了VMware的很多能力,目前來看,KVM和XEN使用這種格式的情況不是太多。但就VMware的Esxi來看,它的穩(wěn)定性和各方面的能力還是可圈可點。

(6)vdi

VirtualBox 1.1 compatible image format, for exchanging images with VirtualBox.SUN收購了VirtualBox,Oracle又收購了SUN,這么說呢,vdi也算虛擬化這方面的一朵奇葩,可惜的是入主的兩家公司。SUN太專注于技術(shù)(可以說是IT技術(shù)最前端也不為過),Oracle又是開源殺手(mysql的沒落)。單純從能力上來說vdi在VirtualBox上的表現(xiàn)還是不錯的。也是不錯的workstation級別的產(chǎn)品。

4.磁盤格式的轉(zhuǎn)換

(1)raw轉(zhuǎn)換為qcow2

此步驟使用qemu-img工具實現(xiàn),如果機(jī)器上沒有,可以通過rpm或yum進(jìn)行安裝,包名為qemu-img。
     qemu-img是專門虛擬磁盤映像文件的qemu命令行工具。
     具體命令如下:
     qemu-img convert -f raw centos.img -O qcow2 centos.qcow2
     參數(shù)說明:convert   將磁盤文件轉(zhuǎn)換為指定格式的文件
                     -f   指定需要轉(zhuǎn)換文件的文件格式
                    -O  指定要轉(zhuǎn)換的目標(biāo)格式
     轉(zhuǎn)換完成后,將新生產(chǎn)一個目標(biāo)映像文件,原文件仍保存。

(2)qcow2轉(zhuǎn)換為raw

qemu-img convert -O qcow2 my.raw myqow.qcow

(3)VMDK轉(zhuǎn)換為qcow2

qemu-img convert -f vmdk -O qcow2 xxx.vmdk    xxx.img
 
參考鏈接:http://www.ibm.com/developerworks/cn/linux/l-cn-mgrtvm3/index.html

1.2.2 創(chuàng)建磁盤

qemu-img命令
一般使用“qemu-img命令”創(chuàng)建(create)、轉(zhuǎn)換(convert)磁盤的格式
使用“qemu-img -h”可查看此命令的使用幫助

1.默認(rèn)保存虛擬機(jī)磁盤的路徑
[root@centos7 ~]# ll /var/lib/libvirt/images/
總用量 0
[root@centos7 ~]#
 
2.創(chuàng)建一個格式為raw大小為10G的裸磁盤文件
[root@centos7 ~]# qemu-img create -f raw /var/lib/libvirt/images/centos.raw 10G
Formatting '/var/lib/libvirt/images/centos.raw', fmt=raw size=10737418240 
[root@centos7 ~]#
 
3.查看這個文件占多大的系統(tǒng)空間
[root@centos7 ~]# ll -h /var/lib/libvirt/images/centos.raw 
-rw-r--r-- 1 root root 10G 6月  17 20:31 /var/lib/libvirt/images/centos.raw
[root@centos7 ~]#
 
4.創(chuàng)建一個格式為qcow2大小為10G的磁盤文件
[root@centos7 src]# qemu-img create -f qcow2 /var/lib/libvirt/images/centos.qcow2 10G
Formatting '/var/lib/libvirt/images/centos.qcow2', fmt=qcow2 size=10737418240 encryption=off cluster_size=65536 lazy_refcounts=off 
[root@centos7 src]#
 
5.查看這個文件占多大的系統(tǒng)空間
[root@centos7 src]# ll -h /var/lib/libvirt/images/centos.qcow2 
-rw-r--r-- 1 root root 193K 6月  17 21:31 /var/lib/libvirt/images/centos.qcow2
[root@centos7 src]#

1.2.3 準(zhǔn)備虛擬機(jī)所使用的ISO鏡像(一般用最小化的鏡像)

一般放到“/usr/local/src/”目錄里
 
[root@centos7 ~]# cd /usr/local/src/
[root@centos7 src]# ll
總用量 940032
-rw-r--r-- 1 root root 962592768 6月  17 21:17 CentOS-7-x86_64-Minimal-1810.iso
[root@centos7 src]#

1.2.4 創(chuàng)建虛擬機(jī)所使用的命令“virt-install”

 
[root@centos7 ~]# virt-install -h
usage: virt-install --name NAME --memory MB STORAGE INSTALL [options]
 
使用指定安裝介質(zhì)新建虛擬機(jī)。
 
optional arguments:
    -h, --help show this help message and exit
    --version show program's version number and exit
    --connect URI 使用 libvirt URI 連接到 hypervisor
 
通用選項:
    -n NAME, --name NAME 客戶端事件名稱
    --memory MEMORY 配置虛擬機(jī)內(nèi)存分配。例如:
            --memory 1024 (in MiB)
            --memory 512,maxmemory=1024
    --vcpus VCPUS 為虛擬機(jī)配置的 vcpus 數(shù)。例如:
            --vcpus 5
            --vcpus 5,maxcpus=10,cpuset=1-4,6,8
            --vcpus sockets=2,cores=4,threads=2,
    --cpu CPU CPU 型號及功能。例如:
            --cpu coreduo,+x2apic
            --cpu host
    --metadata METADATA 配置虛擬機(jī)元數(shù)據(jù)。例如:
            --metadata name=foo,title="My pretty title",uuid=...
            --metadata description="My nice long description"
 
安裝方法選項:
    --cdrom CDROM 光驅(qū)安裝介質(zhì)
    -l LOCATION, --location LOCATION
            安裝源(例如:nfs:host:/path、http://host/path 或 ftp://host/path)
    --pxe 使用 PXE 協(xié)議從網(wǎng)絡(luò)引導(dǎo)
    --import 在磁盤映像中構(gòu)建虛擬機(jī)
    --livecd 將光驅(qū)介質(zhì)視為 Live CD
    -x EXTRA_ARGS, --extra-args EXTRA_ARGS
            附加到使用 --location 引導(dǎo)的內(nèi)核的參數(shù)
    --initrd-inject INITRD_INJECT
            使用 --location 為 initrd 的 root 添加指定文件
    --os-variant DISTRO_VARIANT
            在其中安裝 OS 變體的虛擬機(jī),比如:'fedora18'、'rhel6'、'winxp' 等等
    --boot BOOT 配置虛擬機(jī)引導(dǎo)設(shè)置。例如:
            --boot hd,cdrom,menu=on
            --boot init=/sbin/init (for containers)
    --idmap IDMAP 為 LXC 容器啟用用戶名稱空間。例如:
            --idmap uid_start=0,uid_target=1000,uid_count=10
 
設(shè)備選項:
    --disk DISK 使用不同選項指定存儲。例如:
            --disk size=10 (new 10GiB image in default location)
            --disk /my/existing/disk,cache=none
            --disk device=cdrom,bus=scsi
            --disk=?
    -w NETWORK, --network NETWORK
            配置虛擬機(jī)網(wǎng)絡(luò)接口。例如:
            --network bridge=mybr0
            --network network=my_libvirt_virtual_net
            --network network=mynet,model=virtio,mac=00:11...
            --network none
            --network help
    --graphics GRAPHICS 配置虛擬機(jī)顯示設(shè)置。例如:
            --graphics vnc
            --graphics spice,port=5901,tlsport=5902
            --graphics none
            --graphics vnc,password=foobar,port=5910,keymap=ja
    --controller CONTROLLER 配置虛擬機(jī)控制程序設(shè)備。例如:
            --controller type=usb,model=ich9-ehci1
    --input INPUT 配置虛擬機(jī)輸入設(shè)備。例如:
            --input tablet
            --input keyboard,bus=usb
    --serial SERIAL 配置虛擬機(jī)串口設(shè)備
    --parallel PARALLEL 配置虛擬機(jī)并口設(shè)備
    --channel CHANNEL 配置虛擬機(jī)溝通頻道
    --console CONSOLE 配置虛擬機(jī)與主機(jī)之間的文本控制臺連接
    --hostdev HOSTDEV 將物理 USB/PCI/etc主機(jī)設(shè)備配置為與虛擬機(jī)共享
    --filesystem FILESYSTEM 將主機(jī)目錄傳遞給虛擬機(jī)。例如:
            --filesystem /my/source/dir,/dir/in/guest
            --filesystem template_name,/,type=template
    --sound [SOUND] 配置虛擬機(jī)聲音設(shè)備模擬
    --watchdog WATCHDOG 配置虛擬機(jī) watchdog 設(shè)備
    --video VIDEO 配置虛擬機(jī)視頻硬件。
    --smartcard SMARTCARD 配置虛擬機(jī)智能卡設(shè)備。例如:
            --smartcard mode=passthrough
    --redirdev REDIRDEV 配置虛擬機(jī)重定向設(shè)備。例如:
            --redirdev usb,type=tcp,server=192.168.1.1:4000
    --memballoon MEMBALLOON 配置虛擬機(jī) memballoon 設(shè)備。例如:
            --memballoon model=virtio
    --tpm TPM 配置虛擬機(jī) TPM 設(shè)備。例如:
            --tpm /dev/tpm
    --rng RNG 配置虛擬機(jī) RNG 設(shè)備。例如:
            --rng /dev/random
    --panic PANIC 配置虛擬機(jī) panic 設(shè)備。例如:
            --panic default
 
虛擬機(jī)配置選項:
    --security SECURITY 設(shè)定域安全驅(qū)動器配置。
    --numatune NUMATUNE 為域進(jìn)程調(diào)整 NUMA 策略。
    --memtune MEMTUNE 為域進(jìn)程調(diào)整內(nèi)粗策略。
    --blkiotune BLKIOTUNE 為域進(jìn)程調(diào)整 blkio 策略
    --memorybacking MEMORYBACKING 為域進(jìn)程設(shè)置內(nèi)存后備策略。例如:
            --memorybacking hugepages=on
    --features FEATURES 設(shè)置域 <features> XML。例如:
            --features acpi=off
            --features apic=on,eoi=on
    --clock CLOCK 設(shè)置域 <clock> XML。例如:
            --clock offset=localtime,rtc_tickpolicy=catchup
    --pm PM 配置 VM 電源管理功能
    --events EVENTS 配置 VM 生命周期管理策略
    --resource RESOURCE 配置 VM 資源分區(qū)(cgroups)
 
虛擬化平臺選項:
    -v, --hvm 客戶端應(yīng)該是一個全虛擬客戶端
    -p, --paravirt 這個客戶端一個是一個半虛擬客戶端
    --container 這臺虛擬機(jī)需要一個容器客戶端
    --virt-type HV_TYPE 要使用的管理程序名稱(kvm、qemu、xen等等)
    --arch ARCH 模擬的 CPU 構(gòu)架
    --machine MACHINE 要模擬的機(jī)器類型
 
其它選項:
    --autostart 引導(dǎo)主機(jī)時自動啟動域。
    --wait WAIT 等待安裝完成的分鐘數(shù)。
    --noautoconsole 不要自動嘗試連接到客戶端控制臺
    --noreboot 完成安裝后不要引導(dǎo)虛擬機(jī)。
    --print-xml [XMLONLY] 輸出所生成域 XML,而不是創(chuàng)建虛擬機(jī)
    --dry-run 完成安裝步驟,但不要創(chuàng)建設(shè)備或者定義虛擬機(jī)。
    --check CHECK 啟用或禁用驗證檢查。例如:
            --check path_in_use=off
            --check all=off
    -q, --quiet 禁止無錯誤輸出
    -d, --debug 輸入故障排除信息
 
說明:
使用 '--option=?' 或者 '--option help' 查看可用子選項
有關(guān)示例及完整選項語法,請查看 man page。

1.2.5 虛擬機(jī)管理命令

[root@s1 src]# virsh list #列出當(dāng)前開機(jī)的
[root@s1 src]# virsh list --all 3列出所有
[root@s1 src]# virsh shutdown CentOS-7-x86_64 #正常關(guān)機(jī)
[root@s1 src]# virsh start CentOS-7-x86_64 #正常關(guān)機(jī)
[root@s1 src]# virsh destroy centos7 #強(qiáng)制停止/關(guān)機(jī)
[root@s1 src]# virsh undefine Win_2008_r2-x86_64 #強(qiáng)制刪除
[root@s1 src]# virsh autostart centos7 #設(shè)置開機(jī)自啟動

2 創(chuàng)建默認(rèn)網(wǎng)絡(luò)(NAT)虛擬機(jī)

說明:
1.指定虛擬機(jī)名稱:"--name"
2.指定虛擬機(jī)CPU多少核:"--vcpus"
3.指定內(nèi)存大?。?--ram"或者“--memory”
4.指定ISO鏡像在什么地方:"--cdrom="
5.指定磁盤文件:"disk path="
6.指定虛擬機(jī)網(wǎng)絡(luò):"--network"(企業(yè)中“橋接網(wǎng)絡(luò)”用的最多,“NAT網(wǎng)絡(luò)是默認(rèn)網(wǎng)絡(luò),用‘default’表示”看情況使用;使用哪種網(wǎng)絡(luò)需要知道它們的名稱)
7.指定虛擬機(jī)圖形界面:"--graphics"(通常使用“VNC”,缺點:虛擬機(jī)不能復(fù)制;桌面虛擬化使用“spice”,對配置要求很高,尤其顯卡;兩種方式的端口都可以自己指定)
8.指定鍵盤、鼠標(biāo)等(一般不用指定):“--input ”
9.指定控制接口(一般不用指定):“--console”
10.指定CPU架構(gòu)(看情況指定,x86、x64):“--arch”
11.指定虛擬機(jī)類型“kvm、qemu、xen”(默認(rèn)是KVM):“--virt-type”
12.指定“宿主機(jī)重啟后”,虛擬機(jī)是否自動開機(jī)(可選項,一般設(shè)置為自動開機(jī)):“--autostart”

創(chuàng)建默認(rèn)網(wǎng)絡(luò)(NAT)虛擬機(jī)

[root@centos7 src]# virt-install --virt-type kvm --name linux36 --ram 512 --vcpus 1 --autostart --cdrom=/usr/local/src/CentOS-7-x86_64-Minimal-1810.iso --disk path=/var/lib/libvirt/images/centos.qcow2 --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole
 
說明:
“--graphics vnc,listen=0.0.0.0 --noautoconsole”表示:
指定vnc,vnc監(jiān)聽0.0.0.0地址,不自動連接控制臺(通常是人為連接)

創(chuàng)建虛擬機(jī)后,要趕快連接虛擬機(jī)

2.1 連接“新建虛擬機(jī)”的方式

在宿主機(jī)創(chuàng)建好虛擬機(jī)后,會出現(xiàn)一個“5900”端口;如果之前創(chuàng)建了很多虛擬機(jī),那選擇“59”開頭共四位數(shù)的端口
1.通過VNC客戶端連并安裝虛擬機(jī)



2.使用kvm后臺管理窗口連接

1.此方式的連接前提:
 
(1).在“連接工具(我用的xshell5)”-->屬性-->隧道-->轉(zhuǎn)發(fā)X11連接到(X):"Xmanager(M)"
(2).如果使用xshell,需要是企業(yè)版
 
2.連接:
 
[root@centos7 ~]# virt-manager 

2.2 在新建虛擬機(jī)界面的開機(jī)界面,指定新建虛擬機(jī)的網(wǎng)卡是“eth0”的方式

進(jìn)入開機(jī)界面后按“Tab”,在“···x64 quiet”后面輸入:
net.ifnames=0 biosdevname=0

2.3 之后按照往常一樣安裝系統(tǒng)即可。

2.4 安裝電源管理包

安裝虛擬機(jī)重啟后,有時會出現(xiàn)啟動不了的情況,那是因為沒有安裝“acpid”軟件包  
 
通過“acpid”,我們可以對虛擬機(jī)進(jìn)行啟動和關(guān)閉等操作:  
 
1.安裝電源管理包:
[root@centos7 ~]# yum -y install acpid
 
2.管理虛擬機(jī):
 
列出當(dāng)前已經(jīng)開啟的虛擬機(jī):
virsh list
 
查看已經(jīng)關(guān)閉的虛擬機(jī):
birsh list--all
 
正常開啟名稱為“kvm1”的虛擬機(jī)
virsh start kvm1
 
正常關(guān)機(jī)名稱為“kvm1”的虛擬機(jī)
virsh shutdown kvm1
 
強(qiáng)制關(guān)機(jī)名稱為“kvm1”的虛擬機(jī)
virsh destory kvm1
注釋:通常用于Java服務(wù)導(dǎo)致某個虛擬機(jī)僵死了。
 
強(qiáng)制刪除名稱為“kvm1”的虛擬機(jī)
virsh undefine kvm1
 
設(shè)置開機(jī)自啟動
virsh autostart kvm1

3 創(chuàng)建橋接網(wǎng)絡(luò)虛擬機(jī)(實現(xiàn)虛擬機(jī)內(nèi)外網(wǎng)隔離)

NAT網(wǎng)絡(luò)的虛擬機(jī)可以訪問宿主機(jī)外的主機(jī),但宿主機(jī)外的主機(jī)不可以訪問NAT網(wǎng)絡(luò)的虛擬機(jī)。
橋接網(wǎng)絡(luò)的虛擬機(jī),通過設(shè)置網(wǎng)卡綁定,可以反問宿主機(jī)外的主機(jī),也可以讓宿主機(jī)外主機(jī)或虛擬機(jī),訪問橋接網(wǎng)絡(luò)的虛擬機(jī)。(詳見下面的KVM虛擬機(jī)的高可用架構(gòu))

3.1 概念

1.虛擬機(jī)實現(xiàn)內(nèi)外網(wǎng)隔離的前提

宿主機(jī)最少四塊物理網(wǎng)卡,每兩塊一組,做網(wǎng)卡綁定,設(shè)置br0、br1為兩個網(wǎng)段,br0是“192.168.0.0/16”用于訪問外網(wǎng);br1是“10.20.0.0/16”用于內(nèi)網(wǎng)之間的訪問,這個網(wǎng)段需要在防火墻設(shè)置為“不能訪問外網(wǎng)”。

2.思路

根據(jù)虛擬機(jī)對網(wǎng)絡(luò)的要求(內(nèi)外網(wǎng)都訪問 或 只內(nèi)網(wǎng)之間訪問),來設(shè)置虛擬機(jī)網(wǎng)卡添加幾塊。
如內(nèi)外網(wǎng)都訪問,就添加兩塊網(wǎng)卡,一塊設(shè)置br0的網(wǎng)絡(luò),網(wǎng)關(guān)指向br0的IP地址;一塊設(shè)置br1的網(wǎng)絡(luò),網(wǎng)關(guān)指向br1的IP地址。
如只內(nèi)網(wǎng)之間訪問,就只添加一塊網(wǎng)卡,設(shè)置br1的網(wǎng)絡(luò),網(wǎng)關(guān)指向為br1的IP地址。

3.虛擬機(jī)訪問外網(wǎng)的通訊過程

當(dāng)虛擬機(jī)“kvm2”想訪問外網(wǎng),通過br0,br0指向bond0,把訪問流量轉(zhuǎn)發(fā)到宿主機(jī)的物理網(wǎng)卡"ethX"(eth0、eth1)。
物理網(wǎng)卡通過宿主機(jī)內(nèi)核中的路由,把虛擬機(jī)訪問外網(wǎng)的請求轉(zhuǎn)發(fā)到互聯(lián)網(wǎng)。

4.虛擬機(jī)內(nèi)網(wǎng)之間訪問的通訊過程

當(dāng)虛擬機(jī)(kvm1、kvm3、kvm4)想訪問內(nèi)網(wǎng)的其他虛擬機(jī)(存儲服務(wù)器、MySQL數(shù)據(jù)庫),通過br1,br1指向bond1,把訪問流量轉(zhuǎn)發(fā)到宿主機(jī)的物理網(wǎng)卡“ethX”(eth2、eth3)。
物理網(wǎng)卡通過宿主機(jī)內(nèi)核中的路由,把虛擬機(jī)訪問內(nèi)網(wǎng)的其他虛擬機(jī)的請求轉(zhuǎn)發(fā)到其他物理網(wǎng)卡,
通過bond1,在到br1,然后訪問到內(nèi)網(wǎng)其他虛擬機(jī)。如“存儲服務(wù)器”、“MySQL數(shù)據(jù)庫服務(wù)器”等。
注意:虛擬機(jī)使用br1和bond1的網(wǎng)絡(luò),是不能上外網(wǎng)的,為了服務(wù)器的安全性。

5.brX 和 bondX

通過bondX決定宿主機(jī)物理網(wǎng)卡使用哪種模式(高可用、輪詢)為虛擬機(jī)的網(wǎng)絡(luò)“brX”提供服務(wù)
高可用:如果bond0是高可用模式,虛擬機(jī)(kvm1、kvm2)的網(wǎng)絡(luò)請求,通過br0,由bond0轉(zhuǎn)發(fā)到物理網(wǎng)卡“eth0”,在轉(zhuǎn)發(fā)給宿主機(jī)內(nèi)核的路由從而訪問外網(wǎng);當(dāng)物理網(wǎng)卡“eth0”發(fā)生故障,由物理網(wǎng)卡“eth1”代替“eth0”工作。
輪詢:如果bond0是輪詢模式,虛擬機(jī)(kvm1、kvm2)的網(wǎng)絡(luò)請求,通過br0,由bond0轉(zhuǎn)發(fā)到物理網(wǎng)卡“eth0”和物理網(wǎng)卡“eth1”,在轉(zhuǎn)發(fā)給宿主機(jī)內(nèi)核的路由從而提升訪問外網(wǎng)的效率。

3.2 KVM虛擬機(jī)的高可用架構(gòu)

說明:

兩臺宿主機(jī)“172.18.200.101”、“172.18.200.102”分別有四塊網(wǎng)卡,都做了網(wǎng)卡綁定,且網(wǎng)卡綁定后的“br0”、“br1”網(wǎng)段都一樣。
在宿主機(jī)"172.18.200.101"創(chuàng)建虛擬機(jī)“vm1”、“vm2”。
在宿主機(jī)"172.18.200.102"創(chuàng)建虛擬機(jī)“vm3”、“vm4”。
通過圖片可知:
“vm1”、“vm3”都有兩塊網(wǎng)卡,網(wǎng)關(guān)分別指向自己宿主機(jī)的“br0”、“br1”,可以實現(xiàn)內(nèi)外網(wǎng)都能訪問的效果。而且,因為兩臺宿主機(jī)的網(wǎng)段相同,虛擬的bond網(wǎng)段也相同,所以“vm1”能訪問“vm3”、“vm4”;“vm3”能訪問“vm1”、“vm2”。
“vm2”、“vm4”只有一塊網(wǎng)卡,網(wǎng)關(guān)都指向自己宿主機(jī)的“br1”,可以實現(xiàn)內(nèi)網(wǎng)之間的訪問效果。而且,因為兩臺宿主機(jī)的網(wǎng)段相同,虛擬的bond網(wǎng)段也相同,所以“vm2”和“vm4”可以相互訪問,也可以訪問同網(wǎng)段的其他虛擬機(jī),但訪問不了外網(wǎng)。

總結(jié):

內(nèi)外網(wǎng)都能訪問的虛擬機(jī),可用于負(fù)載均衡服務(wù)器
只能內(nèi)網(wǎng)之間訪問的虛擬機(jī),可用于數(shù)據(jù)庫、存儲服務(wù)器等

3.3 創(chuàng)建橋接(建bridge)網(wǎng)絡(luò)虛擬機(jī)

橋接網(wǎng)絡(luò)可以讓運行在宿主機(jī)上的虛擬機(jī)使用和宿主機(jī)同網(wǎng)段IP,并且可以從外部直接訪問到虛擬機(jī),目前企業(yè)中大部分場景都使用橋接網(wǎng)絡(luò)。

3.3.1創(chuàng)建br0橋接網(wǎng)卡
 
1.確認(rèn)系統(tǒng)已經(jīng)安裝橋接組件,否則橋接不成功導(dǎo)致服務(wù)器遠(yuǎn)程連接不上
 yum install bridge-utils
 
2.創(chuàng)建橋接網(wǎng)卡配置
[root@s1 network-scripts]# pwd
/etc/sysconfig/network-scripts
[root@s1 network-scripts]# vim ifcfg-br0
TYPE=Bridge
BOOTPROTO=static
NAME=br0
DEVICE=br0
ONBOOT=yes
IPADDR=172.18.200.101
NETMASK=255.255.0.0
GATEWAY=172.18.0.1
DNS1=172.18.0.1
 
3.配置物理網(wǎng)卡
[root@s1 network-scripts]# vim ifcfg-eth0
TYPE=Ethernet
BOOTPROTO=static
NAME=eth0
DEVICE=eth0
ONBOOT=yes
BRIDGE=br0
 
4.重啟網(wǎng)絡(luò)服務(wù)使之生效
[root@s1 network-scripts]# systemctl restart network
 
5.查看網(wǎng)絡(luò)
[root@s1 network-scripts]# ifconfig
3.3.2 上傳鏡像并安裝虛擬機(jī)
1.查看鏡像
[root@s1 ~]# ll /usr/local/src/CentOS-7-x86_64-Minimal-1810.iso
-rw-r--r-- 1 qemu qemu 962592768 Jan 1 13:33 /usr/local/src/CentOS-7-x86_64-Minimal1810.iso
 
2.#創(chuàng)建磁盤:
[root@s1 ~]# qemu-img create -f qcow2 /var/lib/libvirt/images/centos7-bridge.qcow2 10G
Formatting '/var/lib/libvirt/images/centos7-bridge.qcow2', fmt=qcow2 size=10737418240
encryption=off cluster_size=65536 lazy_refcounts=off
 
3.創(chuàng)建橋接網(wǎng)絡(luò)虛擬機(jī)
[root@s1 ~]# virt-install --virt-type kvm --name centos7-bridge --ram 1024 --vcpus 2 \ 
--cdrom=/usr/local/src/CentOS-7-x86_64-Minimal-1810.iso --disk path=/var/lib/libvirt/images/centos7-bridge.qcow2 \ 
--network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole
 
4.使用vnc或后臺管理工具連接,創(chuàng)建虛擬機(jī)
3.3.3 驗證虛擬機(jī)網(wǎng)絡(luò)
1.查看IP地址
[root@centos7 ~]# ifconfig
 
2.是否能ping通百度
[root@centos7 ~]# ping www.baidu.com
3.3.4 從外部ssh虛擬機(jī)
1.ssh遠(yuǎn)程連接虛擬機(jī)
[root@s1 src]# ssh 172.18.144.43
The authenticity of host '172.18.144.43 (172.18.144.43)' can't be established.
ECDSA key fingerprint is SHA256:p4bEG12bcUs/SMkbwXcfT+idshg9+6NBB+sqF77scRk.
ECDSA key fingerprint is MD5:20:08:b7:97:c0:53:f0:26:78:0a:89:ea:89:3a:9f:cb.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '172.18.144.43' (ECDSA) to the list of known hosts.
root@172.18.144.43's password:
Last login: Fri Jun 14 18:38:05 2019
 
2.查看PCI設(shè)備
[root@localhost ~]# yum install pciutils #查看PCI設(shè)備
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.tuna.tsinghua.edu.cn
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com
Package pciutils-3.5.1-3.el7.x86_64 already installed and latest version
Nothing to do
 
[root@localhost ~]# lspci
00:00.0 Host bridge: Intel Corporation 440FX - 82441FX PMC [Natoma] (rev 02)
00:01.0 ISA bridge: Intel Corporation 82371SB PIIX3 ISA [Natoma/Triton II]
00:01.1 IDE interface: Intel Corporation 82371SB PIIX3 IDE [Natoma/Triton II]
00:01.3 Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 03)
00:02.0 VGA compatible controller: Cirrus Logic GD 5446
00:03.0 Ethernet controller: Red Hat, Inc. Virtio network device
00:04.0 USB controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller
#1 (rev 03)
00:04.1 USB controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller
#2 (rev 03)
00:04.2 USB controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller
#3 (rev 03)
00:04.7 USB controller: Intel Corporation 82801I (ICH9 Family) USB2 EHCI Controller
#1 (rev 03)
00:05.0 Communication controller: Red Hat, Inc. Virtio console #virtio為半虛擬化驅(qū)動
00:06.0 SCSI storage controller: Red Hat, Inc. Virtio block device
00:07.0 Unclassified device [00ff]: Red Hat, Inc. Virtio memory balloon
00:08.0 Unclassified device [00ff]: Red Hat, Inc. Virtio RNG

轉(zhuǎn)載自https://blog.csdn.net/weixin_34258838/article/details/93020810

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容