前言:

  使用开源的虚拟化技术,对公司自有的少数服务器进行虚拟化,在满足业务需求的同时,并未增加投入,同时也避免了使用云主机的不便,技术层面,kvm是开源的虚拟化产品,虚拟化性能出众,更重要的是免费!!!WebVirtMgr作为kvm虚拟化的web管理工具,图形化的WEB,让人能更方便的查看kvm 宿主机的情况和操作,使用kvm+webvirtmgr便可满足当前场景的业务需求,虚拟化的同时,也能够进行便捷的管理。采用纯Python开发,其前端是基于Python的Django,后端是基于Libvirt的Python接口,将日常kvm的管理操作变的更加的可视化。

WebVirtMgr 介绍

    WebVirtMgr采用几乎纯Python开发,其前端是基于Python的Django,后端是基于Libvirt的Python接口,将日常kvm的管理操作变的更加的可视化。

WebVirtMgr 特点

  • 操作简单,易于使用
  • 通过libvirt的API接口对kvm进行管理
  • 提供对虚拟机生命周期管理

WebVirtMgr 功能

宿主机管理支持以下功能

  • CPU利用率
  • 内存利用率
  • 网络资源池管理
  • 存储资源池管理
  • 虚拟机镜像
  • 虚拟机克隆
  • 快照管理
  • 日志管理
  • 虚机迁移

虚拟机管理支持以下功能

  • CPU利用率
  • 内存利用率
  • 光盘管理
  • 关/开/暂停虚拟机
  • 安装虚拟机
  • VNC console连接
  • 创建快照
 

WebVirtMgr 管理工具安装

一 webvirtmgr管理服务器配置

1 install  epel 源,git,gcc等软件
sudo yum -y install http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
sudo yum -y install git python-pip libvirt-python libxml2-python python-websockify supervisor nginx
 
2 Install python requirements and setup Django environment
git clone git://github.com/retspen/webvirtmgr.git
cd webvirtmgr
sudo pip install -r requirements.txt
./manage.py syncdb
./manage.py collectstatic    —配置数据库的账号
 
创建一个超级用户:
./manage.py createsuperuser   –配置webvirtmgr 登录账号
 
3 配置nginx
cd ..
sudo mv webvirtmgr /var/www/
 
