VIRTUALIZATION
虛擬化
WHAT IS VIRTUALIZATION?
把一台系統切成很多獨立的小系統
WHY VIRTUALIZE?
有什麼好處 ?
MULTI PLATFORM
一台電腦可以同時跑不同的作業系統
ISOLATION
隔離不同的使用者或服務
小明寫系程作業把工作站 搞爆了
大家一起死
小明把系上分給他的 VM 搞爆了
只有小明交不出作業
CONSOLIDATION
增加硬體使用率、降低成本
小公司架了 WEB, MAIL, FT P, SCM, 每台機器只用 5%
花很多冤枉錢
所有服務集中到一台,總 共用 20%
只買一台,省了 75% 的花費
硬體也是要人照顧的
少點機器,少點人力
EASY DEPLOYMENT
一個映像檔跑天下
HIGH AVAILABILITY
硬體壞了, VM 馬上搬到下一台去跑
VIRTUALIZE WHAT?
硬體、儲存空間、網路
HARDWARE VIRTUALIZATIO N
三大宗
FULL VIRTUALIZATION
完全模擬一台機器必備的硬體
VMware, VirtualBox, Hyper-V, KVM, QEMU…..
FULL VIRTUALIZATION 之 HARDWARE ASSISTED
Full Virtualization 很吃資源,有 CPU 幫忙比較 好
Xen HWM
PARAVIRTUALIZATION
透過軟體 (Hypervisor) 處理需要虛擬化的指令
。
效能高,但 OS 要客製化。
Xen, VMware VMI
OS-LEVEL VIRTUALIZATION
OS 裡面隔出不同的房間
同個屋簷下,會被鄰居吵到 同一棟房子 ( 同一種 OS) LXC, OpenVZ, FreeBSD Jails….
NO VIRTUALIZATION
大通鋪,床位先搶先贏,搶輸了站門外
XEN
External Hypervisor
WHAT’S GOOD ABOUT XEN?
Mature products and 3
rd
party support Can also be installed with LinuxAPI and easy to use tools
THE NOT SO GOOD
Can only use tools
RedHat dropped support
XEN PRODUCTS
Citrix XenServer
Citrix Cloud Platform Oracle VM
KVM
KERNEL VIRTUAL MACHINE
Included in mainstream Linux Kernel
MAINSTREAM KERNEL
Get it with every Linux kernel
A set of kernel interfaces and APIs QEMU frontend
EACH VM IS A PROCESS
Each virtual CPU core is a thread
VM Scheduling, Memory management, Hardware drivers – all provided by Linux
Take advantage of Linux features: KSM, Hugepages
HOW TO USE KVM?
/usr/bin/kvm -enable-kvm -m 1024 -smp 1 -drive file=linux.img
SERIOUSLY?
/usr/bin/kvm -S -M pc-1.1 -enable-kvm -m 1024 -smp 1,sockets=1,cores=1,threads=1 -name list -uuid 6865eebb-e6aa-c7f8-499a-d3ba663b5dd4 -nographic -nodefconfig -nodefaults -chardev
socket,id=charmonitor,path=/var/lib/libvirt/qemu/list.monitor,server,nowait -mon
chardev=charmonitor,id=monitor,mode=control -rtc base=utc -no-shutdown -device piix3-usb- uhci,id=usb,bus=pci.0,addr=0x1.0x2 -drive file=/mnt/qcow/list.qcow2,if=none,id=drive-virtio-
disk0,format=qcow2 -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x4,drive=drive-virtio-disk0,id=virtio- disk0,bootindex=1 -netdev tap,fd=26,id=hostnet0 -device
rtl8139,netdev=hostnet0,id=net0,mac=52:54:00:5f:68:2a,bus=pci.0,addr=0x3 -chardev pty,id=charserial0 -device isa-serial,chardev=charserial0,id=serial0 -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x5
WAY TOO UGLY!!
Anything better?
LIBVIRT
A toolkit to interact with many common virtualization systems.
VIRSH
CLI tool included with Libvirt
Manipulate libvirt and underlaying VMs with commands and XML files
EXAMPLE: STOP VM
# virsh stop test-vm
EXAMPLE: CREATE VM
Create definition XML file
http://libvirt.org/formatdomain.html
# virsh create VM.xml
DON’T LIKE XML?
VIRT-INSTALL
CLI tool for creating/importing and installing VMs
EXAMPLE: CREATE VM
# virt-install \
--name demo \ --ram 512 \
--disk /home/user/VMs/mydisk.img \
--import
CREATE AND INSTALL
# virt-install \
--virt-type kvm \ --name demo \
--ram 512 \
--disk path=/vm/demo.img,size=20 \
--cdrom /dev/cdrom
DON’T LIKE CLI?
Are you serious?
VIRT-MANAGER
GUI frontend for libvirt
EXTRA STUFF TO MANAGE
Networking LVM storage
Libvirt can do it for you