KVM WEB管理工具 WebVirtMgr

摘要

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

KVM WEB管理工具 WebVirtMgr

KVM
2019年04月28日


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. 1.查看服务器版本号,建议使用7
  2. [root@abcdocker-kvm ~]# cat /etc/redhat-release
  3. CentOS Linux release 7.2.1511 (Core)
  4. 2.内核版本
  5. [root@abcdocker-kvm ~]# uname -r
  6. 3.10.0-327.el7.x86_64
  7. 3.关闭Selinux & 防火墙
  8. systemctl stop firewalld
  9. systemctl disable firewalld
  10. setenforce 0
  11. sed -i '/SELINUX/s/enforcing/disabled/' /etc/selinux/config
  12. 4.设置Yum
  13. curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
  14. wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
  15. yum makecache
  16. 5.查看是否支持虚拟化
  17. cat /proc/cpuinfo | grep -E 'vmx|svm'
  18. 6.查看KVM 驱动是否加载
  19. lsmod | grep kvm
  20. 如果没有加载kvm驱动,利用命令加载驱动
  21. modprobe -a kvm
  22. modprobe -a kvm_intel
  23. 7.本次Python版本
  24. [root@abcdocker-kvm ~]# python -V
  25. Python 2.7.5

现在需要还需要配置Host
2台需要相互做host,同时管理端需要将公钥发送给宿主机,需要基于host进行免密

  1. [root@abcdocker-kvm ~]# cat /etc/hosts
  2. 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
  3. ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
  4. 10.4.82.220 abcdocker-node
  5. 10.4.82.221 abcdocker-kvm
  6. KVM管理端生成公钥
  7. [root@abcdocker-kvm ~]# ssh-keygen
  8. Generating public/private rsa key pair.
  9. Enter file in which to save the key (/root/.ssh/id_rsa):
  10. Created directory '/root/.ssh'.
  11. Enter passphrase (empty for no passphrase):
  12. Enter same passphrase again:
  13. Your identification has been saved in /root/.ssh/id_rsa.
  14. Your public key has been saved in /root/.ssh/id_rsa.pub.
  15. The key fingerprint is:
  16. 47:15:be:f2:dd:9f:4f:7d:81:5f:55:88:a0:7e:50:cd root@abcdocker-kvm
  17. The key's randomart image is:
  18. +--[ RSA 2048]----+
  19. | o+oo ..|
  20. | o oE . .|
  21. | o . . .|
  22. | . o .. .|
  23. | S + .. ..|
  24. | o o ...+|
  25. | . ..=|
  26. | .+|
  27. | .+|
  28. +-----------------+
  29. 设置免密,因为自己也同时提供KVM虚拟机,所以也需要配置免密
  30. ssh-copy-id -i .ssh/id_rsa.pub root@abcdocker-kvm
  31. ssh-copy-id -i .ssh/id_rsa.pub root@abcdocker-node

二、安装KVM

2.1 安装KVM依赖包及管理工具

kvm属于内核态,不需要安装。但是需要一些管理工具包

  1. yum install -y qemu-kvm libvirt libvirt-python libguestfs-tools virt-install virt-manager python-virtinst libvirt-client virt-viewer qemu-kvm-tool
  2. libvirt 用来管理kvm
  3. yum install -y virt-install
  4. 安装管理KVM命令

启动librirt

  1. systemctl start libvirtd.service
  2. systemctl enable libvirtd.service

三、WebVirtMgr 安装

现在我们要在ip为10.4.82.221上安装控制端,宿主机不需要安装

WebVirtMgr GitHub官方WIKI

3.1 安装依赖包

安装pip、git及supervisor && Nginx

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

使用pip安装Python扩展程序库

  1. [root@abcdocker-kvm ~]# pip install numpy
  2. Collecting numpy
  3. Downloading https://files.pythonhosted.org/packages/e1/72/179a78b565ecf01fe98dab6417581d30acac15c2d93c49f93169ebea99b1/numpy-1.16.3-cp27-cp27mu-manylinux1_x86_64.whl (17.0MB)
  4. 100% |████████████████████████████████| 17.0MB 73kB/s
  5. Installing collected packages: numpy
  6. Successfully installed numpy-1.16.3
  7. You are using pip version 8.1.2, however version 19.1 is available.
  8. You should consider upgrading via the 'pip install --upgrade pip' command.
  9. 提示可以忽略

3.2 git克隆配置并运行WebVirMgr

