天天看點

Openstack 實戰講解之-----------02-控制節點kvm虛拟化配置

KVM虛拟化的特性

嵌入到linux正式kernel(提高了相容性)

代碼級資源調用(提高性能)

虛拟機就是一個程序(記憶體易于管理)

直接支援NUMA技術(提高擴充性)

雖然被RedHat收購了,但是依然保持開源發展模式,社群活躍

更好的商業支援及服務保障

CentOS7較CentOS6預設支援cpu熱添加,記憶體熱添加,大頁記憶體預設都是開啟的。

支援虛拟化的條件

Inter的cpu簡稱為:VMX

AMD的cpu簡稱為:SVM

VMware需要開啟如下兩個條件即可,如果是實體機,需要在bios裡面設定,預設都是開啟的。

通過下面的指令檢視虛拟化資訊:

KVM的安裝實戰

安裝管理工具和virt指令

1

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

2

3

<code>Kvm:linux核心的一個子產品,子產品不需要安裝,隻需要加載</code>

<code>Qemu:虛拟化軟體,可以虛拟不同的cpu,支援異構(x86架構可虛拟化出不是x86的架構)</code>

<code>Qemu-kvm:使用者态管理kvm,網卡,聲霸卡,PCI裝置等都是qemu來管理的</code>

建立虛拟磁盤

<code>qemu-img create -f raw </code><code>/opt/Centos7_x86_64</code><code>.raw 10G</code>

<code>Formatting </code><code>'/opt/Centos7_x86_64.raw'</code><code>, </code><code>fmt</code><code>=raw size=10737418240</code>

建立qcow2格式的虛拟磁盤

<code>qemu-img create -f qcow2 </code><code>/opt/Centos7_x86_64</code><code>.qcow2 10G</code>

<code>Formatting </code><code>'/opt/Centos7_x86_64.qcow2'</code><code>, </code><code>fmt</code><code>=qcow2 size=10737418240 encryption=off cluster_size=65536 lazy_refcounts=off refcount_bits=16</code>

轉換虛拟磁盤格式:

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

qcow2和raw的差別:

1.raw    建立多大占用多大磁盤空間

2.qcow2  占用磁盤大小根據使用量來決定 -&gt;

4

5

6

7

8

9

10

11

12

13

14

15

16

<code>[root@linux-node1 ~]</code><code># qemu-img info /opt/Centos7_x86_64.raw </code>

<code>image: </code><code>/opt/Centos7_x86_64</code><code>.raw</code>

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

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

<code>disk size: 0</code>

<code>[root@linux-node1 ~]</code><code># qemu-img info /opt/Centos7_x86_64.qcow2 </code>

<code>image: </code><code>/opt/Centos7_x86_64</code><code>.qcow2</code>

<code>file</code> <code>format</code><code>: qcow2</code>

<code>disk size: 196K</code>

<code>cluster_size: 65536</code>

<code>Format specific information:</code>

<code>    </code><code>compat: 1.1</code>

<code>    </code><code>lazy refcounts: </code><code>false</code>

<code>    </code><code>refcount bits: 16</code>

<code>    </code><code>corrupt: </code><code>false</code>

顯示核心中kvm的狀态:

<code>[root@linux-node1 ~]</code><code># lsmod |grep kvm</code>

<code>kvm_intel             162153  0 </code>

<code>kvm                   525259  1 kvm_intel</code>

啟動管理工具服務:

<code>[root@linux-node1 ~]</code><code># systemctl enable libvirtd</code>

<code>[root@linux-node1 ~]</code><code># systemctl start libvirtd</code>

<code>[root@linux-node1 ~]</code><code># systemctl status libvirtd</code>

上傳鏡像到node1機器中

<code>[root@linux-node1~]</code><code># cd /opt/</code>

<code>[root@linux-node1opt]</code><code>#</code>

