快速搭建 kvm web 管理工具 WebVirtMgr

菜鳥運維筆記發表於2021-11-17

作者:SRE運維部落格

部落格地址: https://www.cnsre.cn/

文章地址:https://www.cnsre.cn/posts/211117937177/

相關話題:https://www.cnsre.cn/tags/kvm/


WebVirtMgr是近兩年來發展較快,比較活躍,非常清新的一個KVM管理平臺,提供對宿主機和虛機的統一管理,它有別於kvm自帶的圖形管理工具(virtual machine manager),讓kvm管理變得更為視覺化,對中小型kvm應用場景帶來了更多方便。

WebVirtMgr介紹

WebVirtMgr採用幾乎純Python開發,其前端是基於Python的Django,後端是基於Libvirt的Python介面,將日常kvm的管理操作變的更加的視覺化。

  • WebVirtMgr 特點

操作簡單,易於使用 、通過libvirt的API介面對kvm進行管理、提供對虛擬機器生命週期管理

  • WebVirtMgr 功能

宿主機管理支援以下功能、CPU利用率、記憶體利用率、網路資源池管理、儲存資源池管理、虛擬機器映象、虛擬機器克隆、快照管理、日誌管理、虛機遷移、虛擬機器管理支援以下功能、CPU利用率、記憶體利用率、光碟管理、關/開/暫停虛擬機器、安裝虛擬機器、VNC console連線、建立快照

官方文件

https://github.com/retspen/webvirtmgr/wiki/Install-WebVirtMgr

安裝前的部署

安裝一些依賴包

yum -y install git python-pip libvirt-python libxml2-python python-websockify supervisor nginx gcc python-devel wget vim net-tools lrzsz 

安裝pip

wget https://bootstrap.pypa.io/get-pip.py 
python get-pip.py 
pip -V 

sre運維|Linux運維|自動化運維|關鍵詞

pip install numpy

sre運維|Linux運維|自動化運維|關鍵詞

安裝python的需要包和配置Django環境

git clone git://github.com/retspen/webvirtmgr.git

sre運維|Linux運維|自動化運維|關鍵詞

安裝nginx

rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm 
yum install nginx -y

安裝supervisor

安裝參考

https://www.2cto.com/kf/201712/702837.html

開機自啟參考

https://blog.csdn.net/binggoogle/article/details/53203991

cat  /etc/supervisord.conf

{{< alert theme="warning" dir="ltr" >}}
⚠️ 注意

如果沒有這個檔案按照一下步驟安裝

有的話忽略此步驟
{{< /alert >}}

pip install supervisor
mkdir /etc/supervisord.d/
echo_supervisord_conf > /etc/supervisord.conf

新建資料夾

vim /etc/supervisord.d/app.conf

配置檔案 app.conf

內容為

[program:appname]
command=/root/soft/push.api
directory=/root/soft/push.api
autostart=true
autorestart=true
user=root
stdout_logfile = /var/log/supervisor/pushapi.log
stderr_logfile = /var/log/supervisor/pushapi-error.log

修改 在配置檔案最下方修改為

