初學Linux的朋友往往自己會做很多實驗,這就需要用到許多虛拟機,本文介紹了一種适合個人實驗環境的kvm快速部署虛拟機,(企業環境也可以,根據實際情況修改),純手打原創。
KVM概述
Kernel-based Virtual Machine的簡稱,kvm是一個開源的基于硬體的虛拟化技術,是以需要cpu的支援(Intel VT技術或者AMD V技術)。企業裡常用到的vmware 是基于軟體層面的虛拟化,這是兩者的差別。這裡為什麼選擇kvm,是因為他部署簡單,不需要另外的用戶端管理,可以完全用指令管理,友善操作。
步驟
1.一台實體機,也可以是雲伺服器,配置看自己情況,記憶體要大,不能低于8G。安裝centos(推薦7系列的版本)圖形版或者ubuntu 桌面版,這裡以實驗環境舉例,是以安裝帶圖形的版本。
以centos舉例,ubuntu安裝方法一樣。
2.配置網絡yum源,有些包iso鏡像裡沒有,用網絡yun源友善解決。
執行egrep -c ‘(vmx|svm)’ /proc/cpuinfo指令
如果輸出結果為0則說明CPU不支援硬體虛拟化
如果輸出結果大于0則說麼可以支援
如果不支援請進入開機bios開啟cpu虛拟化,主流cpu都支援虛拟化。
3.安裝軟體包:
必備軟體
qemu-kvm— 為kvm提供底層支援
libvirt-client — virsh等軟體
libvirt-daemon — libvirtd服務程序
libvirt-daemon-driver-qemu— virsh的qemu驅動
可選功能
virt-install — 系統安裝工具
virt-manager— 圖形管理工具,在這裡一定要裝,純指令管理不适合初學者
virt-v2v— 虛拟機遷移工具
virt-p2v— 實體機遷移工具
3.搭建網橋,這是關鍵的一步,保證虛拟機和真機能通訊。
進入/etc/libvirt/qemu/networks目錄,裡面有個defaulst.xml的模闆配置檔案,可以拿這個複制,也可以重新手寫,必須在此目錄下。
自建一個以.xml結尾的檔案,推薦名稱以你要命名的網卡加.xml結尾,内容如下:
<network>
<name>網卡名</name>
<forward mode='nat'/>
<bridge name='網卡名'/>
<ip address='192.168.1.254' netmask='255.255.255.0'>
<dhcp>
<range start='192.168.1.100' end='192.168.1.200'/>
</dhcp>
</ip>
</network>
//其中漢字部分可以自定義,192.168.1.254是自己給本機這個網卡設定的ip,可以自己随意設定,但主機位最好是254,這個是虛拟機的網關。第三行是轉發的方式,如果沒有這個隻能内部通訊,不能連結網際網路。dhcp這一段是給虛拟機用dhcp的方式分發ip,範圍是從100到200,可以将這3行删掉,就是建立的虛拟機沒有ip,自己手動配置。結束儲存退出。
激活:vrish net-define 網卡.xml
啟動:virsh net-start 網卡
開機啟動:virsh net-autostart 網卡
現在ifconfig檢視就會發現多了一個叫xx的網卡,并且IP是192.168.1.254/24
4.建立虛拟磁盤
進入/var/lib/libvirt/images/目錄,這是預設磁盤存放目錄
qemu-img create -f qcow2 node.qcow2 50G
//node.qcow2是磁盤的名稱,建立時要以qcow2結尾,不然等會識别不出來,後面做成模闆後就可以随意命名,50G是給磁盤的大小,這個大小隻是一個檔案,跟真機的實體磁盤大小沒關系。
qemu-img info node.qcow2 可以檢視這個虛拟磁盤的資訊
5.建立模闆虛拟機
打開vrit-manager圖行管理,點選左上的小燈泡按鈕,選擇建立虛拟機,這裡要自己準備一個centos7的鏡像,可以去官網下載下傳,選擇本地鏡像安裝(其他方式也可以,這裡選簡單的),選擇你下載下傳好的鏡像,下一步,注意在網卡選擇上要選擇你剛才建立的網卡,記憶體給2048就夠了,磁盤不要選擇第一個選項,要選擇第二個,并找到剛才你建立的node.qcow2磁盤,在自定義配置裡最好自己添加幾個網卡,選擇virtool(記不太清了),不添加也沒關系,其他和正常裝系統沒差別,選擇最小化安裝。如果安裝報錯cpu不支援,請進入開機bios将cpu虛拟化打開,前面說過kvm需要cpu支援。
系統安裝好了用root進入,centos預設的密碼是redhat,進入檢視ip是否配置設定ok(用ip a指令),并配置yum源,(這裡不要用網絡yum,真機挂載一個iso鏡像通過http或者ftp共享),用真機ssh遠端該虛拟機友善操作,安裝常用軟體包:
自動補齊的包:bash-completion
ifconfig:net-tools 可以用yum provides查找自己需要的指令的包
禁用防火牆,selinux
禁用空路由:vim /etc/sysconfig/network
添加 NOZEROCONF=”yes”
配置console端口:
vim /etc/sysconfig/grub
在GRUB_CMDLINE_LINUX這一段的後面添加 console=tty0 console=ttyS0,115200n8 (要包含在分号裡面)
激活:grub2-mkconfig -o /boot/grub2/grub.cfg
修改網卡配置檔案:删除裡面的uuid,mac位址,ip位址,網關,如果沒有DEVICE=”**” 該行要自己添加。關閉虛拟機。
6.修改虛拟機模闆配置檔案。
//虛拟機有2個檔案,分别是磁盤檔案和硬體配置檔案,kvm的虛拟機就是通過這2個檔案來産生,磁盤檔案在/var/lib/libvirt/images, 配置檔案在/etc/libvirt/qemu.
進入/etc/libvirt/qemu目錄,将剛才建的模闆虛拟機配置檔案複制一份命名為node1.xml,然後vim修改
<domain type='kvm'> <name>centos7.0</name> ##定義虛拟機名稱,這裡要改成新的名稱node1
<uuid>c2d264d3-5c61-4d2e-8678-b28673c1f64b</uuid> ##删掉改行
<memory unit='KiB'>1048576</memory> ##定義記憶體大小,根據你自己的模闆來,可以不改
<currentMemory unit='KiB'>1048576</currentMemory>
<vcpu placement='static'>1</vcpu>
<os>
<type arch='x86_64' machine='pc-i440fx-rhel7.0.0'>hvm</type>
<boot dev='hd'/>
</os>
<features>
<acpi/>
<apic/>
</features>
<cpu mode='custom' match='exact'>
<model fallback='allow'>Haswell-noTSX</model>
</cpu>
<clock offset='utc'>
<timer name='rtc' tickpolicy='catchup'/>
<timer name='pit' tickpolicy='delay'/>
<timer name='hpet' present='no'/>
</clock>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<suspend-to-mem enabled='no'/>
<suspend-to-disk enabled='no'/>
</pm>
<devices>
<emulator>/usr/libexec/qemu-kvm</emulator>
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2'/>
<source file='/var/lib/libvirt/images/node.qcow2'/> ##虛拟磁盤的位置,将後面的node.qcow2改成新名字node1.img
<target dev='vda' bus='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
</disk>
<controller type='usb' index='0' model='ich9-ehci1'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x7'/>
</controller>
<controller type='usb' index='0' model='ich9-uhci1'>
<master startport='0'/>
</controller>
<controller type='usb' index='0' model='ich9-uhci2'>
<master startport='2'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x1'/>
</controller>
<controller type='usb' index='0' model='ich9-uhci3'>
<master startport='4'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x2'/>
<controller type='virtio-serial' index='0'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
</controller>
<interface type='bridge'>
<mac address='52:54:00:6a:1e:54'/> ##删除改行
<source bridge='br0'/>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
<serial type='pty'>
<target port='0'/>
</serial>
<console type='pty'>
<target type='serial' port='0'/>
</console>
<channel type='unix'>
<target type='virtio' name='org.qemu.guest_agent.0'/>
<address type='virtio-serial' controller='0' bus='0' port='1'/>
</channel>
<channel type='spicevmc'>
<target type='virtio' name='com.redhat.spice.0'/>
<address type='virtio-serial' controller='0' bus='0' port='2'/>
</channel>
<input type='tablet' bus='usb'/>
<input type='mouse' bus='ps2'/>
<input type='keyboard' bus='ps2'/>
<graphics type='vnc' port='-1' autoport='yes' keymap='en-us'/>
<sound model='ich6'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
</sound>
<video>
<model type='qxl' ram='65536' vram='65536' vgamem='16384' heads='1'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
</video>
<redirdev bus='usb' type='spicevmc'>
</redirdev>
<redirdev bus='usb' type='spicevmc'>
</redirdev>
<memballoon model='virtio'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/>
</memballoon>
</devices>
</domain>
7.根據模闆虛拟機克隆新的虛拟機。
進入磁盤檔案目錄:(不進入要打絕對路徑)
qemu-img create -b node.qcow2 -f qcow2 node1.img
根據node.qcow2建立一個名為node1.img的磁盤檔案
根據剛才修改過的配置檔案啟動新的虛拟機:
cd /etc/libvirt/qemu
virsh define node1.xml
virsh start node1
新的虛拟機啟動起來就ok了,如果有報錯,請仔細檢查配置檔案裡面改動的名稱和磁盤檔案名稱是否對應,虛拟機名稱不能重複。
下面是一些用到的管理虛拟機指令
virsh nodeinfo 檢視KVM節點(伺服器)資訊
virsh list [–all] 列出虛拟機
virsh net-list [–all] 列出虛拟網絡
virsh dominfo 虛拟機名稱 檢視指定虛拟機的資訊
virsh start|reboot|shutdown 虛拟機名稱 virsh undefine 虛拟機名 運作|重新開機|關閉挃定的虛拟機
virsh destroy 虛拟機名稱 強制關閉指定的虛拟機
virsh autostart [–disable] 虛拟機名稱 将指定的虛拟機設為開機自動運作
virsh undefine 虛拟機名 删除虛拟機
virsh console 虛拟機名 用console連接配接虛拟機
這樣以後每次需要新的虛拟機就直接更改xml配置檔案,再根據模闆磁盤檔案克隆一個新的磁盤檔案,就能直接啟動新的虛拟機,可以自己寫一個腳本,用sed替換掉裡面的名稱和磁盤名稱,啟動新虛拟機,以後每次需要新虛拟機就執行改腳本,腳本的智能化就取決于自己水準,可以做個互動判斷需要一次克隆幾台虛拟機。