创建data目录,将WebVirtMgr移动到data目录,同时创建KVM存储目录

  1. [root@abcdocker-kvm ~]# mkdir /data/kvm -pv
  2. mkdir: created directory ‘/data
  3. mkdir: created directory ‘/data/kvm
  4. 克隆项目
  5. cd /data
  6. git clone git://github.com/retspen/webvirtmgr.git
  7. cd webvirtmgr
  8. pip install -r requirements.txt
  9. requirements.txt主要是用于记录所有依赖包及其精确的版本号。以便新环境部署
  10. 初始化环境
  11. [root@abcdocker-kvm webvirtmgr]# ./manage.py syncdb
  12. WARNING:root:No local_settings file found.
  13. Creating tables ...
  14. Creating table auth_permission
  15. Creating table auth_group_permissions
  16. Creating table auth_group
  17. Creating table auth_user_groups
  18. Creating table auth_user_user_permissions
  19. Creating table auth_user
  20. Creating table django_content_type
  21. Creating table django_session
  22. Creating table django_site
  23. Creating table servers_compute
  24. Creating table instance_instance
  25. Creating table create_flavor
  26. You just installed Django's auth system, which means you don't have any superusers defined.
  27. 这里需要我们输入Yes,配置管理员用户

配置信息如下

  1. You just installed Django's auth system, which means you don't have any superusers defined.
  2. Would you like to create one now? (yes/no): yes #是否现在创建管理员用户
  3. Username (leave blank to use 'root'): root #用户名称
  4. Email address: cyh@i4t.com #邮箱地址 (可以不填)
  5. Password: #管理员用户密码
  6. Password (again): #重复输入密码
  7. Superuser created successfully. #创建成功
  8. Installing custom SQL ...
  9. Installing indexes ...
  10. Installed 6 object(s) from 1 fixture(s)

配置Django 静态页面

  1. ./manage.py collectstatic
  2. 输入Yes即可

如果还想继续添加管理员用户,可以执行下面的命令

  1. ./manage.py createsuperuser

以上执行Python脚本必须在webvirtmgr目录

3.3 启动WebVirMgr

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

  1. [root@abcdocker-kvm webvirtmgr]# ./manage.py runserver 0:8000
  2. WARNING:root:No local_settings file found.
  3. WARNING:root:No local_settings file found.
  4. Validating models...
  5. 0 errors found
  6. April 26, 2019 - 05:20:08
  7. Django version 1.5.5, using settings 'webvirtmgr.settings'
  8. Development server is running at http://0:8000/
  9. Quit the server with CONTROL-C.

IP+8000端口访问
image_1d9b5coou6htcj2uak9vk11pm.png-39.7kB
用户名和密码是我们刚刚创建的

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

image_1d9b5e6qhfaa5c0152ag14142313.png-40.5kB

3.4 安装Nginx

  1. 1.安装依赖
  2. yum install -y gcc glibc gcc-c++ prce-devel openssl-devel pcre-devel
  3. 2.安装编译Nginx
  4. cd /root/
  5. wget http://nginx.org/download/nginx-1.10.3.tar.gz
  6. yum install -y gcc glibc gcc-c++ prce-devel openssl-devel pcre-devel
  7. useradd -s /sbin/nologin nginx -M
  8. tar xf nginx-1.10.3.tar.gz && cd nginx-1.10.3
  9. ./configure --prefix=/usr/local/nginx-1.10.3 --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module
  10. make && make install
  11. ln -s /usr/local/nginx-1.10.3 /usr/local/nginx

更多Nginx文章参考

修改配置文件

  1. cd /usr/local/nginx/conf
  2. cp nginx.conf{,.bak} && >nginx.conf
  3. #修改Nginx配置文件
  4. $ vim nginx.conf
  5. worker_processes 1;
  6. user nginx;
  7. events {
  8. worker_connections 1024;
  9. }
  10. http {
  11. include mime.types;
  12. default_type application/octet-stream;
  13. sendfile on;
  14. keepalive_timeout 65;
  15. server {
  16. listen 80;
  17. server_name kvm.i4t.com;
  18. location / {
  19. proxy_pass http://127.0.0.1:8000;
  20. proxy_set_header X-Real-IP $remote_addr;
  21. proxy_set_header X-Forwarded-for $proxy_add_x_forwarded_for;
  22. proxy_set_header Host $host:$server_port;
  23. proxy_set_header X-Forwarded-Proto $remote_addr;
  24. proxy_connect_timeout 600;
  25. proxy_read_timeout 600;
  26. proxy_send_timeout 600;
  27. client_max_body_size 5120M;
  28. }
  29. location /static/ {
  30. root /data/webvirtmgr;
  31. expires max;
  32. }
  33. }
  34. }

启动Nginx

  1. [root@abcdocker-kvm conf]# /usr/local/nginx/sbin/nginx -t
  2. nginx: the configuration file /usr/local/nginx-1.10.3/conf/nginx.conf syntax is ok
  3. nginx: configuration file /usr/local/nginx-1.10.3/conf/nginx.conf test is successful
  4. [root@abcdocker-kvm conf]# /usr/local/nginx/sbin/nginx

