一络断、虛擬化技術(shù)之KVM
KVM 是Kernel-based Virtual Machine的簡稱露久,是一個開源的系統(tǒng)虛擬化模塊,自Linux 2.6.20之后集成在Linux的各個主要發(fā)行版本中辩块。它使用Linux自身的調(diào)度器進行管理烙常,所以相對于Xen(https://zhuanlan.zhihu.com/p/33324585),其核心源碼很少召耘。KVM目前已成為學(xué)術(shù)界的主流VMM之一百炬。 KVM的虛擬化需要硬件支持(如Intel VT技術(shù)或者AMD V技術(shù))。是基于硬件的完全虛擬化怎茫。而Xen早期則是基于軟件模擬的Para-Virtualization收壕,新版本則是基于硬件支持的完全虛擬化。但Xen本身有自己的進程調(diào)度器轨蛤,存儲管理模塊等蜜宪,所以代碼較為龐大。廣為流傳的商業(yè)系統(tǒng)虛擬化軟件VMware ESXI系列是Full-Virtualization祥山,IBM文檔:http://www.ibm.com/developerworks/cn/linux/l-using-kvm/
1.Guest:客戶機系統(tǒng)圃验,包括CPU(vCPU)、內(nèi)存缝呕、驅(qū)動(Console澳窑、網(wǎng)卡斧散、I/O 設(shè)備驅(qū)動等),被KVM置于一種受限制的CPU模式下運行.
2.KVM:運行在內(nèi)核空間摊聋,提供 CPU 和內(nèi)存的虛級化鸡捐,以及客戶機的 I/O攔截,Guest的部分I/O被KVM攔截后麻裁,交給 QEMU處理箍镜。
3.QEMU:修改過的被KVM虛機使用的QEMU代碼,運行在用戶空間煎源,提供硬件I/O虛擬化色迂,通過IOCTL/dev/kvm設(shè)備和KVM交互,但是手销,KVM本身不執(zhí)行任何硬件模擬歇僧,需要用戶空間程序通過 /dev/kvm 接口設(shè)置一個客戶機虛擬服務(wù)器的地址空間,向它提供模擬I/O锋拖,并將它的視頻顯示映射回宿主的顯示屏诈悍。目前這個應(yīng)用程序是QEMU。
1.1 環(huán)境準備
1.1.1 CPU開啟虛擬化
KVM需要宿主機CPU必須支持虛擬化功能姑隅,因此如果是在vmware workstation上使用虛擬機做宿主機写隶,那么必須要在虛擬機配置界面的處理器選項中開啟虛擬機化功能倔撞。
1.1.2 確認CPU指令集
1讲仰、查看主機的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
說明:
模擬器,模擬鼠標痪蝇、鍵盤等:qemu-kvm qemu-kvm-tools
啟動虛擬機的一個主程序鄙陡,用來管理虛擬機:libvirt
使用WEB界面遠程管理虛擬機:virt-manager
2.啟動libvirtd服務(wù)
[root@centos7 ~]# systemctl start libvirtd
[root@centos7 ~]# systemctl enable libvirtd
[root@centos7 ~]#
3.生成NAT網(wǎng)卡“virbr0”(可以訪問其他主機,但其他主機訪問不了本機“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虛擬機的IP地址
1.2 創(chuàng)建虛擬機
創(chuàng)建虛擬機的步驟:
安裝kvm管理命令-->查看CPU指令躏啰、內(nèi)存容量是否滿足條件-->創(chuàng)建虛擬機使用的網(wǎng)卡-->創(chuàng)建虛擬機的磁盤(重點)-->準備虛擬機所使用的ISO鏡像
注意:"KVM的NAT網(wǎng)絡(luò)虛擬機"趁矾,只能連接宿主機外的其他虛擬機,而宿主機外的其他虛擬機不能連接到這個“NAT虛擬機”给僵。(想實現(xiàn)這個效果毫捣,可用KVM的橋接網(wǎng)絡(luò)虛擬機)
1.2.1 虛擬機磁盤的格式
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虛機的虛擬化 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:虛機格式遷移工具
5. virt-* 工具:包括 Virt-install (創(chuàng)建KVM虛機的命令行工具)滨巴, Virt-viewer (連接到虛機屏幕的工具)思灌,Virt-clone(虛機克隆工具),virt-top 等
6. sVirt:安全工具
3.磁盤格式
(1)raw:指定多大就創(chuàng)建多大恭取,直接占用指定大小的空間
老牌的格式泰偿,用一個字來形容就是裸,你隨便dd一個file就模擬了一個raw格式的鏡像蜈垮。由于裸的徹底耗跛,性能上來說的話還是不錯的。目前來看攒发,KVM和XEN默認的格式好像還是這個格式调塌。因為其原始,有很多原生的特性惠猿,例如直接掛載也是一件簡單的事情羔砾。裸的好處還有就是簡單,支持轉(zhuǎn)換成其它格式的虛擬機鏡像對裸露的它來說還是很簡單的(如果其它格式需要轉(zhuǎn)換偶妖,有時候還是需要它做為中間格式)姜凄,空間使用來看,這個很像磁盤趾访,使用多少就是多少(du -h看到的大小就是使用大刑怼),但如果你要把整塊磁盤都拿走的話得全盤拿了(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(追加到原有的鏡像之后)
當然楚殿,好東西是吹出來的,誰用誰知道,還是有挺多問題的脆粥。由于原生的裸格式砌溺,不支持snapshot也是很正常的。傳說有朋友用版本管理軟件對raw格式的文件做版本管理從而達到snapshot的能力变隔,估計可行规伐,但沒試過,這里也不妄加評論匣缘。但如果你使用LVM的裸設(shè)備猖闪,那就另當別論。說到LVM還是十分的犀利的肌厨,當年用LVM做虛擬機的鏡像培慌,那性能杠杠的。而且現(xiàn)在好多兄弟用虛擬化都采用LVM來做的柑爸。在LVM上做了很多的優(yōu)化吵护,國外聽說也有朋友在LVM增量備份方面做了很多的工作。目前來看LVM的snapshot表鳍、性能馅而、可擴展性方面都還是有相當?shù)男Ч摹D壳皝砜吹脑捚┦ィ瑐浞莸脑捯矄栴}不大瓮恭。就是在虛擬機遷移方面還是有很大的限制。但目前虛擬化的現(xiàn)狀來看厘熟,真正需要熱遷移的情況目前需求還不是很強烈屯蹦。雖然使用LVM做虛擬機鏡像的相關(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默認也是比較推薦的格式锁摔,將差異保存在一個文件廓旬,文件比較小而且做快照也比較小,空間是動態(tài)增長的
現(xiàn)在比較主流的一種虛擬化鏡像格式谐腰,經(jīng)過一代的優(yōu)化孕豹,目前qcow2的性能上接近raw裸格式的性能涩盾,這個也算是redhat的官方渠道了,對于qcow2的格式,幾點還是比較突出的励背,qcow2的snapshot春霍,可以在鏡像上做N多個快照:更小的存儲空間,即使是不支持holes的文件系統(tǒng)也可以(這下du -h和ls -lh看到的就一樣了),支持多個snapshot叶眉,對歷史snapshot進行管理,支持zlib的磁盤壓縮,支持AES的加密
(5)vmdk
VMware的格式址儒,這個格式說的蛋疼一點就有點牛X,原本VMware就是做虛擬化起家衅疙,自己做了一個集群的VMDK的pool莲趣,做了自己的虛擬機鏡像格式。又拉著一些公司搞了一個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),如果機器上沒有帝簇,可以通過rpm或yum進行安裝徘郭,包名為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)換的目標格式
轉(zhuǎn)換完成后残揉,將新生產(chǎn)一個目標映像文件,原文件仍保存芋浮。
(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.默認保存虛擬機磁盤的路徑
[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 準備虛擬機所使用的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)建虛擬機所使用的命令“virt-install”
[root@centos7 ~]# virt-install -h
usage: virt-install --name NAME --memory MB STORAGE INSTALL [options]
使用指定安裝介質(zhì)新建虛擬機。
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 配置虛擬機內(nèi)存分配。例如:
--memory 1024 (in MiB)
--memory 512,maxmemory=1024
--vcpus VCPUS 為虛擬機配置的 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 配置虛擬機元數(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)建虛擬機
--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 變體的虛擬機凛驮,比如:'fedora18'、'rhel6'条辟、'winxp' 等等
--boot BOOT 配置虛擬機引導(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
配置虛擬機網(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 配置虛擬機顯示設(shè)置。例如:
--graphics vnc
--graphics spice,port=5901,tlsport=5902
--graphics none
--graphics vnc,password=foobar,port=5910,keymap=ja
--controller CONTROLLER 配置虛擬機控制程序設(shè)備杭棵。例如:
--controller type=usb,model=ich9-ehci1
--input INPUT 配置虛擬機輸入設(shè)備婚惫。例如:
--input tablet
--input keyboard,bus=usb
--serial SERIAL 配置虛擬機串口設(shè)備
--parallel PARALLEL 配置虛擬機并口設(shè)備
--channel CHANNEL 配置虛擬機溝通頻道
--console CONSOLE 配置虛擬機與主機之間的文本控制臺連接
--hostdev HOSTDEV 將物理 USB/PCI/etc主機設(shè)備配置為與虛擬機共享
--filesystem FILESYSTEM 將主機目錄傳遞給虛擬機。例如:
--filesystem /my/source/dir,/dir/in/guest
--filesystem template_name,/,type=template
--sound [SOUND] 配置虛擬機聲音設(shè)備模擬
--watchdog WATCHDOG 配置虛擬機 watchdog 設(shè)備
--video VIDEO 配置虛擬機視頻硬件魂爪。
--smartcard SMARTCARD 配置虛擬機智能卡設(shè)備先舷。例如:
--smartcard mode=passthrough
--redirdev REDIRDEV 配置虛擬機重定向設(shè)備。例如:
--redirdev usb,type=tcp,server=192.168.1.1:4000
--memballoon MEMBALLOON 配置虛擬機 memballoon 設(shè)備滓侍。例如:
--memballoon model=virtio
--tpm TPM 配置虛擬機 TPM 設(shè)備蒋川。例如:
--tpm /dev/tpm
--rng RNG 配置虛擬機 RNG 設(shè)備。例如:
--rng /dev/random
--panic PANIC 配置虛擬機 panic 設(shè)備撩笆。例如:
--panic default
虛擬機配置選項:
--security SECURITY 設(shè)定域安全驅(qū)動器配置捺球。
--numatune NUMATUNE 為域進程調(diào)整 NUMA 策略。
--memtune MEMTUNE 為域進程調(diào)整內(nèi)粗策略夕冲。
--blkiotune BLKIOTUNE 為域進程調(diào)整 blkio 策略
--memorybacking MEMORYBACKING 為域進程設(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 這臺虛擬機需要一個容器客戶端
--virt-type HV_TYPE 要使用的管理程序名稱(kvm泣栈、qemu、xen等等)
--arch ARCH 模擬的 CPU 構(gòu)架
--machine MACHINE 要模擬的機器類型
其它選項:
--autostart 引導(dǎo)主機時自動啟動域醉冤。
--wait WAIT 等待安裝完成的分鐘數(shù)秩霍。
--noautoconsole 不要自動嘗試連接到客戶端控制臺
--noreboot 完成安裝后不要引導(dǎo)虛擬機。
--print-xml [XMLONLY] 輸出所生成域 XML蚁阳,而不是創(chuàng)建虛擬機
--dry-run 完成安裝步驟,但不要創(chuàng)建設(shè)備或者定義虛擬機鸽照。
--check CHECK 啟用或禁用驗證檢查螺捐。例如:
--check path_in_use=off
--check all=off
-q, --quiet 禁止無錯誤輸出
-d, --debug 輸入故障排除信息
說明:
使用 '--option=?' 或者 '--option help' 查看可用子選項
有關(guān)示例及完整選項語法,請查看 man page。
1.2.5 虛擬機管理命令
[root@s1 src]# virsh list #列出當前開機的
[root@s1 src]# virsh list --all 3列出所有
[root@s1 src]# virsh shutdown CentOS-7-x86_64 #正常關(guān)機
[root@s1 src]# virsh start CentOS-7-x86_64 #正常關(guān)機
[root@s1 src]# virsh destroy centos7 #強制停止/關(guān)機
[root@s1 src]# virsh undefine Win_2008_r2-x86_64 #強制刪除
[root@s1 src]# virsh autostart centos7 #設(shè)置開機自啟動
2 創(chuàng)建默認網(wǎng)絡(luò)(NAT)虛擬機
說明:
1.指定虛擬機名稱:"--name"
2.指定虛擬機CPU多少核:"--vcpus"
3.指定內(nèi)存大卸ㄑ:"--ram"或者“--memory”
4.指定ISO鏡像在什么地方:"--cdrom="
5.指定磁盤文件:"disk path="
6.指定虛擬機網(wǎng)絡(luò):"--network"(企業(yè)中“橋接網(wǎng)絡(luò)”用的最多赔癌,“NAT網(wǎng)絡(luò)是默認網(wǎng)絡(luò),用‘default’表示”看情況使用澜沟;使用哪種網(wǎng)絡(luò)需要知道它們的名稱)
7.指定虛擬機圖形界面:"--graphics"(通常使用“VNC”灾票,缺點:虛擬機不能復(fù)制;桌面虛擬化使用“spice”茫虽,對配置要求很高刊苍,尤其顯卡;兩種方式的端口都可以自己指定)
8.指定鍵盤濒析、鼠標等(一般不用指定):“--input ”
9.指定控制接口(一般不用指定):“--console”
10.指定CPU架構(gòu)(看情況指定正什,x86、x64):“--arch”
11.指定虛擬機類型“kvm号杏、qemu婴氮、xen”(默認是KVM):“--virt-type”
12.指定“宿主機重啟后”,虛擬機是否自動開機(可選項盾致,一般設(shè)置為自動開機):“--autostart”
創(chuàng)建默認網(wǎng)絡(luò)(NAT)虛擬機
[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)建虛擬機后,要趕快連接虛擬機
2.1 連接“新建虛擬機”的方式
在宿主機創(chuàng)建好虛擬機后庭惜,會出現(xiàn)一個“5900”端口罩驻;如果之前創(chuàng)建了很多虛擬機,那選擇“59”開頭共四位數(shù)的端口
1.通過VNC客戶端連并安裝虛擬機
2.使用kvm后臺管理窗口連接
1.此方式的連接前提:
(1).在“連接工具(我用的xshell5)”-->屬性-->隧道-->轉(zhuǎn)發(fā)X11連接到(X):"Xmanager(M)"
(2).如果使用xshell蜈块,需要是企業(yè)版
2.連接:
[root@centos7 ~]# virt-manager
2.2 在新建虛擬機界面的開機界面鉴腻,指定新建虛擬機的網(wǎng)卡是“eth0”的方式
進入開機界面后按“Tab”,在“···x64 quiet”后面輸入:
net.ifnames=0 biosdevname=0
2.3 之后按照往常一樣安裝系統(tǒng)即可百揭。
2.4 安裝電源管理包
安裝虛擬機重啟后爽哎,有時會出現(xiàn)啟動不了的情況,那是因為沒有安裝“acpid”軟件包
通過“acpid”器一,我們可以對虛擬機進行啟動和關(guān)閉等操作:
1.安裝電源管理包:
[root@centos7 ~]# yum -y install acpid
2.管理虛擬機:
列出當前已經(jīng)開啟的虛擬機:
virsh list
查看已經(jīng)關(guān)閉的虛擬機:
birsh list--all
正常開啟名稱為“kvm1”的虛擬機
virsh start kvm1
正常關(guān)機名稱為“kvm1”的虛擬機
virsh shutdown kvm1
強制關(guān)機名稱為“kvm1”的虛擬機
virsh destory kvm1
注釋:通常用于Java服務(wù)導(dǎo)致某個虛擬機僵死了课锌。
強制刪除名稱為“kvm1”的虛擬機
virsh undefine kvm1
設(shè)置開機自啟動
virsh autostart kvm1
3 創(chuàng)建橋接網(wǎng)絡(luò)虛擬機(實現(xiàn)虛擬機內(nèi)外網(wǎng)隔離)
NAT網(wǎng)絡(luò)的虛擬機可以訪問宿主機外的主機,但宿主機外的主機不可以訪問NAT網(wǎng)絡(luò)的虛擬機祈秕。
橋接網(wǎng)絡(luò)的虛擬機渺贤,通過設(shè)置網(wǎng)卡綁定,可以反問宿主機外的主機请毛,也可以讓宿主機外主機或虛擬機志鞍,訪問橋接網(wǎng)絡(luò)的虛擬機。(詳見下面的KVM虛擬機的高可用架構(gòu))
3.1 概念
1.虛擬機實現(xiàn)內(nèi)外網(wǎng)隔離的前提
宿主機最少四塊物理網(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ù)虛擬機對網(wǎng)絡(luò)的要求(內(nèi)外網(wǎng)都訪問 或 只內(nèi)網(wǎng)之間訪問)娶桦,來設(shè)置虛擬機網(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.虛擬機訪問外網(wǎng)的通訊過程
當虛擬機“kvm2”想訪問外網(wǎng)墨吓,通過br0,br0指向bond0纹磺,把訪問流量轉(zhuǎn)發(fā)到宿主機的物理網(wǎng)卡"ethX"(eth0帖烘、eth1)。
物理網(wǎng)卡通過宿主機內(nèi)核中的路由橄杨,把虛擬機訪問外網(wǎng)的請求轉(zhuǎn)發(fā)到互聯(lián)網(wǎng)秘症。
4.虛擬機內(nèi)網(wǎng)之間訪問的通訊過程
當虛擬機(kvm1、kvm3式矫、kvm4)想訪問內(nèi)網(wǎng)的其他虛擬機(存儲服務(wù)器乡摹、MySQL數(shù)據(jù)庫),通過br1采转,br1指向bond1聪廉,把訪問流量轉(zhuǎn)發(fā)到宿主機的物理網(wǎng)卡“ethX”(eth2、eth3)故慈。
物理網(wǎng)卡通過宿主機內(nèi)核中的路由板熊,把虛擬機訪問內(nèi)網(wǎng)的其他虛擬機的請求轉(zhuǎn)發(fā)到其他物理網(wǎng)卡,
通過bond1察绷,在到br1干签,然后訪問到內(nèi)網(wǎng)其他虛擬機。如“存儲服務(wù)器”拆撼、“MySQL數(shù)據(jù)庫服務(wù)器”等筒严。
注意:虛擬機使用br1和bond1的網(wǎng)絡(luò)丹泉,是不能上外網(wǎng)的情萤,為了服務(wù)器的安全性鸭蛙。
5.brX 和 bondX
通過bondX決定宿主機物理網(wǎng)卡使用哪種模式(高可用、輪詢)為虛擬機的網(wǎng)絡(luò)“brX”提供服務(wù)
高可用:如果bond0是高可用模式筋岛,虛擬機(kvm1娶视、kvm2)的網(wǎng)絡(luò)請求,通過br0睁宰,由bond0轉(zhuǎn)發(fā)到物理網(wǎng)卡“eth0”肪获,在轉(zhuǎn)發(fā)給宿主機內(nèi)核的路由從而訪問外網(wǎng);當物理網(wǎng)卡“eth0”發(fā)生故障柒傻,由物理網(wǎng)卡“eth1”代替“eth0”工作孝赫。
輪詢:如果bond0是輪詢模式,虛擬機(kvm1红符、kvm2)的網(wǎng)絡(luò)請求青柄,通過br0,由bond0轉(zhuǎn)發(fā)到物理網(wǎng)卡“eth0”和物理網(wǎng)卡“eth1”预侯,在轉(zhuǎn)發(fā)給宿主機內(nèi)核的路由從而提升訪問外網(wǎng)的效率致开。
3.2 KVM虛擬機的高可用架構(gòu)
說明:
兩臺宿主機“172.18.200.101”、“172.18.200.102”分別有四塊網(wǎng)卡萎馅,都做了網(wǎng)卡綁定双戳,且網(wǎng)卡綁定后的“br0”、“br1”網(wǎng)段都一樣糜芳。
在宿主機"172.18.200.101"創(chuàng)建虛擬機“vm1”飒货、“vm2”。
在宿主機"172.18.200.102"創(chuàng)建虛擬機“vm3”峭竣、“vm4”塘辅。
通過圖片可知:
“vm1”、“vm3”都有兩塊網(wǎng)卡邪驮,網(wǎng)關(guān)分別指向自己宿主機的“br0”莫辨、“br1”,可以實現(xiàn)內(nèi)外網(wǎng)都能訪問的效果毅访。而且沮榜,因為兩臺宿主機的網(wǎng)段相同,虛擬的bond網(wǎng)段也相同喻粹,所以“vm1”能訪問“vm3”蟆融、“vm4”;“vm3”能訪問“vm1”、“vm2”守呜。
“vm2”型酥、“vm4”只有一塊網(wǎng)卡山憨,網(wǎng)關(guān)都指向自己宿主機的“br1”,可以實現(xiàn)內(nèi)網(wǎng)之間的訪問效果弥喉。而且郁竟,因為兩臺宿主機的網(wǎng)段相同,虛擬的bond網(wǎng)段也相同由境,所以“vm2”和“vm4”可以相互訪問棚亩,也可以訪問同網(wǎng)段的其他虛擬機,但訪問不了外網(wǎng)虏杰。
總結(jié):
內(nèi)外網(wǎng)都能訪問的虛擬機讥蟆,可用于負載均衡服務(wù)器
只能內(nèi)網(wǎng)之間訪問的虛擬機,可用于數(shù)據(jù)庫纺阔、存儲服務(wù)器等
3.3 創(chuàng)建橋接(建bridge)網(wǎng)絡(luò)虛擬機
橋接網(wǎng)絡(luò)可以讓運行在宿主機上的虛擬機使用和宿主機同網(wǎng)段IP瘸彤,并且可以從外部直接訪問到虛擬機,目前企業(yè)中大部分場景都使用橋接網(wǎng)絡(luò)笛钝。
3.3.1創(chuàng)建br0橋接網(wǎng)卡
1.確認系統(tǒng)已經(jīng)安裝橋接組件质况,否則橋接不成功導(dǎo)致服務(wù)器遠程連接不上
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 上傳鏡像并安裝虛擬機
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ò)虛擬機
[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)建虛擬機
3.3.3 驗證虛擬機網(wǎng)絡(luò)
1.查看IP地址
[root@centos7 ~]# ifconfig
2.是否能ping通百度
[root@centos7 ~]# ping www.baidu.com
3.3.4 從外部ssh虛擬機
1.ssh遠程連接虛擬機
[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