KVM management tool WebVirtMgr deployment under centos7.7

1 Basic environment configuration

1.1  Introduction to webvirtmgr 

        As more and more KVM hosts are needed, the state of the host needs to be regulated and decided to use WebVirtMgr as a kvm virtualized web management tool. The graphical WEB allows people to more easily view the status and operation of the kvm host.
        WebVirtMgr is a very fresh KVM management platform that provides unified management of the host machine and the virtual machine. It is different from the KVM's own graphical management tool (virtual machine manager). The kvm application scenario brings more convenience.
      WebVirtMgr is developed with almost pure Python. Its front end is based on Python Django, and the back end is based on Libvirt's Python interface, which makes daily kvm management operations more visible.

webvirtmgr features

Simple operation, easy to use
to manage KVM through API interface of libvirt,
provide life cycle management of virtual machine

WebVirtMgr features

Host management supports the following functions:

CPU utilization
memory utilization
network resource pool management
storage resource pool management
virtual machine mirroring
virtual machine clone
snapshot management
log management
virtual machine migration

Virtual machine management supports the following functions:

CPU utilization,
memory utilization,
CD management,
off / on / pause virtual machine
installation, virtual machine
VNC console connection,
create snapshot

1.2  Operating system environment configuration

Server ip

CPU name

use

operating system

Configuration

192.168.1.226

kvm1

Webvirtmgr node

Centos7.7

4 core 8G

192.168.1.227

kvm2

node1 sqm

Centos7.7

16 core 32G

1. Turn off the firewall, selinux

#systemctl stop firewalld

#systemctl  disable  firewalld

#vim /etc/sysconfig/selinux

SELINUX=disabled

#setenforce 0

#getenforce

2. Check if virtualization is supported

Note: Paravirtualization cannot run and install KVM virtual machines.

#egrep '(vmx|svm)' --color=always /proc/cpuinfo

3. Configure local source, Ali source

#挂载本地镜像
#mkdir -pv /mnt/dvd
#mount /dev/sr0  /mnt/dvd
#echo "mount /dev/sr0  /mnt/dvd"  >> /etc/rc.local
#chmod  +x /etc/rc.d/rc.local
#cat /etc/rc.d/rc.local

#配置本地源
#cd /etc/yum.repos.d
#mkdir -pv bak
#mv *.repo   bak/
#vim dvd.repo
[linux7]
name=centos7
baseurl=file:///mnt/dvd
gpgcheck=0
enable=1

#配置阿里源
#wget -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 clean all
#yum repolist
#yum makecache

4.配置/etc/hosts

#hostnamectl set-hostname  kvm1
#hostnamectl set-hostname  kvm2
#echo -e "192.168.1.226    kvm1\n192.168.1.227    kvm2" >> /etc/hosts

5.关闭NetworkManager

#systemctl stop  NetworkManager
#systemctl disable NetworkManager

2 部署webvirtmgr

参考官网:https://github.com/retspen/webvirtmgr/wiki/Install-WebVirtMgr

2.1 安装依赖包

注意:以下都在kvm1(192.168.1.226)主机上操作;

#yum install git python-pip libvirt-python libxml2-python python-websockify supervisor nginx   net-tools  libvirt-client  -y

2.2下载webvirtmgr代码

从git-hub中下载相关的webvirtmgr代码
#cd /usr/local/src/
#git clone git://github.com/retspen/webvirtmgr.git
#ls

2.3 安装webvirtmgr

#cd webvirtmgr/
#pip install -r requirements.txt

注意:如果上面的命令执行中报错了,超时之类的,请更换有效的DNS比如阿里的DNS1:233.5.5.5或233.6.6.6。

2.4 检查sqlite3

说明:自带不需要安装,导入模块检查一下

#python
Python 2.7.5 (default, Aug  7 2019, 00:51:29)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-39)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sqlite3
>>> exit()

2.5 初始化账号

#cd /usr/local/src/webvirtmgr
#./manage.py syncdb

  

账号密码:admin/123

2.6 拷贝web到相关目录

# mkdir -pv /var/www
# cp -r /usr/local/src/webvirtmgr /var/www/webvirtmgr

#更改所属主,属组
#chown -R nginx:nginx /var/www/webvirtmgr

2.7 编辑nginx配置文件

#备份原有配置文件
#cd /etc/nginx/
#mkdir -pv bak
#cp -apr nginx.conf   bak/
#cp -apr nginx.conf.default  nginx.conf

