webvirtmgr搭建及详解

#虚拟机版本

vmware workstation 15.5.0 pro   (也就是linux版)

注:宿机需提前装好vnc

cat /etc/redhat-release

  CentOS Linux release 7.4.1708 (Core)

uname -r

  3.10.0-693.el7.x86_64

            该文章讲解的是kvm和virtmgr在不同的服务器上部署,而非2个服务在同一台服务器上

 

IP

网关

网络

主机名

CPU

内存

硬盘

服务

镜像位置

Node

192.168.1.133/24

192.168.1.1/24

桥接

node

4核

6G

100G

kvm

 

Master

192.168.1.128/24

master

2核

4G

100G

webvirtmgr

/opop/CentOS-7-x86_64-DVD-1708.iso

#检查是否支持虚拟机(node端执行)

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

lsmod |grep kvm

如无开启cpu支持vmx或svm,实体机需在bios中开启,虚拟机开启方法见下图:

                   右下角打上对号后开机即可

#关闭防火墙和SELinux(两端执行)

iptables -F && iptables-save

systemctl stop firewalld && systemctl disable firewalld

sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

setenforce 0

systemctl disable NetworkManager

#安装kvm(node端执行)

yum -y install wget

mv /etc/yum.repos.d/CentOS-Base.repo{,.backup}

wget -O /CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

cd /etc/yum.repos.d/; for i in `ls`;do mv $i{,.bak};done

mv /CentOS-Base.repo /etc/yum.repos.d/

yum -y install epel-release && yum clean all && yum makecache  

yum -y install qemu-kvm qemu-img virt-manager libvirt libvirt-python libvirt-client virt-install virt-viewer

systemctl start libvirtd && systemctl enable libvirtd

# 查看libvitd服务的状态开机启动

systemctl status libvirtd && systemctl is-enabled libvirtd

#配置桥接网络br0(node端执行)

vim /etc/sysconfig/network-scripts/ifcfg-br0          #新建该文件

DEVICE=br0

ONBOOT=yes

BOOTPROTO=none

IPADDR=192.168.1.133   

GATEWAY=192.168.1.1

NETMASK=255.255.255.0

DNS1=192.168.1.1

NBOOT="yes"

TYPE="Bridge"

vim /etc/sysconfig/network-scripts/ifcfg-ens33

TYPE="Ethernet"

NAME="ens33"

DEVICE="ens33"

ONBOOT="yes"

BRIDGE=br0

ZONE=public

#开启转发功能并修改ulimit参数(Node端执行)

echo 1 > /proc/sys/net/ipv4/ip_forward

echo -e "* soft nproc 65500" >>/etc/security/limits.conf

echo -e "* hard nproc 65500" >>/etc/security/limits.conf

echo -e "* soft nofile 65500" >>/etc/security/limits.conf

echo -e "* hard nofile 65500" >>/etc/security/limits.conf

#重启服务器使网卡配置生效(重启网卡有时候不管用)

reboot

注:这里有一个误区,如果单独只是重启网卡的话ssh会断开且会有其他问题,所以这里我reboot一下

#重启libvirt(node端执行)

systemctl restart libvirtd && systemctl status libvirtd

#测试

virsh -c qemu:///system list

#查看virsh版本

virsh --version

#做个软连接

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

lsmod |grep kvm

#查看网桥

brctl show

#设置权限
sed -i "s/#spice_listen/spice_listen/" /etc/libvirt/qemu.conf

sed -i "s/#spice_tls = 1/spice_tls = 1/" /etc/libvirt/qemu.conf
sed -i "s/#vnc_listen/vnc_listen/" /etc/libvirt/qemu.conf

sed -i "s/#user = "root"/user = "root"/" /etc/libvirt/qemu.conf

sed -i "s/#group = "root"/group = "root"/" /etc/libvirt/qemu.conf

sed -i "s/#dynamic_ownership = 1/dynamic_ownership = 1/" /etc/libvirt/qemu.conf

systemctl restart libvirtd

注:如需单独安装kvm虚拟机,请看我另一篇文章

部署webvirtmgrmaster端执行)

这里使用脚本安装前期少量的部分

