標籤:

Openstack學習:從創建配置虛擬機開始

對於初學者而言,openstack的架構和內容實在太多太複雜了,我們不妨從創建一個最基本的虛擬機入手,逐步了解和學習其中涉及的各種技術和知識。

繞不開的第一課

什麼是Qemu?kvm?libvirt?

Qemu

既然是虛擬機,那總得有虛擬出來的各種硬體吧,Qemu就是提供這一功能的硬體模擬器,讓guestOS以為自己在和真的硬體打交道,而其實,這中間隔著一個Qemu來當翻譯。也正是因為存在翻譯的過程,所以性能上會打折扣,於是我們需要:

kvm

kvm屬於linux內核的模塊,可以理解為集成至內核中的Hypervisor,採用intel VT/AMD-V等技術,提供CPU和內存的虛擬化能力,這樣guestOS的CPU指令可以不用再經過翻譯,性能大增,但它還需要network和周邊I/O的支持,所以兩者聯手:kvm負責cpu和內存,qemu負責其他的,一個內核空間,一個用戶空間從而形成qemu-kvm這樣一個完整的、更優的虛擬化技術。

Libvirt

Libvirt是一種常用的虛擬機管理工具,可管理包括kvm在內的眾多虛擬化技術,包括一個API庫,守護進程libvirtd,命令行工具virsh。

通過對基本概念的了解,我們其實已經可以想到這三者的關係:openstack通過libvirt來控制qemu-kvm進行虛擬機的相關操作,正如下圖所示:

也就是說我們可以通過libvirt或者qemu來操作虛擬機,下面就開始試試吧。


創建虛擬機

1.準備工作

物理主機為centos 7.4,檢查CPU是否支持虛擬化

cat /proc/cpuinfo | egrep (vmx|svm) | wc -l

返回大於0表示支持 其中,vmx是intel處理器虛擬機技術標誌,svm是AMD的

2.安裝所需工具

首先配置好yum源,然後根據具體需要安裝

yum install kvm libvirt python-virtinst qemu-kvm virt-viewer bridge-utils virt-install

驗證libvirtd是否正常啟動

ps -ef | grep libvirtd

驗證kvm是否載入成功

lsmod | grep kvm

驗證工具安裝是否成功

virsh list --all

3.創建虛擬機

介紹三種常用方式

A. qemu方式

創建磁碟鏡像

虛擬機磁碟是用主機上的文件來模擬,支持多種鏡像格式,如raw、qcow2、vhd等,通常利用qemu-img工具來創建

qemu-img create -f qcow2 /home/tmp/qemu/centos_vm.qcow2 10G

即在指定路徑下創建了一個10G大小qcow2格式的鏡像

準備操作系統鏡像

首次啟動虛擬機需要安裝操作系統,根據個人需要下載一個iso鏡像即可

啟動虛擬機

qemu-system-x86_64 -enable-kvm -vnc:0 -smp 2 -m 2048 -cdrom ./CentOS-7-x86_64.iso -hda ./centos_vm.qcow2 -L /usr/share/qemu -usb -usbdevice tablet

參數說明: -enable-kvm:採用kvm加速,不加的話qemu自身也可搞定,如開篇介紹過的 -vnc:0 :使用vnc連接虛擬機的界面,qemu內置vnc server端,0為監聽埠號 -smp 2:給虛擬機配置2個vcpu -m2048:給虛擬機配置2G內存 -cdrom:給虛擬機配置光碟機,掛載之前準備好的系統鏡像 -hda:給虛擬機配置磁碟,用我們之前創建好的磁碟鏡像 -usb -usbdevice tablet:給虛擬機配置usb設備,這樣vnc登錄時滑鼠好使

安裝guestos

使用vncviewer工具,輸入監聽的主機IP和vnc埠號,打開虛擬機操作系統安裝界面,按照正常流程安裝即可,裝好後reboot,這樣一個最基本的虛擬機就創建ok了。 我們接下來介紹下其他的創建方法

B. virt-install方式

前兩步和qemu方式一樣,只是啟動虛擬機的時候我們採用virt-install工具

virt-install --name=vm1 --ram=2048 --vcpus=2 --cdrom=./CentOS-7-x86_64.iso --disk path=./centos_vm.qcow2,device=disk,format=qcow2,bus=virtio,size=10 --network network=default --accelerate --graphics vnc,listen=186.100.88.33,port=5900 --force --autostart

各參數的含義和qemu方式一樣,我們同樣用vnc登錄虛擬機後正常安裝即可

C. virtsh方式

前兩步依舊相同,接著我們採用xml配置文件加virsh命令來創建

編寫xml配置文件

vi vm1.xml

具體內容可參考:

