天天看點

KVM虛拟化

虛拟化是雲計算的一種具體實作方式,KVM是紅帽核心內建的虛拟化技術。在使用者态使用qemu來實作網卡、硬碟等裝置的虛拟化.

KVM是核心級别的虛拟機,需要CPU硬體的支援虛拟化。

檢視CPU是否支援虛拟化:

1

<code>grep</code> <code>-E </code><code>'(vmx|svm)'</code> <code>/proc/cpuinfo</code>

如果有vmx或者svm的标示,就表示CPU支援虛拟化。

KVM環境部署

在使用KVM建立虛拟機,需要安裝相關的軟體包:

<code> </code><code>yum </code><code>install</code> <code>-y qemu-kvm  libvirt virt-</code><code>install</code>

這裡做一個說明:

qemu-kvm: 主要是KVM使用者态的管理工具,來幫助我們管理KVM

libvirt: 虛拟化管理工具,當libvirtd程序終止後,正在運作的虛拟機不受影響。

virt-install: 安裝虛拟機的工具,調用libvirt的API來進行管理。

啟動libvirt:

<code>systemctl  start libvirtd</code>

啟動之後,通ifconfig指令可以看到系統自動添加了一塊橋接網卡virbr0.

啟動之後,會出現一個自動啟動一個DNS和dhcp的程序dnsmasq:

2

3

4

5

6

<code># ps aux|grep dns</code>

<code>nobody   11349  0.0  0.0  15552   888 ?        S    11:59   0:00 </code><code>/sbin/dnsmasq</code> <code>--conf-</code><code>file</code><code>=</code><code>/var/lib/libvirt/dnsmasq/default</code><code>.conf --leasefile-ro --dhcp-script=</code><code>/usr/libexec/libvirt_leaseshelper</code>

<code>root     11350  0.0  0.0  15524   180 ?        S    11:59   0:00 </code><code>/sbin/dnsmasq</code> <code>\</code>

<code>--conf-</code><code>file</code><code>=</code><code>/var/lib/libvirt/dnsmasq/default</code><code>.conf --leasefile-ro \</code>

<code>--dhcp-script=</code><code>/usr/libexec/libvirt_leaseshelper</code>

<code>root     11380  0.0  0.0 112648   968 pts</code><code>/0</code>    <code>S+   12:01   0:00 </code><code>grep</code> <code>--color=auto dns</code>

建立一個raw格式,容量為10G的虛拟磁盤:

<code># qemu-img create -f raw /opt/CentOS-7-x86_64.raw 10G</code>

<code>Formatting </code><code>'/opt/CentOS-7-x86_64.raw'</code><code>, </code><code>fmt</code><code>=raw size=10737418240</code>

在本地的tmp目錄下上傳一個CS7的安裝鏡像,使用此鏡像來安裝虛拟機

安裝虛拟機:

<code>virt-</code><code>install</code> <code>--virt-</code><code>type</code> <code>kvm --name CentOS-7-x86_64 --</code><code>ram</code> <code>2048 \</code>

<code>--cdrom=</code><code>/tmp/CentOS-7</code><code>.2-x86_64-DVD-1511.iso --disk path=</code><code>/opt/CentOS-7-x86_64</code><code>.raw \</code>

<code>--network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole</code>

<code>Starting </code><code>install</code><code>...</code>

<code>Creating domain...                                                  |    0 B  00:00:00     </code>

<code>Domain installation still </code><code>in</code> <code>progress. You can reconnect to </code>

<code>the console to complete the installation process.</code>

提示:也可以使用一次性指定磁盤大小的方式,磁盤檔案會根據資料量的大小變化而變化:

<code>virt-</code><code>install</code>  <code>--virt-</code><code>type</code> <code>kvm --name CS7-1c2g20g  --</code><code>ram</code> <code>2048  -vcpus=1 -s 20 -c  \</code>

<code>/vm/iso/CentOS-7-x86_64-Minimal-1511</code><code>.iso --hvm  --os-</code><code>type</code><code>=linux -f </code><code>/vm/1c2g20g</code><code>.img \</code>

