KVM WEB管理工具 WebVirtMgr

2023年 5月 4日 147.9k 0

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.查看服务器版本号,建议使用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:be: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:WindowsSystem32driversetc #编辑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:  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:  mtu 1500 qdisc pfifo_fast master br0 state UP qlen 1000
        link/ether 00:0c:29:ba:3a:83 brd ff:ff:ff:ff:ff:ff
    3: virbr0:  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:  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:  mtu 1500 qdisc noqueue state UP qlen 1000
        link/ether 00:0c:29:ba: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

    相关文章:

    1. KVM 安装
    2. Xtrabackup安装以及应用
    3. Kubernetes 1.14 二进制集群安装
    4. Kuerbernetes 1.11 集群二进制安装

    相关文章

    LeaferJS 1.0 重磅发布:强悍的前端 Canvas 渲染引擎
    10分钟搞定支持通配符的永久有效免费HTTPS证书
    300 多个 Microsoft Excel 快捷方式
    一步步配置基于kubeadmin的kubevip高可用
    istio全链路传递cookie和header灰度
    REST Web 服务版本控制

    发布评论