请启用 Javascript 以查看内容

快速搭建 kvm web 管理工具 WebVirtMgr

 ·   ·  ☕ 6 分钟  ·  ✍ CNSRE

作者: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

安装前的部署

安装一些依赖包

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

安装pip

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

sre运维|Linux运维|自动化运维|关键词

1
pip install numpy

sre运维|Linux运维|自动化运维|关键词

安装python的需要包和配置Django环境

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

sre运维|Linux运维|自动化运维|关键词

安装nginx

1
2
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

1
cat  /etc/supervisord.conf
1
2
3
pip install supervisor
mkdir /etc/supervisord.d/
echo_supervisord_conf > /etc/supervisord.conf

新建文件夹

1
vim /etc/supervisord.d/app.conf

配置文件 app.conf

内容为

1
2
3
4
5
6
7
8
[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

修改 在配置文件最下方修改为

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

sre运维|Linux运维|自动化运维|关键词

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

安装环境

1
2
cd webvirtmgr 
pip install -r requirements.txt 

sre运维|Linux运维|自动化运维|关键词

1
./manage.py syncdb

sre运维|Linux运维|自动化运维|关键词

创建用户

输入以下用户信息

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
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

配置一个超级用户

1
./manage.py createsuperuser

sre运维|Linux运维|自动化运维|关键词

1
2
3
4
5
6
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

1
2
cd  ..
mv webvirtmgr /var/www/

sre运维|Linux运维|自动化运维|关键词

编辑配置文件

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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

1
/etc/init.d/nginx start

或者

1
2
systemctl restart   nginx 
systemctl enable supervisord 

分配权限

1
chown nginx.nginx /var/www/webvirtmgr

设置supervisor

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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
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	

重启supervisord

开机自启参考

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

设置完之后重启即可

1
2
3
systemctl restart  supervisord.service
systemctl enable  supervisord.service
systemctl status   supervisord.service 

sre运维|Linux运维|自动化运维|关键词

更新

1
cd /var/www/webvirtmgr git pull

sre运维|Linux运维|自动化运维|关键词

1
./manage.py collectstatic

sre运维|Linux运维|自动化运维|关键词

1
systemctl  restart supervisord

如果有错误或不运行

1
2
3
4
 ./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认证,也可以正常连接。

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

如果没有curl就用wget

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

配置防火墙

1
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设置密码

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

生成一个密码库

1
2
3
sasldblistusers2 -f /etc/libvirt/passwd.db 

cnsre@webvirtmgr.cn: userPassword

设置ssh授权

1
ssh-keygen -t rsa       # 产生公私钥

直接回车,回车,回车

sre运维|Linux运维|自动化运维|关键词

1
ssh-copy-id 192.168.1.120  

提示输入密码的时候直接输入之前1.120的密码

sre运维|Linux运维|自动化运维|关键词

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

web 平台加入其他kvm宿主机

sre运维|Linux运维|自动化运维|关键词

在部署web管理的主机上执行命令

1
ssh-keygen -t rsa

然后在执行

1
ssh-copy-id 192.168.1.165

sre运维|Linux运维|自动化运维|关键词

添加新的kvm宿主机

sre运维|Linux运维|自动化运维|关键词

查看新加的kvm宿主机状态 看有无报错

sre运维|Linux运维|自动化运维|关键词

删除新加的账号

1
sudo saslpasswd2 -a libvirt -d cnsre

确认验证新加的账号配置

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
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

设置ssh认证

ssh和tcp设置一种即可,其实就是设置无密码登录,要注意的是从webvirtmgr的什么用户到宿主机的什么用户的无密码登录,比如我用root跑的django webvirtmgr,而宿主机也是root跑的virsh,所以需要设置root到root的无密码登录。而git官网推荐的是用nginx用户跑django webvirtmgr,webvirtmgr用户跑的virsh,所以设置的是nginx用户到宿主机webvirtmgr用户的无密码登录。

参考: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即可

1
yum install -y novnc

网页控制台 远程链接报错505

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

后台运行脚本

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

其他web管理 webvirtcloud

webvirtcloud 的作者还是 webvirtmgr的作者,但是 webvirtmgr 已经有好久没有维护了。如果你想体验 webvirtcloud 你可以安装webvirtcloud。

webvirtcloud 特征

  • QEMU/KVM 管理程序管理
  • QEMU/KVM 实例管理 - 创建、删除、更新
  • 虚拟机管理程序和实例基于 Web 的统计信息
  • 管理多个 QEMU/KVM 管理程序
  • 管理管理程序数据存储池
  • 管理管理程序网络
  • 使用浏览器访问实例控制台
  • 基于 Libvirt API 的 Web 管理 UI
  • 基于用户的授权和认证
  • 用户可以在实例中将 SSH 公钥添加到 root(仅测试 Ubuntu)
  • 用户可以在实例中更改 root 密码(仅测试 Ubuntu)
  • 支持 cloud-init 数据源接口
    webvirtcloud具体文档请查看 webvirtcloud 项目

webvirtcloud 的作者也贴心的提供了一键脚本

1
2
3
wget https://raw.githubusercontent.com/retspen/webvirtcloud/master/install.sh 
chmod 744 install.sh #以 sudo 或 root 用户运行
./install.sh

作者:SRE运维博客

博客地址: https://www.cnsre.cn/

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

相关话题:https://www.cnsre.cn/tags/kvm/


分享

Avatar
作者
CNSRE
一位只会重启的运维


目录