#修改主配置文件
# vi nginx.conf
添加这行代码: include /etc/nginx/conf.d/*.conf;

#cat nginx.conf
#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;
    include /etc/nginx/conf.d/*.conf;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }


    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}


    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

}

2.8 添加 webvirtmgr.conf 配置文件

说明:该配置文件在原有路径下没有,直接添加即可;

#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 $remote_addr;
proxy_connect_timeout 600;
proxy_read_timeout 600;
proxy_send_timeout 600;
client_max_body_size 1024M; # Set higher depending on your needs
}
}

2.9 启动nginx

#检测配置文件,如果发现报错,需要处理;

#nginx -t

  

#systemctl start nginx
#systemctl  status  nginx
#netstat -tunlp | grep 80

  

2.10 设置supervisor

如果iptables防火墙开启的话,就必须要开通80、8000、6080端口访问。

#vim /etc/supervisord.conf
在文件末尾添加,注意将默认的python改为python2,因为上面只有用这个版本执行才不报错!
[program:webvirtmgr]
command=/usr/bin/python2 /var/www/webvirtmgr/manage.py run_gunicorn -c /var/www/webvirtmgr/conf/gunicorn.conf.py            //启动8000端口
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/python2 /var/www/webvirtmgr/console/webvirtmgr-console                               //启动6080端口(这是控制台vnc端口)
directory=/var/www/webvirtmgr
autostart=true
autorestart=true
stdout_logfile=/var/log/supervisor/webvirtmgr-console.log
redirect_stderr=true

检查配置文件

#vi /var/www/webvirtmgr/conf/gunicorn.conf.py

确保下面bind绑定的是本机的8000端口,这个在nginx配置中定义了,被代理的端口

  

2.11 设置开机自启

#设置开机自启
#systemctl enable supervisord.service
#systemctl enable nginx

#启动服务
#systemctl start supervisord
#systemctl status supervisord

  

2.12 浏览器访问

浏览器访问:

http://192.168.1.226/login/

账号密码:admin/123

#配置连接

 

3 部署KVM

注意:以下都在kvm2(192.168.1.227)主机上操作

按照1.2操作,配置好基础环境;

3.1 安装kvm软件

#yum install qemu-kvm libvirt libvirt-python libguestfs-tools virt-install virt-manager python-virtinst libvirt-client virt-viewer -y

#启动libvirtd
#systemctl enable libvirtd && systemctl start libvirtd && systemctl  status libvirtd

#ln -s /usr/libexec/qemu-kvm  /usr/bin/qemu-kvm

#查看虚拟工具版本
#virsh --version
#virt-install --version

#测试
#virsh -c qemu:///system list

  

3.2 配置桥接网络

1.查看本机网络

#ip a

  

2.配置桥接网络

#cd /etc/sysconfig/network-scripts
#cat ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
NAME=ens33
UUID=0bbd90e5-b6c2-4f9f-84ff-c7ceb961bae0
DEVICE=ens33
ONBOOT=yes
BRIDGE=br0
NM_CONTROLLED=no   //设置为no!让网卡不受networkmanager的控制

#cat ifcfg-br0
TYPE=Bridge
BOOTPROTO=none
DEVICE=br0
IPADDR=192.168.1.227
PREFIX=24
GATEWAY=192.168.1.254
DNS1=114.114.114.114

3.重启网卡

#/etc/init.d/network  restart

4.查看网桥br0信息

# ifconfig

  

#virbr0虚拟网卡有没有都不影响虚拟机的使用,有办法可以将其删除,但是保留也不影响;

5.查看网桥

#brctl show

  

4 控制台和kvm节点交互配置

4.1生成密钥

切换到 nginx 用户,生成密钥对,然后将公钥拷贝到 kvm主机节点,实现免密码登录,因为命令是通过nginx用户发送到kvm主机执行的。

Webvirtmgr(192.168.1.226)主机

#su - nginx -s /bin/bash
-bash-4.2$ ssh-keygen -t rsa -P ''   //之后按回车

#将密钥拷贝到 KVM主机,需要输入root密码
-bash-4.2$ ssh-copy-id [email protected]

注意:如果这里是非22端口则采用如下命令:
ssh-copy-id '-p [ssh端口] [email protected]'

  

#libvirt-client 测试访问
-bash-4.2$ virsh --connect qemu+ssh://[email protected]/system list --all

访问成功,接下来就可以在 web 页面进行操作了。

 

添加kvm主机192.168.1.227;

 

 点进来如果没有任何报错,那么基本上已经添加主机成功了。

4.2创建网络池

说明:此步骤在已经创建桥接网络的基础上

1.查看网络接口,已存在桥接网口

2.点击网络池--->New Network

添加新的网络

查看添加的网络

4.3创建存储池

 

 

  

Kvm主机本地目录/data/images必须存在;

添加系统镜像

Kvm主机本地目录/data/iso下必须存在系统镜像;

4.4 创建虚拟机

1.先创建一个qcow2空镜像;

点击进入images;

点击添加镜像;

 

 

2.创建虚拟机实例

 

 

 

 

 

选择创建好的镜像文件test1和网络池br0;

找到系统镜像并点击连接;

启动虚拟机;

 

 

通过控制台进入看到虚拟机处于待安装操作系统的状态;


参考链接:

https://www.cnblogs.com/kevingrace/p/5737487.html

https://www.cnblogs.com/hukey/p/11344676.html

https://www.cnblogs.com/djlsunshine/p/11032494.html

https://www.cnblogs.com/nulige/p/9236191.html

https://www.centos.bz/2018/07/centos7-2-kvm%e8%99%9a%e6%8b%9f%e5%8c%96%e7%ae%a1%e7%90%86%e5%b9%b3%e5%8f%b0webvirtmgr%e9%83%a8%e7%bd%b2/

  

Guess you like

Origin www.cnblogs.com/llwxhn/p/12730416.html