<code>wget http:</code><code>//mirrors</code><code>.aliyun.com</code><code>/centos/7</code><code>.2.1511</code><code>/isos/x86_64/CentOS-7-x86_64-DVD-1511</code><code>.iso                                                </code>

<code>法二:</code>

<code>利用CRT的SFTP上傳</code>

<code>CRT==&gt; File ==&gt; Connect SFTP Session (英文版CRT)</code>

<code>CRT==&gt; 檔案 ==&gt; 連接配接到SFTP            (中文版CRT)</code>

<code>sftp</code><code>&gt;</code><code>cd</code> <code>/opt</code>

<code>sftp</code><code>&gt;put D:</code><code>/ISO/CentOS-7-x86_64-DVD-1511</code><code>.iso     </code><code># 将鏡像上傳到/opt下 </code>

<code> </code> 

<code>法三:</code>

<code>[root@linux-node1opt]</code><code># dd if=/dev/cdrom of=/opt/CentOS-7.1-x86_64.iso</code>

建立虛拟機:

<code> </code><code>virt-</code><code>install</code> <code>--virt-</code><code>type</code> <code>kvm --name Centos7.2_mini_x64 --</code><code>ram</code> <code>1024 --cdrom=</code><code>/tmp/CentOS-7-x86_64-Minimal-1611</code><code>.iso --disk path=</code><code>/opt/Centos7_x86_64</code><code>.qcow2 --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole</code>

  建立完畢的檢查指令:

<code>[root@linux-node1 tmp]</code><code># virsh list --all</code>

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

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

<code> </code><code>1     Centos7.2_mini_x64             running</code>

生成kvm虛拟機:virt-install

檢視再運作的虛拟機:virsh list

檢視kvm虛拟機配置檔案:virsh dumpxml name

啟動kvm虛拟機:virsh start name

正常關機:virsh shutdown name

非正常關機:virsh destroy name

删除:virsh undefine name  (徹底删除,無法找回,除非備份xml檔案)

根據配置檔案定義虛拟機:virsh define file-name.xml

挂起,終止:virsh suspend name

回複挂起狀态:virsh resumed name

17

18

<code>[root@linux-node1opt]</code><code># cd /etc/libvirt/qemu/               &lt;- 虛拟機xml路徑 -&gt;</code>

<code>[root@linux-node1qemu]</code><code># ll</code>

<code>total4</code>

<code>-rw-------1 root root 3887 Dec 11 11:19 CentOS-7-x86_64.xml &lt;-虛拟機xml檔案-&gt;</code>

<code>注:修改虛拟機xml檔案不直接修改上文所述檔案,要在用virsh管理指令修改</code>

<code>virsh</code><code># edit CentOS-7-x86_64                               &lt;- 控制台内修改 -&gt;</code>

<code>[root@linux-node1qemu]</code><code># virsh edit CentOS-7-x86_64        &lt;- 控制台外修改 -&gt;</code>

<code>注:熱添加的CPU數不能超過最大值</code>

<code>[root@linux-node1qemu]</code><code># virsh edit CentOS-7-x86_64        &lt;- 編輯配置檔案 -&gt;</code>

<code>&lt;vcpuplacement=</code><code>'static'</code><code>&gt;1&lt;</code><code>/vcpu</code><code>&gt;                          &lt;- 修改此行内容 -&gt;</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;  &lt;- 目前為1 自動擴容 最大為4 -&gt;</code>

<code>[root@linux-node1~]</code><code># virsh shutdown CentOS-7-x86_64       &lt;- 關閉虛拟機 -&gt;</code>

<code>DomainCentOS-7-x86_64 is being </code><code>shutdown</code>

<code>[root@linux-node1~]</code><code># virsh start CentOS-7-x86_64          &lt;- 開啟虛拟機 -&gt;</code>

<code>DomainCentOS-7-x86_64 started</code>

<code>沒有熱添加cpu之前先檢視cpu的個數</code>