vim  /etc/supervisord.conf
[include]
files = /etc/supervisord.d/*.ini

sre運維|Linux運維|自動化運維|關鍵詞

supervisord -c /etc/supervisord.conf
/usr/bin/supervisorctl start all
/usr/bin/supervisorctl stop all

安裝環境

cd webvirtmgr 
pip install -r requirements.txt 

sre運維|Linux運維|自動化運維|關鍵詞

./manage.py syncdb

sre運維|Linux運維|自動化運維|關鍵詞

建立使用者

輸入以下使用者資訊

You just installed Django's auth system, which means you don't have any superusers defined.
Would you like to create one now? (yes/no): yes
Username (leave blank to use 'root'): admin
Email address: 275301281@qq.com
Password: admin
Password (again):admin 
Superuser created successfully.
Installing custom SQL ...
Installing indexes ...
Installed 6 object(s) from 1 fixture(s)
./manage.py collectstatic

配置一個超級使用者

./manage.py createsuperuser

sre運維|Linux運維|自動化運維|關鍵詞

WARNING:root:No local_settings file found.
Username (leave blank to use 'root'): yes
Email address: 275301281@qq.com
Password: Lenovo@123
Password (again): Lenovo@123
Superuser created successfully.

設定nginx

a、使用:8000埠

移動這個 webvirtmgr 目錄到 /var/www

cd  ..
mv webvirtmgr /var/www/

{{< alert theme="warning" dir="ltr" >}}
⚠️ 注意:
webvirtmgr 目錄下還有一個名稱為webvirtmgr 的資料夾
不要單獨移動 webvirtmgr/webvirtmgr 檔案
{{< /alert >}}

sre運維|Linux運維|自動化運維|關鍵詞

編輯配置檔案

vim /etc/nginx/conf.d/webvirtmgr.conf

server {
    listen 80 default_server;

    server_name $hostname;
    #access_log /var/log/nginx/webvirtmgr_access_log; 

    location /static/ {
        root /var/www/webvirtmgr/webvirtmgr; # or /srv instead of /var
        expires max;
    }

    location / {
        proxy_pass http://127.0.0.1:8000;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-for $proxy_add_x_forwarded_for;
        proxy_set_header Host $host:$server_port;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_connect_timeout 600;
        proxy_read_timeout 600;
        proxy_send_timeout 600;
        client_max_body_size 1024M; # Set higher depending on your needs 
    }
}

啟動nginx並設定開機自啟動

(如果不設定開機自啟動,重啟伺服器supervisor無法管理Django程式),並開機自啟動supervisord

/etc/init.d/nginx start

或者

systemctl restart   nginx 
systemctl enable supervisord 

分配許可權

chown nginx.nginx /var/www/webvirtmgr

設定supervisor

/etc/supervisord.conf末尾加入下面的配置:

vi /etc/supervisord.conf


[program:webvirtmgr]
command=/usr/bin/python /var/www/webvirtmgr/manage.py run_gunicorn -c /var/www/webvirtmgr/conf/gunicorn.conf.py
directory=/var/www/webvirtmgr
autostart=true
autorestart=true
logfile=/var/log/supervisor/webvirtmgr.log
log_stderr=true
user=nginx

[program:webvirtmgr-console]
command=/usr/bin/python /var/www/webvirtmgr/console/webvirtmgr-console
directory=/var/www/webvirtmgr
autostart=true
autorestart=true
#stdout_logfile=/var/log/supervisor/webvirtmgr-console.log
redirect_stderr=true
user=nginx	

{{< alert theme="warning" dir="ltr" >}}
⚠️ 注意

程式無法啟動或者報錯 可以選擇吧 log 註釋取消
{{< /alert >}}

重啟supervisord

開機自啟參考

https://blog.csdn.net/binggoogle/article/details/53203991

設定完之後重啟即可

systemctl restart  supervisord.service
systemctl enable  supervisord.service
systemctl status   supervisord.service 

sre運維|Linux運維|自動化運維|關鍵詞

更新

cd /var/www/webvirtmgr git pull

sre運維|Linux運維|自動化運維|關鍵詞

./manage.py collectstatic

sre運維|Linux運維|自動化運維|關鍵詞

systemctl  restart supervisord

如果有錯誤或不執行

 ./manage.py runserver 0:8000
#或者後臺執行指令碼
nohup python  /var/www/webvirtmgr/manage.py runserver 0:8000  >/dev/null &
nohup python  /var/www/console/webvirtmgr-console   >/dev/null &

訪問:http://x.x.x.x:8000(x.x.x.x - your server IP address ),輸入建立的使用者和密碼,如果沒有建立,請用python manager.py createsuperuser,命令建立。登入後如下圖所示

sre運維|Linux運維|自動化運維|關鍵詞

配置虛擬機器所在宿主機

webvirtmgr客戶端就這樣搭建完了,接下來需要配置虛擬機器所在宿主機的,參考git地址.

配置宿主機

下載並執行指令碼

如果虛擬機器比較多,該指令碼執行時間會比較長,因為會執行 service libvirt-guests restart,會將所有執行的虛擬機器掛起然後再恢復,感覺這一步不是必須的,因為我有一臺只設定ssh認證,也可以正常連線。

curl http://retspen.github.io/libvirt-bootstrap.sh | sudo sh

如果沒有curl就用wget

wget -O - http://retspen.github.io/libvirt-bootstrap.sh | sudo sh

配置防火牆

iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport 16509 -j ACCEPT

設定TCP授權

參考:https://github.com/retspen/webvirtmgr/wiki/Setup-TCP-authorization

webvirtmgr新建伺服器連線時需要此賬號

用saslpasswd2命令給libvirt的使用者cnsre設定密碼

saslpasswd2 -a libvirt cnsre
Password: cnsre
Again (for verification): cnsre

生成一個密碼庫

sasldblistusers2 -f /etc/libvirt/passwd.db 

cnsre@webvirtmgr.cn: userPassword

設定ssh授權

ssh-keygen -t rsa       # 產生公私鑰

直接回車,回車,回車

sre運維|Linux運維|自動化運維|關鍵詞

ssh-copy-id 192.168.1.120  

{{< alert theme="warning" dir="ltr" >}}
⚠️ 注意

由於這裡webvirtmgr和kvm服務部署在同一臺機器,所以這裡本地信任。

如果kvm部署在其他機器,那麼這個是其他它的ip 同時也要設定ssh key金鑰
{{< /alert >}}

提示輸入密碼的時候直接輸入之前1.120的密碼

sre運維|Linux運維|自動化運維|關鍵詞

ssh 192.168.1.120 -L localhost:8000:localhost:8000 -L localhost:6080:localhost:6080

web 平臺加入其他kvm宿主機

sre運維|Linux運維|自動化運維|關鍵詞

在部署web管理的主機上執行命令

ssh-keygen -t rsa

然後在執行

ssh-copy-id 192.168.1.165

sre運維|Linux運維|自動化運維|關鍵詞

新增新的kvm宿主機

sre運維|Linux運維|自動化運維|關鍵詞

檢視新加的kvm宿主機狀態 看有無報錯

sre運維|Linux運維|自動化運維|關鍵詞

刪除新加的賬號

sudo saslpasswd2 -a libvirt -d cnsre

確認驗證新加的賬號配置

virsh -c qemu+tcp://IP_address/system nodeinfo
(virsh -c qemu+tcp://192.168.1.50/system nodeinfo)
Please enter your authentication name: cnsre
Please enter your password: xxxxxx
CPU model:           x86_64
CPU(s):              2
CPU frequency:       2611 MHz
CPU socket(s):       1
Core(s) per socket:  2
Thread(s) per core:  1
NUMA cell(s):        1
Memory size:         2019260 kB

{{< alert theme="warning" dir="ltr" >}}
⚠️ 注意

賬號全名帶hostname,如 cnsre@webvirtmgr.cn

測試的時候這一步測試沒有成功 但是可以連結
{{< /alert >}}

設定ssh認證

{{< notice warning "注意" >}}
ssh和tcp設定一種即可,其實就是設定無密碼登入,要注意的是從webvirtmgr的什麼使用者到宿主機的什麼使用者的無密碼登入,比如我用root跑的django webvirtmgr,而宿主機也是root跑的virsh,所以需要設定root到root的無密碼登入。而git官網推薦的是用nginx使用者跑django webvirtmgr,webvirtmgr使用者跑的virsh,所以設定的是nginx使用者到宿主機webvirtmgr使用者的無密碼登入。
{{< /notice >}}

參考:https://github.com/retspen/webvirtmgr/wiki/Setup-SSH-Authorizatio

使用tcp認證連線伺服器

訪問:http://192.168.1.120:8000,xxxx是webvirtmgr的ip地址,點選new connection

填寫kvm宿主機的一些資訊

sre運維|Linux運維|自動化運維|關鍵詞

基礎架構可以看到一些vm虛擬機器

sre運維|Linux運維|自動化運維|關鍵詞

KVM WEB管理常見報錯

網頁控制檯 遠端連結報錯1006

安裝vnc即可

yum install -y novnc

網頁控制檯 遠端連結報錯505

cd /var/www/console/
./webvirtmgr-console  &

後臺執行指令碼

nohup python  /var/www/webvirtmgr/manage.py runserver 0:8000  >/dev/null & 
nohup python  /var/www/console/webvirtmgr-console   >/dev/null &

作者:SRE運維部落格

部落格地址: https://www.cnsre.cn/

文章地址:https://www.cnsre.cn/posts/211117937177/

相關話題:https://www.cnsre.cn/tags/kvm/


相關文章