KVM WEB 管理工具 WebVirtMgr

原文地址:https://i4t.com/3732.html

xiaoguo.jpeg-98.7kB

一、webvirtmgr 介绍及环境说明
温馨提示:安装 KVM 是需要 2 台都操作的,因为我们是打算将 2 台都设置为宿主机所有都需要安装 KVM 相关组件
github 地址https://github.com/retspen/webvirtmgr

WebVirtMgr 是一个基于 libvirt 的 Web 界面,用于管理虚拟机。它允许您创建和配置新域,并调整域的资源分配。VNC 查看器为来宾域提供完整的图形控制台。KVM 是目前唯一支持的虚拟机管理程序。

ip 地址 主机名 备注
10.4.82.221 abcdocker-kvm web 界面、KVM
10.4.82.220 abcdocker-node KVM
镜像位置 /opt/ WebVirtMgr 存储目录 /data/WebVirtMgr KVM 虚拟机安装目录 /data/kvm/
需要在 2 台服务器上配置 host,密钥分发也是基于 hostname
KVM 安装这里不再介绍,请查看
Centos7 图形化创建 KVM
云计算与虚拟化工具之 KVM

查看本机环境

1. 查看服务器版本号,建议使用 7
[root@abcdocker-kvm ~]# cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)
2. 内核版本
[root@abcdocker-kvm ~]# uname -r
3.10.0-327.el7.x86_64
3. 关闭 Selinux & 防火墙
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i ‘/SELINUX/s/enforcing/disabled/’ /etc/selinux/config
4. 设置 Yum 源
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum makecache
5. 查看是否支持虚拟化
cat /proc/cpuinfo | grep -E ‘vmx|svm’
6. 查看 KVM 驱动是否加载
lsmod | grep kvm
如果没有加载 kvm 驱动,利用命令加载驱动
modprobe -a kvm
modprobe -a kvm_intel
7. 本次 Python 版本
[root@abcdocker-kvm ~]# python -V
Python 2.7.5
现在需要还需要配置 Host
2 台需要相互做 host,同时管理端需要将公钥发送给宿主机,需要基于 host 进行免密

[root@abcdocker-kvm ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
10.4.82.220 abcdocker-node
10.4.82.221 abcdocker-kvm
KVM 管理端生成公钥
[root@abcdocker-kvm ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory ‘/root/.ssh’.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
47:15🇧🇪f2:dd:9f:4f:7d:81:5f:55:88:a0:7e:50:cd root@abcdocker-kvm
The key’s randomart image is:
+–[RSA 2048]—-+
| o+oo ..|
| o oE . .|
| o . . .|
| . o .. .|
| S + .. ..|
| o o …+|
| . ..=|
| .+|
| .+|
+—————–+
设置免密,因为自己也同时提供 KVM 虚拟机,所以也需要配置免密
ssh-copy-id -i .ssh/id_rsa.pub root@abcdocker-kvm
ssh-copy-id -i .ssh/id_rsa.pub root@abcdocker-node
二、安装 KVM
2.1 安装 KVM 依赖包及管理工具
kvm 属于内核态,不需要安装。但是需要一些管理工具包

yum install -y qemu-kvm libvirt libvirt-python libguestfs-tools virt-install virt-manager python-virtinst libvirt-client virt-viewer qemu-kvm-tool
libvirt 用来管理 kvm
yum install -y virt-install
安装管理 KVM 命令
启动 librirt

systemctl start libvirtd.service
systemctl enable libvirtd.service
三、WebVirtMgr 安装
现在我们要在 ip 为 10.4.82.221 上安装控制端, 宿主机不需要安装

WebVirtMgr GitHub 官方 WIKI

3.1 安装依赖包
安装 pip、git 及 supervisor && Nginx

WebVirtMgr 只在管理端安装
yum -y install git python-pip libvirt-python libxml2-python python-websockify supervisor gcc python-devel
这里稍微说一下,Nginx 可以采取源码安装,我使用源码安装演示。不使用 Nginx 不影响
使用 pip 安装 Python 扩展程序库

[root@abcdocker-kvm ~]# pip install numpy
Collecting numpy
Downloading https://files.pythonhosted.org/packages/e1/72/179a78b565ecf01fe98dab6417581d30acac15c2d93c49f93169ebea99b1/numpy-1.16.3-cp27-cp27mu-manylinux1_x86_64.whl (17.0MB)
100% |████████████████████████████████| 17.0MB 73kB/s
Installing collected packages: numpy
Successfully installed numpy-1.16.3
You are using pip version 8.1.2, however version 19.1 is available.
You should consider upgrading via the ‘pip install –upgrade pip’ command.
提示可以忽略
3.2 git 克隆配置并运行 WebVirMgr
创建 data 目录,将 WebVirtMgr 移动到 data 目录,同时创建 KVM 存储目录

[root@abcdocker-kvm ~]# mkdir /data/kvm -pv
mkdir: created directory ‘/data’
mkdir: created directory ‘/data/kvm’
克隆项目
cd /data
git clone git://github.com/retspen/webvirtmgr.git
cd webvirtmgr
pip install -r requirements.txt
requirements.txt 主要是用于记录所有依赖包及其精确的版本号。以便新环境部署
初始化环境
[root@abcdocker-kvm webvirtmgr]# ./manage.py syncdb
WARNING:root:No local_settings file found.
Creating tables …
Creating table auth_permission
Creating table auth_group_permissions
Creating table auth_group
Creating table auth_user_groups
Creating table auth_user_user_permissions
Creating table auth_user
Creating table django_content_type
Creating table django_session
Creating table django_site
Creating table servers_compute
Creating table instance_instance
Creating table create_flavor
You just installed Django’s auth system, which means you don’t have any superusers defined.
这里需要我们输入 Yes,配置管理员用户
配置信息如下

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’): root #用户名称
Email address: cyh@i4t.com #邮箱地址 (可以不填)
Password: #管理员用户密码
Password (again): #重复输入密码
Superuser created successfully. #创建成功
Installing custom SQL …
Installing indexes …
Installed 6 object(s) from 1 fixture(s)
配置 Django 静态页面

./manage.py collectstatic
输入 Yes 即可
如果还想继续添加管理员用户,可以执行下面的命令

./manage.py createsuperuser
以上执行 Python 脚本必须在 webvirtmgr 目录

3.3 启动 WebVirMgr
前台启动 WebVirMgr,默认是 Debug 模式同时日志打印在前台

[root@abcdocker-kvm webvirtmgr]# ./manage.py runserver 0:8000
WARNING:root:No local_settings file found.
WARNING:root:No local_settings file found.
Validating models…
0 errors found
April 26, 2019 - 05:20:08
Django version 1.5.5, using settings ‘webvirtmgr.settings’
Development server is running at http://0:8000/
Quit the server with CONTROL-C.
IP+8000 端口访问
image_1d9b5coou6htcj2uak9vk11pm.png-39.7kB
用户名和密码是我们刚刚创建的

登录成功,没有报错。我们现在 Ctrl+C 退出,安装 Nginx 使用 supervisor 进行管理。如果不想使用 supervisor 和安装 Nginx 下面 3.4 和 3.5 步骤可以跳过

image_1d9b5e6qhfaa5c0152ag14142313.png-40.5kB

3.4 安装 Nginx
1. 安装依赖
yum install -y gcc glibc gcc-c++ prce-devel openssl-devel pcre-devel
2. 安装编译 Nginx
cd /root/
wget http://nginx.org/download/nginx-1.10.3.tar.gz
yum install -y gcc glibc gcc-c++ prce-devel openssl-devel pcre-devel
useradd -s /sbin/nologin nginx -M
tar xf nginx-1.10.3.tar.gz && cd nginx-1.10.3
./configure –prefix=/usr/local/nginx-1.10.3 –user=nginx –group=nginx –with-http_ssl_module –with-http_stub_status_module
make && make install
ln -s /usr/local/nginx-1.10.3 /usr/local/nginx
更多 Nginx 文章参考

修改配置文件

cd /usr/local/nginx/conf
cp nginx.conf{,.bak} && >nginx.conf
#修改 Nginx 配置文件
$ vim nginx.conf
worker_processes 1;
user nginx;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name kvm.i4t.com;
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 $remote_addr;
proxy_connect_timeout 600;
proxy_read_timeout 600;
proxy_send_timeout 600;
client_max_body_size 5120M;
}
location /static/ {
root /data/webvirtmgr;
expires max;
}
}
}
启动 Nginx

[root@abcdocker-kvm conf]# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx-1.10.3/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx-1.10.3/conf/nginx.conf test is successful
[root@abcdocker-kvm conf]# /usr/local/nginx/sbin/nginx
3.5 创建 supervisor 配置文件
我们 supervisorctl 所有的操作都需要在 /data/webvirtmgr/ 下,否则提示找不到文件

WebVirtMgr 默认使用 supervisor 进行管理 (启动停止服务) 所以我们需要配置 supervisor

cat > /etc/supervisord.d/webvirtmgr.ini << EOF
[program:webvirtmgr]
command=/usr/bin/python /data/webvirtmgr/manage.py run_gunicorn -c /data/webvirtmgr/conf/gunicorn.conf.py
directory=/data/webvirtmgr
autostart=true
autorestart=true
logfile=/var/log/supervisor/webvirtmgr.log
log_stderr=true
user=root
[program:webvirtmgr-console]
command=/usr/bin/python /data/webvirtmgr/console/webvirtmgr-console
directory=/data/webvirtmgr
autostart=true
autorestart=true
stdout_logfile=/var/log/supervisor/webvirtmgr-console.log
redirect_stderr=true
user=root
EOF
启动 supervisor

service supervisord stop
service supervisord start
查看是否启动成功

[root@abcdocker-kvm conf]# supervisorctl status
webvirtmgr RUNNING pid 18246, uptime 0:00:05
webvirtmgr-console RUNNING pid 18245, uptime 0:00:05
RUNNING 状态为服务正常
supervisorctl restart all 重启所有 (这里不执行)
浏览器访问 ip+80 端口或者通过域名访问
image_1d9b6ocblvbeec1p2t1p1l1rmf1g.png-65.4kB

域名如果是虚拟机需要修改 host 文件

Windows 修改路径 C:\Windows\System32\drivers\etc #编辑 hosts 文件
Mac 修改路径 /etc/hosts
我这里演示一下 mac
image_1d9c23pva1hj6qi7ion1aov5fq9.png-67.4kB

Nginx 里面定义的域名是 kvm.i4t.com 这里我们就是使用这个域名访问
image_1d9c262snukp1a8m4ssgsc16fqm.png-43.7kB

这里要说一下,IP 和域名都是可以的。用户密码是我们刚刚创建的,如果忘记了可以使用下面的命令从新创建一个管理员用户

./manage.py createsuperuser

四、Web 界面配置 webvirtmgr
4.1 添加主机设置存储
1.Add Connection 添加宿主机 (即 KVM 主机)
2. 点击 SSH 连接
3.Label 为主机名,必须为主机名做免密
4.IP 为宿主机 IP
5. 用户名为服务器用户名
6. 点击添加

image_1d9b6u2f9q7hq9o18nfud4iab1t.png-48.8kB

添加完后点击主机名激活

image_1d9b74dn6i271bfk1k971voa1ki32a.png-24kB

创建存储 KVM 镜像目录

KVM 中的虚拟机都是以镜像的方式进行存储

image_1d9b777v914dvmih7771bgqecd2n.png-29.4kB

服务器创建 KVM 镜像目录

mkdir -p /data/kvm
名称: 这里的名称显示的名称
路径: 即存储 KVM 虚拟机路径
image_1d9b7mhgf1pop12m3cau44h1kf24b.png-42.6kB

创建完毕,现在需要创建镜像(相当于虚拟硬盘大小)
image_1d9b7p3o513a51gaudte1v3485n4o.png-49kB

创建 40G 镜像

下面“Metadata”前的小方框一定不能勾选(默认是勾选的,要去掉!)
这里添加的“镜像”就是所创建虚拟机的硬盘空间(我测试环境给了 150G)
虚拟机所占用的空间就是这个“镜像”所在的宿主机下路径所在的分区空间(也就是 /home/kvm/kvmstorage/,即宿主机的 home 分区)

image_1d9c7v3vd11921gb125snfrj5f5j.png-84kB

创建完毕

image_1d9b9mknj4h9cnk18enoj5m2qar.png-50.8kB

4.2 上传镜像
创建完虚拟硬盘,我们在创建一个 IOS 镜像目录
点击 > 存储池 >NEW_Stored
image_1d9b9okjc1b3hc8jtsq1l0po0jb8.png-31.6kB

image_1d9b9prk71ehk1404sqv1umu1pcebl.png-39kB

点击上传镜像
image_1d9b9stcr1l2e1p6l4irijtd63c2.png-50.6kB

选中镜像选择上传
image_1d9ba4ff21ta4v56dmdmf1ng5cf.png-58.3kB

除了在浏览器上传,还可以直接下载阿里云镜像站镜像。只要镜像在 /opt 下就会被获取

wget -P /opt/ https://mirrors.aliyun.com/centos/7.6.1810/isos/x86_64/CentOS-7-x86_64-DVD-1810.iso
我们使用的是虚拟机,这里我就安装用虚拟机的光盘镜像进行导入镜像

首先需要右击虚拟机挂载
VMware15 虚拟机下载
image_1d9b2lf6t1skpngsmm6fno1ts99.png-77.1kB

挂在完成后复制镜像

[root@abcdocker-kvm ~]# dd if=/dev/cdrom of=/opt/CentOS-7.2.iso
#我们创建完镜像存储目录,在 /opt 下的镜像都会在 web 页面显示。没有显示刷新一下或者重启
[root@abcdocker-kvm ~]# ll /opt/
total 4228096
-rw-r–r– 1 root root 4329570304 Apr 25 21:40 CentOS-7.2.iso
这里说一下,如果使用 Web 界面上传镜像 nginx 出现 413 的情况请修改 client_max_body_size 参数
image_1d9ba995c18ktajslg4nul1ictcs.png-53.3kB

[root@abcdocker-kvm opt]# grep -rn “client_max_body_size” /usr/local/nginx/conf/nginx.conf
30: client_max_body_size 5120M;
/usr/local/nginx/sbin/nginx -t
/usr/local/nginx/sbin/nginx -s reload
修改完毕后,重新上传即可

1.jpg-44.8kB

4.3 创建桥接网卡
默认 KVM 虚拟机的网络为 NAT,只可以宿主机访问。宿主机之外就无法访问,不满足我们的业务要求,所以我们

创建桥接网卡

1. 编辑宿主机网卡
[root@abcdocker-kvm ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE=Ethernet
BOOTPROTO=none
NAME=eth0
UUID=286d3fd9-f01e-459c-bd68-ae98c096c8fa
DEVICE=eth0
ONBOOT=yes
#IPADDR=10.4.82.221
#GATEWAY=10.4.82.1
#NETMASK=255.255.255.0
#DNS1=10.4.82.1
#DNS2=223.5.5.5
BRIDGE=br0

注释原来的 IP,添加一行 BRIDGE=br0

2. 添加 bro 虚拟网卡
[root@abcdocker-kvm ~]# cat /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE=br0
BOOTPROTO=none
ONBOOT=yes
TYPE=Bridge
IPADDR=10.4.82.221
GATEWAY=10.4.82.1
NETMASK=255.255.255.0
DNS1=10.4.82.1
DNS2=223.5.5.5
#br0 网卡除了添加基础信息,还需要将 IP 和 DNS 添加上即可
3.restart network
/etc/init.d/network restart
4. 验证,可以看到已经有 5:br0 网卡
[root@abcdocker-kvm network-scripts]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UP qlen 1000
link/ether 00:0c:29🇧🇦3a:83 brd ff:ff:ff:ff:ff:ff
3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN qlen 1000
link/ether 52:54:00:f2:41:f9 brd ff:ff:ff:ff:ff:ff
inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
valid_lft forever preferred_lft forever
4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN qlen 1000
link/ether 52:54:00:f2:41:f9 brd ff:ff:ff:ff:ff:ff
5: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP qlen 1000
link/ether 00:0c:29🇧🇦3a:83 brd ff:ff:ff:ff:ff:ff
inet 10.4.82.221/24 brd 10.2.52.255 scope global br0
valid_lft forever preferred_lft forever
inet6 fe80::84e7:9ff:fe17:fbd1/64 scope link
valid_lft forever preferred_lft forever
温馨提示:以上操作有风险,需要做好网络断开的准备!

添加桥接网卡, 这里说明一下。不要开启 Open vSwitch

如果添加还没开启 vSwithch 会提示 internal error: Unable to add port vnet0 to OVS bridge br0

image_1d9fmubvheti14lh1h77d0b15759.png-68.5kB

网络类型选择 BRIDGE
桥接名称和显示名称都修改为 br0

这里科普一下 vSwitch(Virtual Switch)指虚拟交换机或虚拟网络交换机,工作在二层数据网络,通过软件方式实现物理交换机的二层(和部分三层)网络功能。

添加完成后的状态
image_1d9b92fje53a1q6oq6rc1813n80.png-39.6kB

配置完成后需要我们在网络池里面禁用 Default, 因为默认走的是 Default。不禁用会出现问题

目前 Default 网卡处于禁用状态

123.png-137.6kB
image_1d9c4s8lp1g7m1e5d1nbb1npm1qgt3f.png-56.8kB

Bridge 添加完成后,刷新页面会显示 interface,如果不显示,重启 libvirtd 和 supervisord

查看 Interfaces
当我们设置完桥接网卡,Interfaces 会自动更新最新网卡

默认是 eth0
image_1d9c32pjqtdkhhh1brf5bf1fvl13.png-61.3kB
修改后为 br0 桥接网卡
image_1d9b95e2c1r0u7dg8kl1q4utul8q.png-32.7kB

点进去我们可以看到现在的网卡提供的设备是 eth0
image_1d9b96j8514re1ccbt297hl1nph97.png-38.7kB

4.4 创建虚拟机
image_1d9b9buho17kk8791dv1eovaak9k.png-26.8kB

这里我们选择创建自定义虚拟机

image_1d9b9cap51des1as1rv416p7ss9a1.png-54.9kB

设置名称、cpu、硬盘(都是中文我就不翻译了)

image_1d9c5g1vqn1m1pn5d1hm821m9n56.png-113.8kB

点击设置,点 Media 选择连接
image_1d9bas0nb4js62p1kaj1s691r31f5.png-46.4kB
image_1d9batfeh2481rpe18k91l8o14rlfi.png-46.4kB

我们点击开机
image_1d9bau8451gobcdrhv16bu1j76fv.png-41.6kB

查看控制台的 2 种方法
image_1d9bb4eo412bt10dv7v5tgolomgp.png-47.1kB
321.png-101.7kB

配置 eth0 为网卡

键盘移动到 Install Centos 7,按 tab 输入 net.ifnames=0 biosdevname=0
如果不执行还有第二种方法修改网卡 Centos7 修改网卡为 eth0

322.png-187.3kB

接下来就是配置 KVM,后面就不详细说了
image_1d9caqdh5v7r18tv1vn1vh8qqf9.png-268.5kB

如果我们之前的服务器安装过 KVM,这里我们直接添加即可
KVM 图形化安装虚拟机
KVM 安装

最后我们可以一下添加完后的结构
1111111.png-100.8kB
2222222.png-272.4kB

我们可以查看一下快照,会自动将 KVM 快照打印出来

创建快照不支持中文,中文会提示内部 500

image_1d9fq2hif5i515h7uqg1dfr8uu.png-110.7kB