當前部署方案基於Ubuntu 16.04 Server,使用KVM實現Linux環境下的虛擬化解決方案。
本人在虛擬化方面還是小白一枚,寫手冊主要是為了做筆記。老話說的好,好記性不如爛筆頭。
話轉正題,之前接觸過Vmware虛擬化解決方案,圖形界面使用起來非常方便。這次使用使用Linux環境,純命令行環境使用起來略有不同,基本原理還是一致的。
首先我們安裝一套Ubuntu 16.04 Server 作業系統。分區方案可以根據自己的硬體條件進行調整。在分區的時候我單獨將home獨立為一個分區,用於存放常用系統鏡像以及虛擬機文件。分區參考如下:
Home使用lvm進行創建的,主要是考慮到後續存儲空間擴展問題,無論是本機增加硬碟還是外掛存儲都可以輕鬆擴容。
作業系統安裝過程中記著已經要選擇安裝ssh服務,如果安裝過程中沒有安裝,等進入系統也可以使用apt-get install openssh-server進行安裝。
裝完作業系統以後,使用Xshell連接安裝好的作業系統。在用Linux的過程中,有很多人諮詢過我用什麼遠程工具連接Linux。這裡我通常默認的是xshell,同時putty,SecureCRT也是很優秀的軟體。
進入系統後先檢查分區是否符合預期,如果有問題可以自行調整。然後檢查硬體是否支持硬體虛擬化,如下分兩種:
AMD硬體: cat /proc/cpuinfo | grep svm
Intel硬體:cat /proc/cpuinfo | grep vmx
請使用相應命令查看硬體支持情況,如果您條件有限使用的是Vmware Workstion,在創建虛擬機的時候需要開啟硬體虛擬化支持,如下圖所示:
補充知識點:
svm是AMD的AMD-V虛擬化技術標識,全稱secure virtual machine,vmx是Intel的硬體虛擬化技術VT-x,標識是vmx,全稱為virtual machine extension。
現在步入正題,開始安裝虛擬化,我個人喜歡先切換到root模式進行操作。這樣會避免一些權限問題。
Apt-get update
Apt-get install qemu-kvm libvirt-bin virtinst bridge-utils virt-viewer virt-manger virt-top libguestfs-tools libosinfo-bin if-top
如上兩步操作完成,沒有報錯就安裝好了。現在介紹一下安裝的各個軟體內容。
Kvm:系統自帶,無需關注
Qemu-kvm:配合kvm使用,負責虛擬機的管理工作。Kvm主要負責CPU,內存的虛擬話,qemu來完成其他部件的虛擬化工作。
Libvirt:libvirt用於管理虛擬化平臺的開源API,後臺程序和管理工具。也可以用於管理kvm,xen,vmware esx,qemu和其他虛擬化技術。
Virtinst:創建虛擬機,克隆虛擬機等操作都會用到。
Bridge-utils:橋接網卡管理
Virt-viewer:連接虛擬機屏幕的工具,需要桌面環境支持。
Virt-manager:類似window上的vmware workstation。圖形化管理kvm。
Virt-top:在宿主機上查看虛擬機運行狀態的工具。類似top
libguestfs-tools:遷移工具集,可以在不啟動虛擬機的情況下操作虛擬主機內的文件。
libosinfo-bin:虛擬機系統信息查詢工具。
Iftop:監控宿主機網卡流量
注意:圖形化相關的工具我都默認安裝了,因為沒有測試不安裝會有什麼問題。如果有條件可以測試一下。歡迎交流心得。
常用命令及管理工具
Libvirt:操作和管理KVM虛擬的虛擬化API。C語言編寫,可以通過python,ruby,php,java等語言調用。可以操作kvm,vmware,xen,hyper-v,virtualbox等。
Virsh:基於libvirt的命令行工具,使用頻率很高。
Virt-install:虛擬機創建命令行工具
Virt-clone:虛擬機克隆命令行工具
網卡設置
Virsh net-list –all
查看全部網絡配置命令
Virsh net-define /usr/share/libvirt/networks/default.xml
重新定義網絡
Virsh net-autostart default
設置default網絡開機自動啟動
Virsh net-start default
啟動default網絡
虛擬網絡連接分成NAT網絡、橋接兩種、host-only網絡。
NAT網絡:即內部地址轉換,使用NAT網絡的虛擬機可以訪問外面網絡,但外面網絡無法訪問虛擬機。虛擬機的地址在NAT網絡中是唯一的,出了NAT網絡就不在唯一。NAT 網絡適用於桌面虛擬化。
橋接網絡:也叫物理設備共享,虛擬機和宿主機的網絡是平行關係,並且虛擬機公用物理網卡資源。虛擬機的網絡直接與外網互通,不受限制。橋接網絡適用於伺服器虛擬化。
Host-Only網絡:與NAT類似,但是比NAT更封閉,虛擬機僅能和宿主機通訊。同樣適用於桌面虛擬化。
上面安裝過程中已經成功安裝bridge-util,這是Linux環境下用於橋接網卡的工具集,通過工具集可以虛擬出一個新的網卡。Bridge-util工具集會默認創建一個NAT網絡,這時創建的虛擬機都無法滿足伺服器虛擬化要求,所以需要手動創建新的橋接網卡。
在/etc/network/interfaces文件中新增br0網卡信息,如下:
內容解釋:
第一句啟動br0虛擬橋接網卡br0;第二句設置br0橋接網卡為DHCP模式獲取IP;第三句配置br0和eno1建立連接;第四句關閉生成樹協議;第五句設置forwarding delay延遲為0;
配置完成後,重啟網絡:
Service networking restart
或
/etc/init.d/networking restart
已經創建好的虛擬機可以使用如下命令修改網卡配置:
Virsh edit vm_id
搜索 interface,把其中type改成bridge,bridge改為br0。修改配置的虛擬機重啟後就可以獲得橋接網絡IP。
創建虛擬機
在用戶目錄下面手工創建了兩個目錄,一個叫iso,用來放系統鏡像,一個叫vm用來放虛擬機硬碟文件。
虛擬機配置文件位置:/etc/.libvirt/qemu
虛擬機硬碟文件位置:/var/lib/libvirt/images
使用virsh-install創建虛擬機,如下是一個虛擬機創建示例:
Virt-install \
--virt-type=kvm \
--name=vm-0 \
--ram=2048 \
--vcpus=2 \
--os-variant=ubuntu16.04 \
--hvm \
--cdrom=/home/kvm/iso/ubuntu1604.iso \
--network=default,model=virtio \
--graphics vnc.,listen=0.0.0.0 \
--disk path=/home/kvm/vm/vm-0/vm-0.qcow2,size=60,bus=virtio,format=qcow2
下面介紹各個參數的含義:
Virt-type=kvm 使用kvm作為虛擬機監視器
Name=vm-0 虛擬機實例的名稱,虛擬機名稱不能重複,不能包含空格
Ram=2048 設置虛擬機內存大小,單位MB
Vcpus=2 設置虛擬機CPU核數
Os-variant=ubuntu16.04 設置虛擬機所屬系統以及優化虛擬機參數。使用osinfo-query os來查詢所有支持的系統列表
Cdrom 指定作為虛擬機光碟機內容的設備或文件,可以是宿主機的cdrom或iso文件
Networ 設置虛擬機連接宿主機網絡,默認宿主機網絡是是NAT模式。如果 需要使用橋接模式,則需要修改參數為 –network=bridge=br0,model=virtio
--graphics vnc: 設置虛擬機的console到VNC,同時可以指定vnc埠,地址,密碼。默認情況下埠從5900開始的第一個空閒埠,連接密碼為空。
--disk 設置虛擬機硬碟在宿主機的存儲路徑。Size的單位是GB,disk bus類型為virtio,磁碟格式為qcow2,默認格式為raw。
溫馨提示:網絡和磁碟都建議設置為virtio,virtio即啟動優化的虛擬機專用IO驅動,性能更好。磁碟格式推薦qcow2,同理也是優化後的磁碟格式,支持快照,並且支持空間精簡配置。
克隆虛擬機
virt-clone \
--connect=qemu:///system \
--original cloudfort-001 \
--name cloudfort-0$i \
--file /home/kvm/vm/cloudfort-0$i/cloudfort-0$i.qcow2
日常管理常用命令
Kvm虛擬機默認配置文件位置:/etc/libvirt/qemu,目錄中存放了所有創建過的虛擬機配置文件。
Virsh list
查看正在運行的虛擬機列表,加—all會顯示所有虛擬機主機列表
Osinfo-query os
查看當前virt-install所支持的os參數列表
Virsh deminfo vm_id
查看虛擬機信息
Virsh start vm_id
啟動虛擬機
Virsh shutdown vm_id
關閉虛擬機
Virsh suspend vm_id
掛起虛擬機
Virsh reboot vm_id
重啟虛擬機(相當於在虛擬機內部點擊重啟選項)
Virsh reset vm_id
硬重啟虛擬機
Virsh autostart vm_id
設置虛擬機隨宿主機開機自動啟動
Virsh autostart –disabled vm_id
取消開機自啟動
Virsh destroy vm_id
強制關閉虛擬機電源
Virsh edit vm_id
編輯虛擬機配置文件
Virsh uri
查看當前主機山hypervisor的連結路徑
Virsh undefine vm_id
移除虛擬機定義,只是將虛擬機從列表中移除,並不會刪除虛擬機磁碟文件
Virsh define vm_id.xml
通過虛擬機配置文件重新定義虛擬機
如上是本次整理,後續根據學習情況近逐步