1、虛擬化技術(shù):
虛擬化技術(shù)類型:
主機(jī)虛擬化:xen, kvm, virtualbox, ...
容器(用戶空間隔離): lxc(LinuX Container), openvz, ...
系統(tǒng)庫虛擬化:wine, ...
應(yīng)用程序級虛擬化:jvm, pvm,...
主機(jī)虛擬化:
CPU:
模擬:emulation, 虛擬機(jī)的arch與物理平臺的arch可以不相同完箩;qemu赐俗;
虛擬:virtualization
完全虛擬化(full-virt)
BT: 二進(jìn)制轉(zhuǎn)換 (軟件)
HVM:硬件輔助的虛擬化(硬件)
半(準(zhǔn))虛擬化 (para-virt)
GuestOS得明確知道自己運行于虛擬化技術(shù)
內(nèi)存:
MMU virtualization:
Intel: EPT, Extended Page Table
AMD: NPT, Nested Page Table
TLB virtualization:
tagged TLB
IO:
Emulation
Para-virtualization
IO-through:IO透傳
主機(jī)虛擬化的類型:
TYPE-I:
于硬件級別直接運行hypervisor;
xen, vmware ESX/ESXI
TYPE-II:
于硬件級別運行一個OS(Host OS)弊知,而此OS上運行一個VMM阻逮;
vmware workstation, virtualbox, kvm
Linux目前流行的開源虛擬化技術(shù)解決方案:
主機(jī)虛擬化:xen, kvm, virtualbox
容器級:lxc, libcontainer, runC, openvz
模擬器:qemu
2、KVM的組件:
kvm.ko:模塊
API
qemu-kvm:用戶空間的工具程序秩彤;
qemu-kvm is an open source virtualizer that provides hardware emulation for the KVM hypervisor.
libvirt:Libvirt is a C toolkit to interact with the virtualization capabilities of recent versions of Linux (and other OSes). The main package includes the libvirtd server exporting the virtualization support.
C/S:
Client:
libvirt-client
virt-manager
Daemon:
libvirt-daemon
3叔扼、快速使用kvm技術(shù):
安裝使用KVM:
判斷CPU是否支持硬件虛擬化:
# grep -i -E '(vmx|svm|lm)' /proc/cpuinfo
vmx:Intel VT-x
svm:AMD AMD-v
# yum install libvirt-daemon-kvm qemu-kvm virt-manager
# modprobe kvm
# systemctl start libvirtd.service
# virsh iface-bridge INTERFACE BRIDGE_NAME
# virt-manager
4、kvm: Kernel-based Virtual Machine
Qumranet公司 --> RedHat
(1) X86_64
(2) HVM:
Intel VT
AMD AMD-v
5漫雷、KVM的組件:
兩類組件:
(kvm.ko)/dev/kvm:工作為hypervisor瓜富,在用戶空間可通過系統(tǒng)調(diào)用ioctl()與內(nèi)核中的kvm模塊交互,從而完成虛擬機(jī)的創(chuàng)建珊拼、啟動食呻、停止、刪除等各種管理功能澎现;
qemu-kvm進(jìn)程:工作于用戶空間仅胞,用于實現(xiàn)IO設(shè)備模擬;用于實現(xiàn)一個虛擬機(jī)實例剑辫;
KVM模塊load進(jìn)內(nèi)存之后干旧,系統(tǒng)的運行模式:
內(nèi)核模式:GuestOS執(zhí)行IO類的操作時,或其它的特殊指令操作時的模式妹蔽;它也被稱為“Guest-Kernel”模式椎眯;
用戶模式:Host OS的用戶空間挠将,用于代為GuestOS發(fā)出IO請求;
來賓模式:GuestOS的用戶模式编整;所有的非IO類請求舔稀;
安裝使用KVM:
判斷CPU是否支持硬件虛擬化:
grep -i -E '(vmx|svm|lm)' /proc/cpuinfo
vmx:Intel VT-x
svm:AMD AMD-v
運行中的一個kvm虛擬機(jī)就是一個qemu-kvm進(jìn)程,運行qemu-kvm程序并傳遞給它合適的選項及參數(shù)即能完成虛擬機(jī)啟動掌测,終止此進(jìn)程即能關(guān)閉虛擬機(jī)内贮;
kvm工具棧:
qemu:
qemu-kvm
qemu-img
libvirt:
GUI:virt-manager, virt-viewer
CLI: virsh, virt-install
C/S:
libvirtd
安裝:
(1) 裝載內(nèi)核模塊
kvm:核心模塊
kvm-intel|kvm-amd
使用virt-manager管理KVM
# yum install qemu-kvm libvirt-daemon-kvm virt-manager
# modprobe kvm
# systemctl start libvirtd.service
# virt-manager &
6、網(wǎng)絡(luò)虛擬化:
二層的虛擬網(wǎng)絡(luò)設(shè)備:
kernel net bridge/brctl
openvswitch
CentOS 7創(chuàng)建物理橋汞斧,使用內(nèi)核自帶的橋接模塊實現(xiàn):
橋接口配置文件保留地址信息夜郁;
TYPE=Bridge
Device=BRIDGE_NAME
物理網(wǎng)卡配置文件:
刪除地址、掩碼和網(wǎng)關(guān)等相關(guān)的配置粘勒,添加
BRIDGE=BRIDGE_NAME
重啟網(wǎng)絡(luò)服務(wù)即可:
7竞端、kvm的管理工具棧:
qemu:
qemu-kvm
qemu-img
libvirt:
GUI:virt-manager
CLI:virsh, virt-install
使用qemu-kvm管理vms:
Qemu:
處理器模擬器
仿真各種IO設(shè)備
將仿真設(shè)備連接至主機(jī)的物理設(shè)備
提供用戶接口
qemu-kvm命令語法:
qemu-kvm [options] [disk_image]
選項有很多類別:
標(biāo)準(zhǔn)選項、塊設(shè)備相關(guān)選項庙睡、顯示選項事富、網(wǎng)絡(luò)選項、...
標(biāo)準(zhǔn)選項:
-machine [type=]name:-machine help來獲取列表埃撵,用于指定模擬的主機(jī)類型赵颅;
-cpu cpu:-cpu help來獲取列表虽另;用于指定要模擬的CPU型號暂刘;
-smp n[,maxcpus=cpus][,cores=cores][,threads=threads][,sockets=sockets]:指明虛擬機(jī)上vcpu的數(shù)量及拓?fù)洌? -boot [order=drives][,once=drives][,menu=on|off] [,splash=sp_name][,splash-time=sp_time][,reboot-timeout=rb_time][,strict=on|off]
order:各設(shè)備的引導(dǎo)次序:c表示第一塊硬盤,d表示第一個光驅(qū)設(shè)備捂刺;-boot order=dc,once=d
-m megs:虛擬機(jī)的內(nèi)存大幸ゼ稹;
-name NAME:當(dāng)前虛擬機(jī)的名稱族展,要惟一森缠;
塊設(shè)備相關(guān)的選項:
-hda/-hdb file:指明IDE總線類型的磁盤映射文件路徑;第0和第1個仪缸;
-hdc/-hdd file:第2和第3個贵涵;
-cdrom file:指定要使用光盤映像文件;
-drive [file=file][,if=type][,media=d][,index=i] [,cache=writethrough|writeback|none|directsync|unsafe][,format=f]:
file=/PATH/TO/SOME_IMAGE_FILE:映像文件路徑恰画;
if=TYPE:塊設(shè)備總線類型宾茂,ide, scsi, sd, floppy, virtio,...
media=TYPE:介質(zhì)類型,cdrom和disk拴还;
index=i:設(shè)定同一類型設(shè)備多個設(shè)備的編號跨晴;
cache=writethrough|writeback|none|directsync|unsafe:緩存方式;
format=f:磁盤映像文件的格式片林;
CentOS磁盤鏡像文件下載:
https://cloud.centos.org/centos/7/images/
顯示選項:
-display type:顯示的類型端盆,sdl, curses, none和vnc怀骤;
-nographic:不使用圖形接口;
-vga [std|cirrus|vmware|qxl|xenfb|none]:模擬出的顯卡的型號焕妙;
-vnc display[,option[,option[,...]]]]:啟動一個vnc server來顯示虛擬機(jī)接口蒋伦; 讓qemu進(jìn)程監(jiān)聽一個vnc接口;
display:
(1) HOST:N
在HOST主機(jī)的第N個桌面號輸出vnc焚鹊;
5900+N
(2) unix:/PATH/TO/SOCK_FILE
(3) none
options:
password:連接此服務(wù)所需要的密碼凉敲;
-monitor stdio:在標(biāo)準(zhǔn)輸出上顯示monitor界面;
Ctrl-a, c:在console和monitor之間切換寺旺;
Ctrl-a, h
網(wǎng)絡(luò)選項:
-net nic[,vlan=n][,macaddr=mac][,model=type][,name=str][,addr=str][,vectors=v]
為虛擬機(jī)創(chuàng)建一個網(wǎng)絡(luò)接口爷抓,并將其添加至指定的VLAN;
model=type:指明模擬出的網(wǎng)卡的型號阻塑,ne2k_pci,i82551,i82557b,i82559er,rtl8139,e1000,pcnet,virtio蓝撇;
-net nic,model=?
macaddr=mac:指明mac地址;52:54:00:
-net tap[,vlan=n][,name=str][,fd=h][,fds=x:y:...:z][,ifname=name][,script=file][,downscript=dfile]:
通過物理的TAP網(wǎng)絡(luò)接口連接至vlan n陈莽;
script=file:啟動虛擬機(jī)時要執(zhí)行的腳本渤昌,默認(rèn)為/etc/qemu-ifup
downscript=dfile:關(guān)閉虛擬機(jī)時要執(zhí)行的腳本,/etc/qemu-ifdown
ifname=NAME:自定義接口名稱走搁;
/etc/qemu-ifup
#!/bin/bash
#
bridge=br0
if [ -n "$1" ];then
ip link set $1 up
sleep 1
brctl addif $bridge $1
[ $? -eq 0 ] && exit 0 || exit 1
else
echo "Error: no interface specified."
exit 2
fi
其它選項:
-daemonize:以守護(hù)進(jìn)程運行独柑;
示例1:
~]# qemu-kvm -name c2 -smp 2,maxcpus=4,sockets=2,cores=2 -m 128 -drive file=/images/kvm/cos-i386.qcow2,if=virtio -vnc :1 -daemonize -net nic,model=e1000,macaddr=52:54:00:00:00:11 -net tap,script=/etc/qemu-ifup
示例2:
~]# qemu-kvm -name winxp -smp 1,maxcpus=2,sockets=1,cores=2 -m 1024 -drive file=/data/vms/winxp.qcow2,media=disk,cache=writeback,format=qcow2 file=/tmp/winxp.iso,media=cdrom -boot order=dc,once=d -vnc :1 -net nic,model=rtl8139,macaddr=52:54:00:00:aa:11 -net tap,ifname=tap1,script=/etc/qemu-ifup -daemonize
半虛擬化:virtio
建議:Network IO, Disk IO使用virtio,性能會有顯著提升私植;
dnsmasq:
listen-address=192.168.1.132,127.0.0.1
dhcp-range=192.168.1.50,192.168.1.150,48h
dhcp-option=3,192.168.0.1
8忌栅、virsh命令:
虛擬機(jī)的生成需要依賴于預(yù)定義的xml格式的配置文件;其生成工具有兩個:virt-manager, virt-install曲稼;
virsh [OPTION]... COMMAND [ARG]..
子命令的分類:
Domain Management (help keyword 'domain')
Domain Monitoring (help keyword 'monitor')
Host and Hypervisor (help keyword 'host')
Interface (help keyword 'interface')
Networking (help keyword 'network')
Network Filter (help keyword 'filter')
Snapshot (help keyword 'snapshot')
Storage Pool (help keyword 'pool')
Storage Volume (help keyword 'volume')
Domain Management (help keyword 'domain')
創(chuàng)建虛擬機(jī):
create:從xml格式的配置文件創(chuàng)建并啟動虛擬機(jī)索绪;
define:從xml格式的配置文件創(chuàng)建虛擬機(jī);
停止:
destroy:強(qiáng)行關(guān)機(jī)贫悄;
shutdown:關(guān)機(jī)瑞驱;
啟動:
start:啟動
reboot:重啟;
undefine:刪除虛擬機(jī)窄坦;
suspend/resume:暫停于內(nèi)存中唤反,或繼續(xù)運行暫停狀態(tài)的虛擬機(jī);
真正實現(xiàn)的效果:pause/unpause
save/restore:保存虛擬機(jī)的當(dāng)前狀態(tài)至文件中鸭津,或從指定文件恢復(fù)虛擬機(jī)彤侍;
console:連接至指定domain的控制臺;
域的設(shè)備資源管理:
cpu-stats
vcpuinfo
vcpucount
setvcpus
vcpupin
setmaxmem
setmem
attach-disk/detach-disk/domblklist:磁盤設(shè)備的熱插拔曙博;
attach-interface/detach-interface/domiflist:網(wǎng)絡(luò)接口設(shè)備的熱插拔拥刻;
type:bridge
source:BRIDGE_NAME
注意 :無須事先創(chuàng)建網(wǎng)絡(luò)接口設(shè)備;
Domain Monitoring (help keyword 'monitor')
domiflist
domblklist
...
9父泳、圖形管理工具:
kimchi:基于H5研發(fā)web GUI; virt-king般哼;
OpenStack: IaaS
oVirt:
proxmox:
管理工具棧:https://www.linux-kvm.org/page/Management_Tools