<code> </code><code>virsh setvcpusCentOS-7-x86_64 2 --live  </code>

<code>&lt;- </code>

<code>熱添加CPU -&gt;</code>

添加完cpu後,檢視cpu個數:

l  激活cpu

<code>[root@linux-node1~]</code><code># echo "1" &gt; /sys/devices/system/cpu/cpu1/online</code>

<code>高版本的kvm不需要這樣做,直接可以激活</code>

<code>[root@linux-node1~]</code><code># cat /sys/devices/system/cpu/cpu0/online </code>

<code>1</code>

<code>[root@linux-node1~]</code><code># cat /sys/devices/system/cpu/cpu1/online </code>

<code>1 </code>

<code>第二種添加cpu的方法:安裝時指定</code>

<code>[root@linux-node1~]</code><code># virt-install –vcpus 5 –vcpus 5,maxcpus=10,cpuset=1-4,6,8 –vcpussockets=2,cores=4,thread=2</code>

記憶體的設定擁有一個“氣球(balloon)機制”,可以增大減少,但是也要設定一個最大值,預設并沒有設定最大值,也可以在安裝的時候指定

<code>[root@linux-node1~]</code><code># virsh edit CentOS-7-x86_64            &lt;- 編輯配置檔案 -&gt;</code>

<code>&lt;memoryunit=</code><code>'KiB'</code><code>&gt;4194304&lt;</code><code>/memory</code><code>&gt;                          &lt;- 最大記憶體:4G -&gt;</code>

<code>&lt;currentMemoryunit=</code><code>'KiB'</code><code>&gt;1048576&lt;</code><code>/currentMemory</code><code>&gt;            &lt;- 目前記憶體:1G -&gt;</code>

<code>[root@linux-node1~]</code><code># virsh qemu-monitor-command CentOS-7-x86_64 --hmp --cmd info balloon                                                      &lt;- 檢視目前記憶體 -&gt;</code>

<code>[root@linux-node1~]</code><code># virsh qemu-monitor-command CentOS-7-x86_64 --hmp --cmd balloon 512                                                 &lt;- 修改記憶體:512 -&gt;</code>

預設情況下是NAT,但是在生産環境,使用的更多的是橋接模式,更改虛拟機為網橋模式

網橋的基本原理就是建立一個橋接接口br0,在屋裡網卡和虛拟網絡接口之間傳遞資料。

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

<code>[root@linux-node1~]</code><code># brctl addbr br0                      &lt;- 添加網橋br0 -&gt;</code>

<code>[root@linux-node1~]</code><code># brctl addif br0 eth0                  &lt;- 橋接br0和eth0 -&gt;</code>

<code>注:此時會斷網如果是遠端操作伺服器不在身邊,建議寫成腳本來執行</code>

<code>[root@linux-node1 ~]</code><code># ip addr del dev eth0192.168.56.11/24 &lt;- 删除eth0的IP -&gt;</code>

<code>[root@linux-node1 ~]</code><code># ifconfig br0192.168.56.11/24 up     &lt;- 給br0設定IP -&gt;</code>

<code>[root@linux-node1 ~]</code><code># route add default gw192.168.56.2       &lt;- 給br0設定網關 -&gt;</code>

<code>為了避免斷網,直接寫成腳本即可:</code>

<code>#!/bin/bash</code>

<code>brctl addbr br0</code>

<code>brctl addif br0 eth0</code>

<code>ip addr del dev eth0192.168.56.11</code><code>/24</code>

<code>ifconfig</code> <code>br0192.168.56.11</code><code>/24</code> <code>up</code>

<code>route add default gw192.168.56.2</code>

<code>[root@linux-node1 ~]</code><code>#virsh edit CentOS-7-x86_64     &lt;- 修改虛拟機配置 -&gt;</code>

<code>将:</code>

<code>&lt;interfacetype=</code><code>'network'</code>                            <code>&lt;- 虛拟機網絡連接配接方式-&gt;</code>