#!/usr/bin/env bash

. /etc/init.d/functions

yum -y install wget

wget -O /CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

cd /etc/yum.repos.d/; for i in `ls`;do mv $i{,.bak};done

mv /CentOS-Base.repo /etc/yum.repos.d/

yum -y install epel-release && yum clean all && yum makecache

yum -y install https://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/e/epel-release-7-12.noarch.rpm

yum -y install git python-pip libvirt-python libxml2-python python-websockify supervisor nginx gcc gcc-c++ python-devel

git clone --depth=1 git@github.com:retspen/webvirtmgr.git

if [ $? -ne 0 ];then

    action "git clone" /bin/false

fi

cd webvirtmgr && pip install -i https://mirrors.aliyun.com/pypi/simple/ -r requirements.txt

                      #脚本完

===============================================================================================

[root@master webvirtmgr]# python

>>> import sqlite3

>>> exit()

#初始化账号

./manage.py syncdb 

yes-->回车-->输入自己的邮箱-->输入自定义密码-->确认自定义密码

./manage.py collectstatic   #配置数据库的账号

输入yes

创建一个超级用户配置webvirtmgr 登录账号

./manage.py createsuperuser

自定义用户名(这里我用的admin)-->自己的邮箱-->密码-->密码确认

拷贝web到 相关目录

cd .. && mkdir -p /var/www

cp -R webvirtmgr /var/www/webvirtmgr

配置nginxmaster端执行)

sed -i "s/    access_log/#    access_log/" /etc/nginx/nginx.conf

sed -i "s/80 default_server;/80; #default_server;/" /etc/nginx/nginx.conf

sed -i "s/        server_name  _;/        server_name localhost;/" /etc/nginx/nginx.conf

sed -i '/location / {/a            root   html;' /etc/nginx/nginx.conf

sed -i '/            root   html;/a            index  index.html index.htm;' /etc/nginx/nginx.conf

#添加 /etc/nginx/conf.d/webvirtmgr.conf  配置文件

vim /etc/nginx/conf.d/webvirtmgr.conf           #新建该文件

server {

    listen 80 default_server;

    server_name $hostname;

    location /static/ {

      root /var/www/webvirtmgr/webvirtmgr;

      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配置文件是否正常且重启nginx

nginx -t

systemctl restart nginx

#配置 Supervisor 

#注:该部分会有坑,就是因为字符编码问题,如你在复制时有异常需自行排错,排错命令见下面附命令

echo '

[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'>>/etc/supervisord.conf

#检查

vim /var/www/webvirtmgr/conf/gunicorn.conf.py   

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

bind = '127.0.0.1:8000'

#重启supervisord(下图属正常,如不是显示的下图则需排错)

systemctl restart supervisord && systemctl enable supervisord && systemctl status supervisord

ps -ef|grep super

#确保8000和6080端口已经启动

netstat -anpt|grep -E '(:8000|:6080)'

                            --------到这里webvirtmgr配置完成-----

附:

program的名字是:webvirtmgrwebvirtmgr-console

查看单个program的错误信息:supervisorctl tail <program_name> stderr

重新启动配置中的所有程序:supervisorctl reload

更新新的配置到supervisord:supervisorctl update

启动某个进程(program_name=你配置中写的程序名称): supervisorctl start <program_name>

停止全部进程: supervisorctl stop all

supervisorctl -c /etc/supervisord.conf      #查看进程中的任务

webvirtmgr服务器(master端)与kvm服务器(node端)连接配置

(webvirtmgr与kvm之间使用ssh方式连接管理)

1在kvm(node端)服务器上配置webvirt用户

useradd webvirtmgr && echo "123456" | passwd --stdin webvirtmgr

usermod -G libvirt -a webvirtmgr

2、webvirtmgr服务器上执行:(该目录为所有镜像存放的地方,生产中请按需取名

mkdir /opop && chown nginx.nginx /opop && chmod 700 -R /opop

su - nginx -s /bin/bash

ssh-keygen

touch ~/.ssh/config && echo -e "StrictHostKeyChecking=no UserKnownHostsFile=/dev/null" >> ~/.ssh/config

chmod 0600 ~/.ssh/config

#ssh-key上传到kvm服务器上

ssh-copy-id   webvirtmgr@192.168.1.133

3、kvm(node端)服务器上配置 libvirt ssh授权

vim /etc/polkit-1/localauthority/50-local.d/50-libvirt-remote-access.pkla       #新建该文件

[Remote libvirt SSH access]

Identity=unix-user:webvirtmgr

Action=org.libvirt.unix.manage

ResultAny=yes

ResultInactive=yes

ResultActive=yes

#修改权限并重启

chown -R webvirtmgr.webvirtmgr /etc/polkit-1/localauthority/50-local.d/50-libvirt-remote-access.pkla

service libvirtd restart   或者   systemctl restart libvirtd

webvirtmgr与kvm之间使用tcp方式连接管理Node端执行)

1)Libvirtd服务监听配置

修改/etc/sysconfig/libvirtd文件,去掉下面一行的注释,使Libvirt服务处于监听状态

sed -i "s/^#LIBVIRTD_ARGS/LIBVIRTD_ARGS/" /etc/sysconfig/libvirtd

2)配置Libvirt服务

sed -i "s/^#listen_tls/listen_tls/" /etc/libvirt/libvirtd.conf

sed -i "s/^#listen_tcp/listen_tcp/" /etc/libvirt/libvirtd.conf       #允许tcp监听

sed -i "s/^#tcp_port/tcp_port/" /etc/libvirt/libvirtd.conf        #开放tcp端口

sed -i "s/#listen_addr = "192.168.0.1"/listen_addr = "0.0.0.0"/" /etc/libvirt/libvirtd.conf       #监听地址修改为0.0.0.0

sed -i "s/^#auth_tcp/auth_tcp/" /etc/libvirt/libvirtd.conf          #配置tcp通过sasl认证

3)创建libvirt管理用户