<code>--graphics vnc,listen=0.0.0.0 --noautoconsole</code>

-s指定虛拟磁盤大小為20G。

輸入指令之後,顯示已經在開始安裝,此時,可以通過vnc遠端連接配接到主控端上,使用預設的端口,檢視到系統安裝界面:

<code># netstat -lntup|grep kvm</code>

<code>tcp        0      0 0.0.0.0:5900            0.0.0.0:*               LISTEN      19516</code><code>/qemukvm</code>

 虛拟機安裝完成之後不會自動啟動,需要輸入啟動指令:

7

<code>[root@localhost ~]</code><code># virsh  list --all  # 檢視虛拟機狀态</code>

<code> </code><code>Id    Name                           State</code>

<code>----------------------------------------------------</code>

<code> </code><code>-     CentOS-7-x86_64                shut off</code>

<code> </code> 

<code>[root@localhost ~]</code><code># virsh start CentOS-7-x86_64  # 啟動指定的虛拟機</code>

<code>Domain CentOS-7-x86_64 started</code>

虛拟機是通過一個xml的檔案來配置的,一般在/etc/libvirt/qemu目錄下,預設是不能修改的,隻是一個靜态狀态檔案,可以通過virsh edit CentOS-7-x86_64 來對目前的CentOS-7-x86_64虛拟機進行修改,可以動态的修改記憶體和CPU。

虛拟機的管理

在對虛拟機進行管理時,我們需要使用virsh 指令,來完成一系列對虛拟機的操作。

8

<code>[root@localhost ~]</code><code># virsh list     # 列出目前活動的虛拟機,如果是關閉狀态。需要加 --all 參數</code>

<code> </code><code>2     CentOS-7-x86_64                running</code>

<code>[root@localhost ~]</code><code># virsh dumpxml CentOS-7-x86_64 &gt; backup.xml   # 備份指定虛拟機的xml檔案</code>

<code>[root@localhost ~]</code><code># virsh undefine CentOS-7-x86_64   # 删除虛拟機,實質是移除了xml 檔案,這樣如  </code>

<code>                                                     </code><code># 果xml 檔案沒有備份,或者已經移除虛拟硬碟,虛拟機将無法恢複!</code>

<code>Domain CentOS-7-x86_64 has been undefined</code>

恢複undefine的xml檔案,需要确認xml檔案是否備份成功,否則無法恢複:

<code>[root@localhost ~]</code><code># virsh define backup.xml </code>

<code>Domain CentOS-7-x86_64 defined from backup.xml</code>

<code>[root@localhost ~]</code><code># virsh list --all</code>

挂起虛拟機:

<code>[root@localhost ~]</code><code># virsh suspend CentOS-7-x86_64</code>

<code>Domain CentOS-7-x86_64 suspended</code>

<code>[root@localhost ~]</code><code># virsh  list</code>

<code> </code><code>3     CentOS-7-x86_64                paused</code>

重新喚醒虛拟機:

<code>[root@localhost ~]</code><code># virsh resume CentOS-7-x86_64</code>

<code>Domain CentOS-7-x86_64 resumed</code>

<code> </code><code>3     CentOS-7-x86_64                running</code>

虛拟機還可以建立快照,但是隻支援qcow格式。

CPU和記憶體動态擴容

CPU擴容

使用KVM虛拟機可以動态對其進行CPU和記憶體的擴容,使用virsh edit指令:

<code># virsh edit CentOS-7-x86_64</code>

<code> </code><code>&lt;vcpu placement=</code><code>'auto'</code> <code>current=</code><code>"1"</code><code>&gt;4&lt;</code><code>/vcpu</code><code>&gt;  </code><code># 需要修改的vcpu内容,最大支援4個</code>

執行指令:

<code>[root@localhost ~]</code><code># virsh setvcpus CentOS-7-x86_64 2 --live # 動态的将VCPU添加到2個</code>