<domain type=kvm> <!--如果是Xen,則type=『xen』--> <name>vm1</name> <!--虛擬機名稱,同一物理機唯一--> <uuid>fd3535db-2558-43e9-b067-314f48211343</uuid> <!--同一物理機唯一,可用uuidgen生成--> <memory>524288</memory> <currentMemory>524288</currentMemory> <!--memory這兩個值最好設成一樣--> <vcpu>2</vcpu> <!--虛擬機可使用的cpu個數--> <os> <type arch=x86_64 machine=pc-i440fx-vivid>hvm</type> <!--arch指出系統架構類型,machine 則是機器類型,查看機器類型:qemu-system-x86_64 -M ?--> <boot dev=hd/> <!--啟動介質,第一次需要裝系統可以選擇cdrom光碟啟動--> <bootmenu enable=yes/> <!--表示啟動按F12進入啟動菜單--> </os> <features> <acpi/> <!--Advanced Configuration and Power Interface,高級配置與電源介面--> <apic/> <!--Advanced Programmable Interrupt Controller,高級可編程中斷控制器--> <pae/> <!--Physical Address Extension,物理地址擴展--> </features> <clock offset=localtime/> <!--虛擬機時鐘設置,這裡表示本地本機時間--> <on_poweroff>destroy</on_poweroff> <!--突發事件動作--> <on_reboot>restart</on_reboot> <on_crash>restart</on_crash> <devices> <!--設備配置--> <emulator>/usr/libexec/qemu-kvm</emulator> <disk type=file device=disk> <!--硬碟--> <driver name=qemu type=qcow2/> <source file=/home/tmp/qemu/centos_vm.qcow2/> <target dev=vda bus=virtio/> <address type=pci domain=0x0000 bus=0x00 slot=0x06 function=0x0/> <!--域、匯流排、槽、功能號,slot值同一虛擬機上唯一--> </disk> <disk type=file device=cdrom><!--光碟--> <driver name=qemu type=raw/> <source file=/home/tmp/qemu/CentOS-7-x86_64.iso.iso/> <target dev=hda bus=ide/> <readonly/> </disk> <interface type=network> <!--基於虛擬區域網的網路--> <mac address=52:54:4a:e1:1c:84/> <!--可用命令生成,見下面的補充--> <source network=default/> <!--默認--> <target dev=vnet1/> <!--同一虛擬區域網的值相同--> <alias name=net1/> <address type=pci domain=0x0000 bus=0x00 slot=0x04 function=0x0/> <!--注意slot值--> </interface> <graphics type=vnc port=5900 autoport=yes listen=186.100.88.33 keymap=en-us/> <!--配置vnc,windows下可以使用vncviewer登錄,獲取vnc埠號:virsh vncdisplay vm0--> <listen type=address address=186.100.88.33/> </graphics> </devices></domain>

導入配置文件

virsh define vm1.xml

啟動虛擬機

virsh start vm1

如同前兩種方法可通過vnc登錄虛擬機界面 ###配置網路 創建好虛擬機後,我們自然希望將它的網路聯通起來,方便後續使用,例如SSH登錄 這裡介紹一種簡單的橋接的方式

在主機上增加網橋設備br0

vi /etc/sysconfig/network-scripts/ifcfg-br0DEVICE="br0"ONBOOT="yes"TYPE="Bridge"BOOTPROTO=staticIPADDR=186.100.88.32 //主機IPNETMASK=255.255.255.0GATEWAY=186.100.88.1DEFROUTE=yes

配置主機的網卡,將其加入br0網橋

在/etc/sysconfig/network-scripts/ifcfg-eth0中加入

BRIDGE="br0"

重啟網路服務

service network restart

檢測eth0是否已介入網橋

brctl show

虛擬機配置

修改虛擬機的配置文件中devices中的network部分

<interface type=bridge> <mac address=52:54:00:da:c3:dc/> <source bridge=br0/> <model type=virtio/> <address type=pci domain=0x0000 bus=0x00 slot=0x03 function=0x0/></interface>

配置虛擬機IP和網關

vi /etc/sysconfig/network-scripts/ifcfg-eth0IPADDR=186.100.88.100 //需和br0在同一網段NETMASK=255.255.255.0GATEWAY=186.100.88.1BOOTPROTO=static //dhcp會自動分配地址

重啟網路服務後,大功告成 ***

最後的問題

難道我每次創虛擬機都要裝一遍系統? 當然不是,首次裝好系統後的磁碟鏡像就可以用來給後續的虛擬機做模板

拷貝磁碟鏡像

cp centos_vm.qcow2 centos_vm2.qcow2

為新的vm準備配置文件

vi vm2.xml<domain type=kvm> <name>vm2</name> <uuid>243535db-2558-43e9-b067-314f48211343</uuid> <memory>524288</memory> <currentMemory>524288</currentMemory> <vcpu>2</vcpu> <os> <type arch=x86_64 machine=pc-i440fx-vivid>hvm</type> <boot dev=hd/> </os> <features> <acpi/> <apic/> <pae/> </features> <clock offset=localtime/> <on_poweroff>destroy</on_poweroff> <on_reboot>restart</on_reboot> <on_crash>restart</on_crash> <devices> <emulator>/usr/libexec/qemu-kvm</emulator> <disk type=file device=disk> <driver name=qemu type=qcow2/> <source file=/home/tmp/qemu/centos_vm2.qcow2/> <target dev=vda bus=virtio/> <address type=pci domain=0x0000 bus=0x00 slot=0x06 function=0x0/> </disk> <interface type=network> <mac address=52:54:00:e1:1c:84/> <source network=default/> <target dev=vnet1/> <alias name=net1/> <address type=pci domain=0x0000 bus=0x00 slot=0x04 function=0x0/> <!--注意slot值--> </interface> <graphics type=vnc port=5902 autoport=yes listen=186.100.88.33 keymap=en-us/> <listen type=address address=186.100.88.33/> </graphics> </devices></domain>

導入配置文件

virsh define vm2.xml

啟動虛擬機

virsh start vm2

通過vnc上去看看吧,當然你還需要按前述的方法配置網路


推薦閱讀:

最近在學習 OpenStack,已經了解了其作用、架構。想進一步學習研究OpenStack各組件,對於源代碼的閱讀和學習,想得到大家的建議?
Kubernetes 是未來嗎?
哪裡有Openstack入門到精通視頻教程下載?
2017年,OpenStack能否複製安卓的黃金時代?

TAG:OpenStack |