<code>  </code><code>&lt;mac address=</code><code>'52:54:00:0b:f8:a5'</code><code>/&gt;</code>

<code>  </code><code>&lt;</code><code>source</code> <code>network=</code><code>'default'</code><code>/&gt;                        &lt;- 目前主機網絡名稱 -&gt;</code>

<code>修改為:</code>

<code>&lt;interfacetype=</code><code>'bridge'</code><code>&gt;</code>

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

<code>[root@linux-node1 ~]</code><code>#virsh shutdown CentOS-7-x86_64  &lt;- 關閉虛拟機 -&gt;</code>

<code>Domain CentOS-7-x86_64 isbeing </code><code>shutdown</code>

<code>[root@linux-node1 ~]</code><code>#virsh start CentOS-7-x86_64     &lt;- 啟動虛拟機 -&gt;</code>

<code>Domain CentOS-7-x86_64started</code>

<code>[root@linux-node1~]</code><code># ifconfig                        &lt;- 檢視網卡資訊 -&gt;</code>

<code>br0:flags=4163&lt;UP,BROADCAST,RUNNING,MULTICAST&gt;  mtu 1500</code>

<code>        </code><code>inet 192.168.56.11  netmask 255.255.255.0  broadcast 192.168.56.255</code>

<code>        </code><code>inet6 fe80::20c:29ff:fefe:1620  prefixlen 64 scopeid 0x20&lt;link&gt;</code>

<code>        </code><code>ether 00:0c:29:fe:16:20  txqueuelen 0 (Ethernet)</code>

<code>        </code><code>RX packets 74  bytes 8909 (8.7 KiB)</code>

<code>        </code><code>RX errors 0  dropped 0 overruns 0  frame 0</code>

<code>        </code><code>TX packets 63  bytes 11462 (11.1 KiB)</code>

<code>        </code><code>TX errors 0  dropped 0 overruns 0  carrier 0 collisions 0</code>

<code>eth0:flags=4163&lt;UP,BROADCAST,RUNNING,MULTICAST&gt;  mtu 1500</code>

<code>        </code><code>ether 00:0c:29:fe:16:20  txqueuelen 1000  (Ethernet)</code>

<code>        </code><code>RX packets 26401  bytes 26066467 (24.8 MiB)</code>

<code>        </code><code>TX packets 8582  bytes 1939240 (1.8 MiB)</code>

<code>lo:flags=73&lt;UP,LOOPBACK,RUNNING&gt;  mtu65536</code>

<code>        </code><code>inet 127.0.0.1  netmask 255.0.0.0</code>

<code>        </code><code>inet6 ::1  prefixlen 128 scopeid 0x10&lt;host&gt;</code>

<code>        </code><code>loop txqueuelen 0  (Local Loopback)</code>

<code>        </code><code>RX packets 4  bytes 216 (216.0 B)</code>

<code>        </code><code>TX packets 4  bytes 216 (216.0 B)</code>

<code>virbr0:flags=4099&lt;UP,BROADCAST,MULTICAST&gt; mtu 1500</code>

<code>        </code><code>inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255</code>

<code>        </code><code>ether 00:00:00:00:00:00  txqueuelen 0 (Ethernet)</code>

<code>        </code><code>RX packets 0  bytes 0 (0.0 B)</code>

<code>        </code><code>TX packets 2  bytes 84 (84.0 B)</code>

<code>vnet0:flags=4163&lt;UP,BROADCAST,RUNNING,MULTICAST&gt;  mtu 1500</code>

<code>        </code><code>ether fe:54:00:0b:f8:a5  txqueuelen 500  (Ethernet)</code>

<code>        </code><code>TX packets 0  bytes 0 (0.0 B)</code>

本文轉自 kesungang 51CTO部落格,原文連結:http://blog.51cto.com/sgk2011/1886277,如需轉載請自行聯系原作者

繼續閱讀