<code>error: invalid argument: requested vcpus is greater than max allowable vcpus </code><code>for</code> <code>the live domain: 2 &gt; 1</code>

當然前提是需要有足夠的CPU

記憶體擴容

使用相同的方式,對檔案進行修改:

<code> </code><code>&lt;memory unit=</code><code>'KiB'</code><code>&gt;2097152&lt;</code><code>/memory</code><code>&gt;    </code><code># 此處可以設定最大記憶體</code>

<code>  </code><code>&lt;currentMemory unit=</code><code>'KiB'</code><code>&gt;2097152&lt;</code><code>/currentMemory</code><code>&gt;</code>

使用virsh 指令調整記憶體:

<code>[root@localhost ~]</code><code># virsh qemu-monitor-command CentOS-7-x86_64 --hmp --cmd balloon 512</code>

<code>[root@localhost ~]</code><code># virsh qemu-monitor-command CentOS-7-x86_64 --hmp --cmd info balloon </code>

<code>balloon: actual=512  </code><code># 檢視記憶體大小</code>

<code>[root@localhost ~]</code><code># virsh qemu-monitor-command CentOS-7-x86_64 --hmp --cmd balloon 1024</code>

<code>balloon: actual=1024  </code><code>#檢視記憶體大小</code>

調整之後,在虛拟機中就可以看到記憶體已經變化了。

KVM磁盤管理

qemu支援兩種磁盤鏡像格式:qcow和raw

qcow鏡像格式是 QEMU 模拟器支援的一種磁盤鏡像。它也是可以用一個檔案的形式來表示一塊固定大小的塊裝置磁盤.qcow鏡像可以用來儲存另一個鏡像檔案的變化,它并不去修改原始鏡像檔案,隻記錄與原始鏡像檔案的不同即可,可以用于快照。

可以檢視raw鏡像的資訊:

<code># qemu-img info CentOS-7-x86_64.raw </code>

<code>image: CentOS-7-x86_64.raw</code>

<code>file</code> <code>format</code><code>: raw</code>

<code>virtual size: 10G (10737418240 bytes)</code>

<code>disk size: 1.0G</code>

QEMU 軟體包裡面提供的 qemu-img 工具可以将raw格式轉化為qemu格式:

<code># qemu-img convert -f raw -O qcow2  CentOS-7-x86_64.raw CentOS-7-x86_64.</code>

<code>qcow2</code>

建立橋接網卡

KVM虛拟機預設是以NAT的方式連接配接網絡的,這就必然需要使用iptables,在有些情況下需要關閉iptables或便于管理,我們會讓虛拟機使用橋接的方式與主控端通信。步驟如下(在實際操作中最好使用腳本實作):

<code>brctl addbr br0   </code><code>#建立橋接網卡</code>

<code>brctl addif br0 eth0  </code><code># 将橋接網卡綁定到eth0上。</code>

<code>ip addr del dev eth0 192.168.1.11</code><code>/24</code>  <code># 删除eth0上的IP ,此步操作會與主機斷開連接配接</code>

<code>ifconfig</code> <code>br0 192.168.1.11</code><code>/24</code>  <code>up      </code><code># 在br0上添加IP</code>

<code>route add default gw 192.168.1.2    </code><code># 添加預設路由</code>

同時,需要修改配置虛拟機XML檔案,為橋接模式:

<code>  </code><code>&lt;interface </code><code>type</code><code>=</code><code>'bridge'</code><code>&gt;</code>

<code>      </code><code>&lt;mac address=</code><code>'52:54:00:6a:36:1f'</code><code>/&gt;</code>

<code>      </code><code>&lt;</code><code>source</code> <code>bridge=</code><code>'br0'</code><code>/&gt;</code>

修改之後在主控端上重新開機虛拟機,然後修改虛拟機的ip即可完成橋接網卡的配置。

 本文轉自 酥心糖 51CTO部落格,原文連結:http://blog.51cto.com/tryingstuff/1883643

繼續閱讀