1. 程式人生 > >Linux學習總結(七十二)虛擬化之kvm

Linux學習總結(七十二)虛擬化之kvm

虛擬機克隆 sel rap hat 額外 模塊 destroy start -s

一 虛擬化介紹

1 常見虛擬化軟件
VMware系列
VMware workstation、VMware vsphere(VMware esxi)、VMware Fusion(Mac)
Xen 開源 半虛擬化
XenServer 商業,廠商Ctirx,基於Xen的
KVM 開源 基於linux內核模塊
Hyper-V 商業,廠商微軟
Openvz 開源 基於linux 虛擬機和宿主機共用一個內核
VirtualBox 開源 Sun公司開發 Oracle收購Sun
http://developer.huawei.com/ict/forum/thread-23385-1-1.html
2 虛擬化架構
技術分享圖片
參考 http://developer.huawei.com/ict/forum/thread-23385-1-1.html

二 kvm

1 為什麽選擇kvm
Vmware,Xen,Hyper-V 通通收費,剩下openvz了,可是虛擬機要跟宿主機共用內核,比如要裝一個windos虛擬機,實現不了。kvm免費的,而且是作為linux內核的一個功能模塊而存在。因此yum安裝後就能使用,非常方便。
2 kvm 技術
KVM是以色列初創公司Qumranet開發,2008年9月RedHat公司收購了Qumranet
KVM是Linux內核的一個模塊,它把Linux內核變成了一個Hypervisor
KVM是完全開源的,RedHat基於KVM的虛擬化解決方案叫做RHEV
KVM在Linux操作系統裏面以進程的形式出現,由標準的Linux調度程序進行調度,這使得KVM能夠使用Linux內核的已有功能

只有一個KVM內核模塊還不能實現虛擬化的全部功能,就好比操作系統只有內核還不能成為一個完整的操作系統一樣
QEMU是一個開源的虛擬化軟件,純軟件,可以虛擬化所以的硬件,性能不強
KVM基於QEMU開發了一個能夠運行在用戶空間的工具QEMU-KVM
磁盤、網絡設備等都是通過QEMU-KVM這個工具模擬出來的
KVM和QEMU-KVM通信是通過/dev/kvm實現的
libvirt是用來管理KVM虛擬機的API,其命令為virsh
技術分享圖片
3 Centos7上安裝KVM
前提是CPU支持虛擬化
虛擬機設置內存2G,增加一個50G的虛擬磁盤,處理器2核,虛擬化引擎兩個虛擬化相關的選項打上對勾

關閉iptables或者firewalld
systemctl stop iptables
systemctl stop firewalld
關閉selinux
setenforce 0
vim /etc/selinux/config
設置SELINUX=disabled
格式化新磁盤,掛載到/kvm
mkfs.ext4 /dev/sdc
blkid /dev/sdc
mkdir /kvm
mount /dev/sdc /kmv
添加開機自動掛載
vim /etc/fstab
對照之前的掛載規則,增加一條
/dev/sdc                /kvm                ext4    defaults        0 0

下載一個centos7的鏡像文件
檢查cpu參數是否支持虛擬化
grep -Ei ‘vmx|svm‘ /proc/cpuinfo
安裝kvm
yum install -y virt-* libvirt bridge-utils qemu-img
4 配置網卡並安裝centos7
配置網卡,增加橋接網卡
設置一個br0網卡,TYPE為Bridge,IP地址設置為ens33的ip
ens33配置文件裏把IP地址去掉,增加BRIDGE=br0
檢查KVM模塊是否加載
lsmod|grep kvm
啟動libvirtd服務
systemctl start libvirtd
brctl show可以看到兩個網卡br0和virbr0
命令行安裝centos7
virt-install --name=lvlinux01 --memory=512,maxmemory=1024 --vcpus=1,maxvcpus=2 --os-type=linux --os-variant=rhel7 --location=/tmp/CentOS-7-x86_64-DVD-1708.iso --disk path=/kvm/lvlinux01.img,size=10 --bridge=br0 --graphics=none --console=pty,target_type=serial --extra-args="console=tty0 console=ttyS0"
5 虛擬機管理
安全完虛擬機需要重啟,要退出虛擬機使用快捷鍵ctrl ]
ps aux |grep kvm//查看kvm進程
virsh list //查看虛擬機列表,只能看到運行的虛擬機
virsh list --all //查看虛擬機列表,包括未運行的虛擬機
virsh console lvlinux01//進入指定虛擬機
virsh shutdown lvlinux01 //關閉虛擬機
virsh start lvlinux01 //開啟虛擬機
virsh destroy lvlinux01//類似stop,這個是強制停止
virsh undefine lvlinux01//徹底銷毀虛擬機,會刪除虛擬機配置文件,virsh list --all就看不到了
ls /etc/libvirt/qemu/ //可以查看虛擬機配置文件
virsh autostart lvlinux01//宿主機開機該虛擬機也開機
virsh autostart --disable lvlinux01//解除開機啟動
virsh suspend lvlinux01//掛起
virsh resume lvlinux01//恢復
6 虛擬機克隆
virsh shutdown lvlinux01
virt-clone --original lvlinux01 --name lvlinux02 --file /kvm/lvlinux02.img
--original指定克隆源虛擬機
--name指定克隆後的虛擬機名字
--file指定目標虛擬機的虛擬磁盤文件
如果lvlinux01虛擬機開機狀態,則提示先關閉或者暫停虛擬機
7 快照管理
創建快照 virsh snapshot-create lvlinux01
raw格式的虛擬磁盤不支持做快照,qcow2支持
qemu-img info /kvm/lvlinux01.img //查看lvlinux01.img信息,同時會查看到快照列表
virsh snapshot-list lvlinux01//列出所有快照
virsh snapshot-current lvlinux01//查看當前快照版本
ls /var/lib/libvirt/qemu/snapshot/lvlinux01//查看所有快照配置文件
virsh snapshot-revert lvlinux01 1513440854//恢復指定快照
virsh snapshot-delete lvlinux01 1513440854//刪除快照
8 磁盤格式
虛擬磁盤常用格式raw、qcow2
qemu-img info /kvm/lvlinux01.img//查看虛擬磁盤格式
qemu-img create -f raw /kvm_data/lvlinux01_2.img 2G//創建2G的raw格式磁盤
把raw格式的磁盤轉換為qcow2格式
qemu-img convert -O qcow2 /kvm/lvlinux01_2.img /kvm/lvlinux01_2.qcow2
轉換後用ls -lh查看磁盤文件的大小,可以看到qcow2文件比較小,raw文件大小和我們指定空間大小一樣是2G
raw格式的磁盤性能比qcow2要好,但是raw格式的磁盤無法做快照
給lvlinux02轉換為raw格式的磁盤
virsh shutdown lvlinux02
qemu-img convert -O raw /kvm/lvlinux02.img /kvm/lvlinux02_3.raw
virsh edit lvlinux02//更改格式和文件路徑
virsh start lvlinux02
9 磁盤擴容 – raw格式