saslpasswd2 -a libvirt admin

#这里输入自定义密码

#使用浏览器登录

#登录账号和密码为系统的登录账密

点击Add Connection

    注:Label要和IP相同,用户不是root

点击下图中铅笔前面的133地址进入配置:

 

点击 "存储池" ---New Storage(即创建磁盘镜像存放的位置)

 在下图选择 "路径" 选项时需提前在Node节点上创建好该目录,opop的目录即所有的镜像都应该放到该目录中,必须!!!

 

 点击添加镜像

 

 镜像名称、容量可自定义,镜像格式选择qcow2,Metadata后面的勾默认是打着的,要去掉

删除存储池:

查看所有存储池:virsh pool-list --all

取消存储池的激活: virsh pool-destroy <存储池名称>

然后在webvirtmgr界面在“存储池”里找到要删除的存储池先停止,再删除

宿主机网卡的桥接模式设置

选择“Interfaces”---New Interface

注:注意下面的“设备”一项要填写桥接的物理网卡(即br0对应的那个网卡

名称可自定义,start mode是开机自启动,类型选桥接,STP类似思科的生成树协议

IPV4写br0的IP地址和网关

创建网络池

选择“网络池”---New Network

 再点击左边的  "网络池"----点击br0,再进行下一步的操作

 点击下图中New  Instance

点击Custom Instance进行配置虚拟机

名称自定义,磁盘镜像选择上面创建的centos7.4.1708.img,网络池选择刚部署的br0,内存按需,其他不变,如下图

点击 设置---Media 选择要使用的镜像---点击连接

注:所有镜像都必须放到/opop/目录下(上面已定义好了),如果下载了各种镜像版本放到里面,那么就可以在这里选择你想安装的版本!

 

点击Power---启动

 启动后的画面,如下图

 点击Access----控制台---控制台,进行连接到虚拟机中

 往下的安装和正常的一样,此处略过去部分安装过程..........

安装完毕并成功登录进来

注:这里因为我是在虚拟机中做到,网络方面层次会有点多,按以上教程做出来后会连接不到互联网,待我这边有了真机后再做相对应的教程

参考信息1

参考信息2

原文地址:https://www.cnblogs.com/smlile-you-me/p/12817483.html