目錄
1簡介
kvm+libvirt+webvirtmgr是一個輕量級web虛擬機,能夠在linux上安裝windows或者其他的linux虛機。kvm是Kernel-based Virtual Machine的簡稱,是一個開源的系統虛擬化模塊,負責虛擬系統。libvirt用於管理虛擬化平臺的開源的API,後臺程序和管理工具。它可以用於管理KVM、Xen、VMware ESX,QEMU和其他虛擬化技術,可以看做一個管家。webvirtmgr能連接libvirt進行web的管理,其中webvirtmgr集成了noVNC能夠直接進行界面的操作。相當於輕量的OpenStack。
1.1效果圖
1.1.1win10虛機
1.1.2Ubuntu虛機
2.安裝
2.1安裝kvm+libvirt等
我們就不從源碼安裝了,直接apt
apt-get install kvm libvirt bridge-utils virt-manager qemu-kvm-tools virt-viewer
- bridge-utils用於構建橋接網絡,kvm虛機一般都是NAT模式,如果需要局域網裏的機子也能訪問就要配置橋接。
2.2安裝webvirtmgr
web應用我都習慣使用docker安裝,不影響宿主機環境
安裝docker,並設置自啓動,並開啓服務
apt-get install docker
systemctl enable docker
service docker start
拉取webvirtmgr鏡像,運行爲實例並起名爲web,映射8080,6080端口到宿主機(8080是web,6080noVNC),非正常關閉(宿主機斷電等)自動啓動,嘗試三次
docker run --name web -p 8080:8080 -p 6080:6080 --restart=on-failure:3 jieshao/web_kvm:onlyweb
第一次構建實例後,快捷鍵Ctrl+C終止,然後輸入以下命令重新啓動
docker start web
該docker的dockerfile https://github.com/LY1806620741/web_kvm
3.配置
3.1Libvirt配置Tcp監聽
由於webvirtmgr運行在docker裏,無法直接通過libvirt的默認sock連接方式通過/var/run/libvirt/libvirt-sock進行連接。解決辦法有
- 映射宿主機libvirtsock到容器內進行本地連接
- 配置libvirt爲TCP連接
- 配置docker-webvirtmgr通過ssh直接登錄宿主機進行操作(不推薦,宿主機要存ssh公鑰)
在這裏我用TCP連接
配置libvirt爲tcp連接,sed命令作用替換文本
sed -i 's/#listen_tls = 0/listen_tls = 0/g' /etc/libvirt/libvirtd.conf
sed -i 's/#listen_tcp = 1/listen_tcp = 1/g' /etc/libvirt/libvirtd.conf
sed -i 's/#auth_tcp = "sasl"/auth_tcp = "none"/g' /etc/libvirt/libvirtd.conf
配置libvirt-bin服務監聽tcp
vi /etc/default/libvirt-bin 修改爲libvirt_opts = "-d -l" 增加-l監聽tcp
重新啓動libvirt-bin服務 (將會監聽16509端口)
service libvirt-bin restart
配置橋接模式網橋,增加br0網橋
brctl addbr br0
配置br0網橋橋接網卡(ubuntu16以上還支持/etc/network/interface,但是推薦與時俱進,netplan文件夾下的名字可能不同)
cp /etc/netplan/50-cloud-init.yaml /etc/netplan/50-cloud-init.yaml.bak
sudo vi /etc/netplan/50-cloud-init.yaml
紅框是添加的,br0是之前添加的網橋名,br0網橋接管了ens3網卡,將ens3的配置複製一份到br0網橋就行了
例子二
配置前是固定ip
配置後
然後檢查配置並應用(如果沒有出錯,按回車就應用了,如果網絡爆炸了,他會在30s後還原設置)
netplan try --timeout 30
等待一段時間network重啓後,使用ip addr就能看到br0網橋啓動了
3.2修改webvirtmgr登陸密碼
開啓webvirtmgr
docker start web
進入容器的命令行
docker exec -it web /bin/bash
3.2.1修改用戶登陸密碼(可選)
修改admin密碼
/webvirtmgr/manage.py changepassword admin
Ctrl+P+Q(不關閉容器退出容器,exit會退出且關閉)
3.2.2重新創建用戶(刪除原來的admin賬戶,可選)
進入webvirtmgr的sqllite數據庫
/webvirtmgr/manage.py dbshell
查看錶
sqlite> .table
sqlite> select * from auth_user;
刪除所有用戶
Delete from auth_user;
或者根據id刪除
Delete from auth_user where id=1;
退出數據庫然後創建新用戶
sqlite> .exit
[root@67bb95bd5cbf webvirtmgr]# /webvirtmgr/manage.py createsuperuser
輸入用戶名,郵箱,密碼,確認密碼,然後Ctrl + P + Q不關閉容器退出
4安裝系統
4.1win10安裝
登陸webvirtmgr
瀏覽器訪問宿主機ip:8080(默認驗證 admin,admin)
我已經添加了,add connections,填宿主機的ip,根據docker的network設置有關,一般是webvirtmsg的docker的網關。
點進去添加儲存池(用於存放虛擬機磁盤映像和安裝鏡像iso等)
然後點擊創建的儲存池,並添加虛擬機磁盤映像
上傳iso安裝包,和virtio驅動包(虛擬化驅動,不然認識不了虛擬化的磁盤網卡等,提供了下載地址,自己找也行)
下載好PE,WIN10鏡像,virtio驅動包
並放到ubuntu宿主機的儲存池路徑下
可以在windows下載好再傳到宿主機(小文件可以用lrzsz,大文件4G以上的用scp命令,或者構建一個http文件上傳服務器),也可以在ubuntu宿主機上直接下載,這時候八仙過海各顯神通拉。
添加網絡池
之前配置的橋接網卡可以起到作用了
可以看到我有兩個連接方式
新建實例
連接安裝光盤
開機
然後就是這個頁面,不用說了吧
然後就是沒有驅動了
把光盤換成virtio驅動盤
選擇光盤->viostor->w10->amd64(我裝的是64位win10)
怎麼辦,把光盤換回win10安裝盤然後刷新
我分配的盤太小了。。反正用來測試的
novnc有點卡,橋接網絡派上用場, win10開啓遠程桌面支持,我們用遠程桌面去連接
如果無法連接,重啓宿主機(有可能連不上網,ssh進不去,只能用顯示器和鍵盤去調試,多試試netplan try,這個命令也不能100%檢查正確),很可能是你的網橋配置有問題。還有要注意win10遠程連接賬戶一定要有密碼,不然是連不上的。
4.2安裝Linux
這個更加簡單,完全不用去找驅動,一路裝下去就行了,就不演示了