qemu-img resize /kvm/lvlinux02_3.raw +2G
qemu-img info /kvm/lvlinux02_3.raw 
virsh destroy lvlinux02
virsh start lvlinux02
virsh console lvlinux02

fdisk -l 查看磁盤情況,並分新的分區
除了對已有磁盤擴容外,還可以額外增加磁盤

qemu-img create -f raw /kvm/lvlinux02_2.raw 5G
virsh edit lvlinux02 //增加<disk>…</disk>,註意更改source、target、slot
virsh destroy lvlinux02
virsh start lvlinux02

磁盤擴容 – qcow2格式
qemu-img resize /kvm/lvlinux01.img +2G
若提示qemu-img: Can‘t resize an image which has snapshots,需要刪除快照
qemu-img info /kvm/lvlinux01.img
virsh destroy lvlinux01
virsh start lvlinux01
virsh console lvlinux01
fdisk -l 查看磁盤情況,並分新的分區
除了對已有磁盤擴容外,還可以額外增加磁盤
qemu-img create -f qcow2 /kvm/lvlinux01_2.img 5G
virsh edit lvlinux01 //增加<disk>…</disk>,註意更改source、target、slot
virsh destroy lvlinux01
virsh start lvlinux01
10 調整cpu、內存、網卡
virsh dominfo lvlinux01 //查看配置
virsh edit lvlinux01//更改如下部分內容

 <memory unit=‘KiB‘>1048576</memory>
  <currentMemory unit=‘KiB‘>524288</currentMemory>
  <vcpu placement=‘static‘ current=‘1‘>2</vcpu>

virsh shutdown lvlinux01
virsh start lvlinux01
virsh setmem lvlinux01 800m//動態調整內存
virsh dumpxml lvlinux01 &gt; /etc/libvirt/qemu/lvlinux01.xml//需要把配置寫入到配置文件裏
virsh setvcpus lvlinux01 2 //動態調整cpu數量
virsh domiflist lvlinux01//查看網卡
virsh attach-interface lvlinux01 --type bridge --source virbr0//增加一塊新的網卡,並設置為nat網絡模式(virbr0類似vmware的vmnet8),這裏如果寫--source br0,則網絡模式為橋接
virsh dumpxml lvlinux01 &gt; /etc/libvirt/qemu/lvlinux01.xml//需要把配置寫入到配置文件裏
11 遷移虛擬機
該方式要確保虛擬機是關機狀態
virsh shutdown lvlinux01
virsh dumpxml lvlinux01 &gt; /etc/libvirt/qemu/lvlinux03.xml // 如果是遠程機器,需要把該配置文件拷貝到遠程機器上
virsh domblklist lvlinux01 //查看虛擬機磁盤所在目錄
rsync -av /kvm/lvlinux01.img /kvm/lvlinux03.img //如果是遷移到遠程,則需要把該磁盤文件拷貝到遠程機器上
vi /etc/libvirt/qemu/lvlinux03.xml //因為是遷移到本機,配置文件用的是lvlinux01子機的配置,不改會有沖突,所以需要修改該文件,如果是遠程機器不用修改
修改domname: <name>lvlinux03</name>
修改uuid(隨便改一下數字,位數不要變)
修改磁盤路徑
virsh define /etc/libvirt/qemu/lvlinux03.xml//定義新虛擬機
virsh list --all //會發現新遷移的lvlinux03虛擬機

Linux學習總結(七十二)虛擬化之kvm