3.5 创建supervisor配置文件

我们supervisorctl所有的操作都需要在/data/webvirtmgr/下,否则提示找不到文件

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

  1. cat > /etc/supervisord.d/webvirtmgr.ini << EOF
  2. [program:webvirtmgr]
  3. command=/usr/bin/python /data/webvirtmgr/manage.py run_gunicorn -c /data/webvirtmgr/conf/gunicorn.conf.py
  4. directory=/data/webvirtmgr
  5. autostart=true
  6. autorestart=true
  7. logfile=/var/log/supervisor/webvirtmgr.log
  8. log_stderr=true
  9. user=root
  10. [program:webvirtmgr-console]
  11. command=/usr/bin/python /data/webvirtmgr/console/webvirtmgr-console
  12. directory=/data/webvirtmgr
  13. autostart=true
  14. autorestart=true
  15. stdout_logfile=/var/log/supervisor/webvirtmgr-console.log
  16. redirect_stderr=true
  17. user=root
  18. EOF

启动supervisor

  1. service supervisord stop
  2. service supervisord start

查看是否启动成功

  1. [root@abcdocker-kvm conf]# supervisorctl status
  2. webvirtmgr RUNNING pid 18246, uptime 0:00:05
  3. webvirtmgr-console RUNNING pid 18245, uptime 0:00:05
  4. RUNNING状态为服务正常
  5. 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.old.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镜像目录

  1. 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下就会被获取

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

挂在完成后复制镜像

  1. [root@abcdocker-kvm ~]# dd if=/dev/cdrom of=/opt/CentOS-7.2.iso
  2. #我们创建完镜像存储目录,在/opt下的镜像都会在web页面显示。没有显示刷新一下或者重启
  3. [root@abcdocker-kvm ~]# ll /opt/
  4. total 4228096
  5. -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

  1. [root@abcdocker-kvm opt]# grep -rn "client_max_body_size" /usr/local/nginx/conf/nginx.conf
  2. 30: client_max_body_size 5120M;
  3. /usr/local/nginx/sbin/nginx -t
  4. /usr/local/nginx/sbin/nginx -s reload

修改完毕后,重新上传即可

1.jpg-44.8kB

4.3 创建桥接网卡

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

创建桥接网卡

  1. 1.编辑宿主机网卡
  2. [root@abcdocker-kvm ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
  3. TYPE=Ethernet
  4. BOOTPROTO=none
  5. NAME=eth0
  6. UUID=286d3fd9-f01e-459c-bd68-ae98c096c8fa
  7. DEVICE=eth0
  8. ONBOOT=yes
  9. #IPADDR=10.4.82.221
  10. #GATEWAY=10.4.82.1
  11. #NETMASK=255.255.255.0
  12. #DNS1=10.4.82.1
  13. #DNS2=223.5.5.5
  14. BRIDGE=br0
  15. ## 注释原来的IP,添加一行BRIDGE=br0
  16. 2.添加bro虚拟网卡
  17. [root@abcdocker-kvm ~]# cat /etc/sysconfig/network-scripts/ifcfg-br0
  18. DEVICE=br0
  19. BOOTPROTO=none
  20. ONBOOT=yes
  21. TYPE=Bridge
  22. IPADDR=10.4.82.221
  23. GATEWAY=10.4.82.1
  24. NETMASK=255.255.255.0
  25. DNS1=10.4.82.1
  26. DNS2=223.5.5.5
  27. #br0网卡除了添加基础信息,还需要将IP和DNS添加上即可
  28. 3.restart network
  29. /etc/init.d/network restart
  30. 4.验证,可以看到已经有5:br0网卡
  31. [root@abcdocker-kvm network-scripts]# ip a
  32. 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
  33. link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
  34. inet 127.0.0.1/8 scope host lo
  35. valid_lft forever preferred_lft forever
  36. inet6 ::1/128 scope host
  37. valid_lft forever preferred_lft forever
  38. 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UP qlen 1000
  39. link/ether 00:0c:29:ba:3a:83 brd ff:ff:ff:ff:ff:ff
  40. 3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN qlen 1000
  41. link/ether 52:54:00:f2:41:f9 brd ff:ff:ff:ff:ff:ff
  42. inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
  43. valid_lft forever preferred_lft forever
  44. 4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN qlen 1000
  45. link/ether 52:54:00:f2:41:f9 brd ff:ff:ff:ff:ff:ff
  46. 5: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP qlen 1000
  47. link/ether 00:0c:29:ba:3a:83 brd ff:ff:ff:ff:ff:ff
  48. inet 10.4.82.221/24 brd 10.2.52.255 scope global br0
  49. valid_lft forever preferred_lft forever
  50. inet6 fe80::84e7:9ff:fe17:fbd1/64 scope link
  51. 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


新闻联播老司机

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: