kvm虚拟化_KVM 虚拟化环境搭建 - WebVirtMgr
前文《KVM 虛擬化環境搭建 - ProxmoxVE》已經給大家介紹了開箱即用的 PVE 系統,PVE 是方便,但還是有幾點問題:
第一:始終是商用軟件,雖然可以免費用,但未來版本還免費么?商用的法律風險呢?
第二:黑箱化的系統,雖然基于 Debian ,但是深度改造,想搞點別的也不敢亂動。
第三:過分自動化,不能讓我操作底層 libvirt/qemu 的各項細節配置。
PVE 是傻瓜相機,智能又復雜,對小白很友好;WebVirtMgr 是機械相機,簡單而靈活。多一個選擇始終是好事,何況我們說完 PVE 之后還介紹 WebVirtMgr,那肯定是有它不可代替的優勢的。
不管你是在中小公司研究 IT 解決方案,還是搭建自己的 HomeLab,虛擬化是一個繞不過去的砍,現在的服務都不會直接啟動在物理機上,成熟的架構基本都是:
物理機->虛擬化->容器
這樣的三層架構,也就是說虛擬化是一切服務的基礎。通過下面的步驟,讓你擁有一套完全開源免費的,屬于你自己的,沒有任何版權和法律問題的虛擬化環境。
操作系統選擇
發行版選擇主要以 Debian/Ubuntu LTS Server 為主,二者我并無偏好,選擇你趁手的即可。Debian 每兩年一個大版本,Ubuntu LTS Server 也是每兩年一個大版本。也就是說每年都有一個最新的,他們的支持周期都是五年以上,去年發布的 Debian 9 ,今年是 Ubuntu 18.04 LTS,明年又是 Debian 10。
安裝依賴
新安裝操作系統以后,先安裝必備的包:
sudo apt-get install libvirt-daemon-system libvirt-clients sudo apt-get install sasl2-bin libsasl2-modules bridge-utils將 /etc/default/libvirtd 里面的一行 libvirtd_opts 改為:
libvirtd_opts修改 /etc/libvirt/libvirtd.conf,保證下列配置生效:
# 允許tcp監聽修改 /etc/libvirt/qemu.conf,取消 "# vnc_listen = ..." 前面的 # 注釋(如有),變為:
vnc_listen找到并把 user 和 group 兩個選項,取消注釋,改為 libvirt-qemu:
user重啟并查看服務的狀態:
sudo service libvirtd restart sudo service libvirtd status到了這一步,依賴就準備好了。
創建管理用戶
ubuntu 18.04 LTS 得改一下:/etc/sasl2/libvirt.conf 文件,取消最后一行注釋,變為:
sasldb_path: /etc/libvirt/passwd.db并保證 mech_list 的值為 digest-md5 ,默認的 gssapi 不能用:
mech_list: digest-md5(注意:如果是 Debian 10,那么單機請使用 unix socket,digest-md5 方式被廢除掉了,下面的驗證方式可以跳過直接把 www-data 用戶加入 libvirt 用戶組即可)。
客戶端鏈接 libvirtd 需要用戶名和密碼,創建很簡單:
sudo saslpasswd2 -a libvirt virtadmin可以查看創建了哪些用戶:
sudo sasldblistusers2 -f /etc/libvirt/passwd.db繼續重啟服務:
sudo service libvirtd restart測試用戶權限:
virsh -c qemu+tcp://localhost/system list使用 virsh 鏈接本地的 libvirtd 操作本地虛擬機,輸入剛才的用戶名和密碼檢查是否能夠順利執行,如果該命令成功則代表 libvirtd 的服務和權限工作正常。
配置網橋
Debian 9 下面是更改 /etc/network/interfaces,注意設備名稱 eth0 需要改為實際的名稱:
# The loopback network interface auto lo iface lo inet loopback # The primary network interface auto eth0 iface eth0 inet manual auto br0 iface br0 inet staticaddress 192.168.0.2netmask 255.255.255.0network 192.168.0.0broadcast 192.168.0.255gateway 192.168.0.1dns-nameservers 192.168.0.1dns-search dell420bridge_ports eth0bridge_stp offbridge_fd 0bridge_maxwait 0Ubuntu 18.04 中,使用 /etc/netplan 配置網橋,卸載 cloud-init,禁用 cloud-init 配置:
sudo apt-get remove cloud-init sudo mv /etc/netplan/50-cloud-init.yaml /etc/netplan/50-cloud-init.disable并且新建文件:/etc/netplan/10-libvirtd-bridge.yaml:
network注意上面的設備名稱 enp3s0f0 以及 ip 網關等配置應按實際情況更改。
注意接口名字和 ip等,改為對應的內容,改完后:
sudo netplan apply啟用新的網絡配置,然后重啟網絡看看網橋,是否正常:
sudo brctl show并且查看網絡是否正常。
安裝 WebVirtMgr
按照 WebVirtMgr 的官網首頁的說明
安裝依賴:
sudo apt-get install git python-pip python-libvirt python-libxml2 novnc supervisor nginx克隆倉庫:
cd /var/www sudo git clone git://github.com/retspen/webvirtmgr.git安裝 Django 等 python 包:
cd webvirtmgr sudo pip install -r requirements.txt sudo ./manage.py syncdb sudo ./manage.py collectstatic按提示輸入 root 用戶密碼,該用戶后面將用來登陸 WebVirtMgr。
然后測試:
sudo ./manage.py runserver 0:8000用瀏覽器打開 http://your-ip:8000 并用剛才的用戶登陸看看行不行,成功的話,會看到:
然后點擊右上角添加一個 connection,把 localhost 這個 libvirtd 的鏈接用 tcp 的方式添加進去,用戶名和密碼是剛才初始化的 libvirt 的管理員 admin 和密碼:
鏈接如果能夠正常添加的話,表明可以正常運行了:
然后 CTRL+C 退出。
安裝 Nginx
新建并編輯 /etc/nginx/sites-available/webvirtmgr 文件:
server然后做一個該文件的軟連接到 /etc/nginx/sites-enabled 下面,并刪除默認軟連接:
cd /etc/nginx/sites-enabled sudo ln -s /etc/nginx/sites-available/webvirtmgr . sudo rm default然后重啟服務
sudo service nginx restart完成安裝
新建并編輯 /etc/supervisor/conf.d/webvirtmgr.conf:
[program:webvirtmgr]把整個 webvirtmgr 的項目文件所有者改為 www-data:
sudo chown -R www-data:www-data /var/www/webvirtmgr重啟并查看結果:
sudo supervisorctl reload sudo supervisorctl status如果碰到錯誤,比如 Exited too quickly 那么到 /var/log/supervisor 下面查看日志。
完成后,瀏覽器打開:http://your-ip:8080/servers/
如果一切工作正常,那么恭喜你,WebVirtMgr 安裝成功。
開始使用
在 /home/data 下面創建 kvm 目錄,用于放虛擬機磁盤鏡像文件和 iso 文件
{images, iso你可以放在你喜歡的地方,/home 目錄一般在 debian 下面會分配比較大的空間,所以把虛擬機相關的東西,放到 /home/data/kvm 下面。
然后瀏覽器登陸 webvirtmgr 的頁面,選擇剛才添加的 localhost 鏈接,webvirtmgr 可以同時管理多臺機器的 libvirtd,這里我們以剛才添加的 localhost 鏈接為例。
首先到左側的 “存儲池”添加用于保存虛擬機映像的路徑:
先點擊 "New Storage" 添加一個類型為 “目錄卷類型”的存儲池,名字為 images,指向:
/home/data/kvm/images繼續點“New Storage”添加一個類型為 “ISO 鏡像卷”的存儲池,名字為 iso ,路徑為:
/home/data/kvm/iso你如果有多塊硬盤,還可以繼續添加一些其他位置用于保存虛擬機的磁盤鏡像。
還差網絡配置就妥了,點擊左邊 “網絡池”:
原來只有一個 default 的 NAT 類型網絡,那個 bridge 是我們需要點擊 "New Network" 添加的橋接網絡:
上面這個橋接名稱,就是我們前面配置的網橋名稱 br0。我們啟動的虛擬機一般都會希望和物理機同處于一個內網下,擁有可以直接訪問的 IP,因此基本都用橋接模式。
創建虛擬機
先創建磁盤映像,到左邊的 “存儲池”,然后選擇 images 存儲池:
點擊最下面的添加鏡像,添加一個 20G 的 qcow2,名字為 test1:
然后點擊左邊的 “虛機實例”,然后點擊左上角的 “New Instance”:
不要使用它那些亂七八糟的模板,直接點擊正上方的 “Custom Instance”,創建虛擬機:
在創建虛擬機的對話框里,點擊“Add Image”添加剛才創建的 test1.img 鏡像,然后再 "Add network" 添加類型為 bridge 的橋接網絡,你如果想要所有虛擬機都處于一個虛擬內網的話,還可以再添加一塊類型為 default 的網卡,就是默認的 NAT 類型。
完成后點 “創建”,咱們的虛擬機就有了:
這時候,可以到現前的 “存儲池”的 iso 下面,上傳兩個操作系統的安裝盤 iso 文件,然后回來這個 test1 虛擬機主頁,選擇設置,掛載 iso 文件:
選擇我們剛才上傳的操作系統 ISO 文件,并點擊右邊的“鏈接”按鈕,然后可以到“Power”那里使用 “啟動”按鈕開機了,此時虛擬機出于“開機”狀態:
然后選擇 Access :
點擊 “控制臺”,打開虛擬機的 webvnc 終端,開始安裝操作系統:
網頁版本的 Webvnc 圖形性能一般,建議安裝操作系統都用普通文本模式安裝(可以選擇的話),測試虛擬機可以正常啟動以后,我們先把它強制結束了,進行一些必要設置。
安全設置
如果的服務器暴露再公網上,一定要到 Access -> Console Password 下面設置個密碼:
webvirtmgr 里點擊控制臺它會自動讀取該密碼,不需要你手工輸入,但是這樣就比沒有密碼安全很多了。
然后啟動后,你可以到:設置->XML 那里查看一下 VNC 被分配的端口號和設置過的密碼:
由于默認配置 VNC 都是使用 “自動端口”,這樣更安全些,每次虛擬機啟動,都會動態分配一個,再 XML 這里可以查看得到,這樣你也可以不用 webvnc,而用自己的 VNC 客戶端:
比如 Windows 下的 vnc-viewer,填入 ip 地址和端口號,然后點 "connect":
提示輸入密碼,將上面 XML 里的密碼復制粘貼過來即可:
然后點擊 OK 開始顯示終端屏幕:
共享文件夾
這是個很基本的需求,想省事的話,nfs 共享一下也可以,但是 KVM 本身支持 Hypervisor 和虛擬機共享文件夾的,并且性能很好,可惜 PVE 里居然做不了,因為它不能改 XML。
再 “設置”-> XML 那里點擊 “編輯”并在 <devices>... </devices> 中加入下面配置:
<filesystemaccessmode 可以設置成:mapped,passthrough 或 none。物理機準備一下共享目錄:
sudo mkdir /home/data/kvm/kfs sudo chown libvirt-qemu:libvirt-qemu /home/data/kvm/kfs所有虛擬機在物理機上都會以 libvirt-qemu 這個用戶來跑(前面設置過 qemu.conf),所以需要保證你物理機上需要共享的路徑的權限。同時 accessmode 建議設置成 mapped,這樣會用文件信息里的 meta info 來保存虛擬機中的文件權限信息。
虛擬機中編輯 /etc/modules 文件,添加下面幾行:
loop virtio 9p 9pnet 9pnet_virtio加載內核模塊:
sudo service kmod start然后測試 mount:
trans這樣,虛擬機中的 /mnt/kfs 就映射到了物理機的 /home/data/kvm/kfs 路徑下。
測試成功的話,設置 /etc/fstab:
kfs /mnt/kfs 9p trans=virtio 0 0修改完后,mount -a 測試,測試通過重啟虛擬機即可。
后記
可能大家發現了 WebVirtMgr 本質就是一個輕量級的 web 管理后臺,可以在一臺機器上搭建 webvirtmgr 并管理內網所有的提供 libvirtd 服務的機器。
由于 webvirtmgr 項目本身簡單清晰,不少成功項目的代碼都是源自它的,比如 QNAP 產品線里的 “虛擬機工作站”,通過前面一番動手,相信你對 kvm/libvirtd/vnc 之類的運作機里已經很熟悉了。
該系統設計的比較好的一個點就是允許我編輯 XML,而前面提到的 PVE 居然不允許我在頁面上修改 XML,KVM支持的功能非常豐富,很多都需要通過修改 XML 完成,比如常用的硬件透傳,大家可以搜索 "kvm passthrough":該功能可以把 pcie 總線上的設備傳遞給虛擬機,比如你的物理機上有兩個 USB 插口,你可以將其中一個賦予虛擬機。或者把物理機的磁盤陣列全部傳遞給虛擬機,由虛擬機里面來組 raid,這樣虛擬機里面裝點黑群暉或者 clearos / openmediavault 之類的 nas 系統的話,可以方便的把磁盤陣列管理起來。
如果物理機有顯卡的話,你甚至可以把物理機的 gpu 透傳給虛擬機,這樣虛擬機里面就可以跑需要 GPU 支持的任務了,比如挖礦之類,這些在 PVE 里都沒法支持,這些都是 webvirtmgr 比 PVE 更靈活的地方。
更多的功能,留給大家慢慢探索吧。
總結
以上是生活随笔為你收集整理的kvm虚拟化_KVM 虚拟化环境搭建 - WebVirtMgr的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python 3d渲染_python老司
- 下一篇: 复习Object类_日期时间类_Syst