在 /etc/nginx/conf.d/下 创建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 $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主配置文件中的http域内添加下面的配置
sudo vim /etc/nginx/nginx.conf
include /etc/nginx/conf.d/*.conf;
 
将default.conf重命名
mv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.bak
 
重启nginx:
sudo service nginx restart   或者    /etc/init.d/nginx restart
 
selinux 设置:
将selinux 关闭
setenforce 0
vim /etc/selinux/config 
SELINUX=disabled
 
或不关闭selinux但需添加下面的策略
/usr/sbin/setsebool httpd_can_network_connect true
4 配置 Supervisor 
sudo  chkconfig supervisord on
 
在/etc/supervisord.conf末尾加入下面的配置:
vim /etc/supervisord.conf
 
[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
 
重启supervisord
sudo service supervisord restart
 
——–到这里webvirtmgr配置完成—–
 

二 webvirtmgr服务器(服务端)与kvm服务器(客服端)连接配置

1)webvirtmgr与kvm之间使用ssh方式连接管理
 
1 在webvirtmgr服务器(服务端)上:
 cd /home/
 mkdir nginx
 chown nginx.nginx nginx/
 chmod 700 nginx/ -R
 su – nginx -s /bin/bash
ssh-keygen   —期间输入yes后直接回车,回车
 touch ~/.ssh/config && echo -e “StrictHostKeyChecking=no\nUserKnownHostsFile=/dev/null” >> ~/.ssh/config
 chmod 0600 ~/.ssh/config
 
2 在kvm(客服端)服务器上配置webvirt用户
 useradd webvirtmgr
 echo “123456” | passwd –stdin webvirtmgr
groupadd libvirt
 usermod -G libvirt -a webvirtmgr
3 在webvirtmgr服务器(服务端)上,将ssh-key上传到kvm服务器上
su – nginx -s /bin/bash
ssh-copy-id   webvirtmgr@192.168.0.23
 
4 在kvm(客服端)服务器上配置 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
 
重启 libvirtd 服务
/etc/init.d/libvirtd restart
 
2)webvirtmgr与kvm之间使用tcp方式连接管理
1)Libvirtd服务监听配置
修改/etc/sysconfig/libvirtd文件,去掉下面一行的注释,使Libvirt服务处于监听状态:
vim /etc/sysconfig/libvirtd
LIBVIRTD_ARGS=”–listen”
2)配置Libvirt服务
配置Libvirt服务,允许通过tcp方式通讯,修改/etc/libvirt/libvirtd.conf:
#允许tcp监听
listen_tcp = 1
#开放tcp端口
tcp_port = “16509”
#监听地址修改为0.0.0.0
listen_addr = “0.0.0.0”
#配置tcp通过sasl认证
auth_tcp = sasl
#取消CA认证功能
listen_tls = 0
启动服务:
service libvirtd start
3)创建libvirt管理用户
saslpasswd2 -a libvirt admin

KVM WEB管理工具——WebVirtMgr(二)日常配置

  • 配置宿主机

 

1、登录WebVirtMgr管理平台,访问地址http://webvirtmgrIP/login

 

f951a9b4069b480db4ea6388e7959ed22b1012f1

2、添加宿主机

选择首页的WebVirtMgr –>Addd Connection

5918c21392de0e60c342af46071fa8550ef7ce95

选择“SSH链接“,设置Label,IP,用户

d0844822565fdb57dbc81077bf2ef6e57f741f10

注意:Label与IP要相同

 

  • 虚机部署

1、创建存储池

点击前面创建的宿主机,进入虚拟机部署界面

62134d7afaba83aed84afd46218d5b7ddaf526c2

点击“存储池”按钮,创建存储池(即创建磁盘镜像存放的位置)

ad98027d11b779d503f77e06c977d888255ec32c

注意:

创建存储池时,首先要在宿主机上创建一个目录,然后在”路径“设置栏中添加该目录

例:mkdir /home/kvm/teststorage -p

3b57f2daa335645edc9d7b147d03101e08242ee7

2、添加磁盘镜像

08d3266e22f904c2f2b0e6db5218c1c2b4581f5c

6132d3de58dbc877ce893ecfffbbe3346ad4aa42

创建完成后如下:

64eefbb05544cafd56f92aa56662d770f0a95ed5

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

b22734201cf02ae5f90c50be8b19e1233d6573bf

7880375ac42c5430291376dc997a0efa4158b3c8

 

4、创建网络池

 

 

cb3f18e51edff607366029e04ab7074db00bd851

629afcb4a30a0c0add947750e1be493c78160cac

5、创建虚机

36fe0fdd12fd561b6a60b0db789102413953362b

选择“custom install”用户自定义创建虚机

2c755624ad15ebf8afb908ad0b9094ece6ad0a37

8fbdfe55c2c3730c9b24210d925ad567c78a0768

6、虚机挂载ISO镜像

f8bbe303edca60b49c54138d5db70f029fba3939

7、启动虚机

点击“启动”按钮后,打开虚机电源。

bab24ea23c4c4f6cdb7d6e67ed56e2baa130a900

点击控制台按钮,进入操作系统安装界面

aa9fe4a62c2613c8a82484b2a241c03675a06205

eac0e68c0f46e99db38df4602c396fe72b8e84fe

8、虚机IP地址设置

当虚机安装完成后,给虚机设置静态IP地址

例:[root@vmtest01~]# vim  /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0

TYPE=Ethernet

ONBOOT=yes

NM_CONTROLLED=no

BOOTPROTO=static

IPADDR=172.16.1.199

NETMASK=255.255.255.0

GATEWAY=172.16.1.1

DNS1=172.16.1.1

 

 

 

  • webvirtmgr克隆虚机操作

 

1、关闭正在运行的虚机

d1e17f810a3daa6300f313234d2a354fbde90a42

 

 

2、进入虚机配置界面,在克隆配置项,为新的虚机的“名字”,“MAC地址”,“磁盘镜像”进行设置

2b0b765dfd5385c7d63a60d1907d282fb23ef4dd

 

 

3、启动虚机,进入系统,对/etc/udev/rules.d/70-persistent-net.rules 文件做如下修改

c42608a1b32cbc16605da8c1a20b1e422401c8f5

修改后

dddb0a9518d68f30ab941bfd4eb7a36b6c7f7d34

 

4、编辑/etc/sysconfig/network-scripts/ifcfg-eth0 修改虚机的网卡配置,为虚机分配新的IP地址

 

47098626f7218a8a6893e2da037d967a9ba8fa3e

 

5、重启系统 使网卡重新注册,让配置生效

   reboot 

 

  • webvirtmgr虚机磁盘扩容(新增磁盘)

1 关闭虚机

2 对虚机的xml文件的disk域添加如下代码

场景一:新增一块磁盘

 <disk type=\’file\’ device=\’disk\’>

      <driver name=\’qemu\’ type=\’qcow2\’ cache=\’none\’/> —添加改行代码找到新增磁盘格式

      <source file=\’/home/kvm/teststorage/entd01.img\’/>  –指定新增磁盘路径

      <target dev=\’vda\’ bus=\’virtio\’/>  –指定磁盘设备名称,和传输总线类型

    </disk>

 

场景二:新增多块磁盘

已新增两块盘为例:

 <disk type=\’file\’ device=\’disk\’>

      <driver name=\’qemu\’ type=\’qcow2\’ cache=\’none\’/>

      <source file=\’/home/kvm/teststorage/entd01.img\’/>

      <target dev=\’vda\’ bus=\’virtio\’/>

    </disk>

    <disk type=\’file\’ device=\’disk\’>

      <driver name=\’qemu\’ type=\’qcow2\’ cache=\’none\’/>

      <source file=\’/home/kvm/vm/waq02-clone.qcow2\’/>

      <target dev=\’vdb\’ bus=\’virtio\’/>

    </disk>

3 启动虚机,然后在虚机系统内部对磁盘进行格式化,分区等操作。

总结:

 

  • 创建虚拟机后,默认的主机名、IP地址还得在虚机控制台设置,太麻烦,下一步尝试使用gusetfs的命令行工具,编写一个脚本对虚拟机的镜像文件进行预处理以解决这个问题。
  • KVM集群中虚拟机要做到实时迁移,必须配合集中存储,而且需要在每个物理机上将其配置为存储池。目前我所了解的廉价、可扩展性好的集中存储方案有Ceph与Glusterfs,下一步需要对比这两种方案,以找出最合适的方案
  • KVM集群中的虚拟机如果全部采用静态设置IP地址,管理查看虚机的IP地址将很麻烦;如果全部采用动态获取IP地址,则需要在网络内部安装dhcp服务器,然后可在dhcp服务器上管理查看虚机的IP地址。很显然后一种方案更合理一点,但这个还需要验证
  • webvirtmgr并不是像openstack一样的虚拟化一站式解决方案,它的工作原理其中就是通过一个web页面,将多台物理机接入进来,然后通过libvirt分别管理每个物理机上的计算资源。要创建虚拟机时,才是管理员自行找到一个合适的物理,然后在上面创建虚拟机。那么在KVM集群环境,存储已经通过Ceph或Glusterfs方案解决了,当要创建某个配置的虚拟机时,最好能有一个调度器,依据CPU、内存的需求,帮助管理员从众多物理机中选取一个合适的物理机。简单处理,也许可以写一个脚本,根据CPU、内存的需求自动得出一个物理机选取推荐列表,以供管理员参考
  • webvirtmgr所部署的主机需考虑高可用方案。简单处理可以将其做成docker镜像,一旦发现该服务故障了,可以快速地在其它地方启动起来

 

 

 

信息参考:

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

https://blog.51cto.com/niubdada/1981760?tdsourcetag=s_pcqq_aiomsg

版权声明:本文为xiaoyuxixi原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/xiaoyuxixi/p/11599301.html