KVM虚拟化技术——web页面的安装配置(1)

本文详细介绍了KVM虚拟化技术的原理,包括半虚拟化和全虚拟化,并着重讲解了如何在RHEL 7系统上部署KVM环境,包括配置CPU虚拟化支持、关闭防火墙和SELinux、网络配置、安装必要的软件包以及桥接网卡。接着,文章演示了KVMweb管理界面webvirtmgr的安装步骤,涉及安装依赖、配置nginx、supervisor以及生成密钥等过程。最后,给出了访问Web页面登录的方法。
摘要由CSDN通过智能技术生成

前言

1.            虚拟化介绍

半虚拟化:

全虚拟化:

2.            kvm介绍

3.            环境部署

3.1要求:

3.2配置步骤:

1)    验证CPU是否支持硬件辅助虚拟化

2)    关闭防火墙

3)    关闭selinux

4)    网络的配置

5)    配置网络上的yum源

6)    桥接网卡

7)    Kvm web管理界面安装

4.Web页面的访问登录(ssh连接)

5.Web界面的管理

5.1 kvm存储管理

5.2 kvm网络管理

5.3 实例管理

6.故障案例

7.内存气球和透明大页技术

1)     内存气球技术

1、Balloon简介

2、KVM中Ballooning的原理

3、KVM中Balloon的劣势

二、内存气球技术的应用实例

2)     大页和透明大页

1.    透明大页的配置   

  1.  虚拟化介绍

虚拟化是云计算的基础。简单的说,虚拟化使得在一台物理的服务器上可以跑多台虚拟机,虚拟机共享物理机的 CPU、内存、IO 硬件资源,但逻辑上虚拟机之间是相互隔离的。

物理机我们一般称为宿主机(Host,宿主机上面的虚拟机称为客户机(Guest

那么 Host 是如何将自己的硬件资源虚拟化,并提供给 Guest 使用的呢?
这个主要是通过一个叫做 Hypervisor 的程序实现的。

根据 Hypervisor 的实现方式和所处的位置,虚拟化又分为两种:

  • 全虚拟化
  • 半虚拟化

半虚拟化:
Hypervisor 直接安装在物理机上,多个虚拟机在 Hypervisor 上运行。Hypervisor 实现方式一般是一个特殊定制的 Linux 系统。Xen 和 VMWare 的 ESXi 都属于这个类型。

 全虚拟化:
物理机上首先安装常规的操作系统,比如 Redhat、Ubuntu 和 Windows。Hypervisor 作为 OS 上的一个程序模块运行,并对管理虚拟机进行管理。KVM、VirtualBox 和 VMWare Workstation 都属于这个类型

 

理论上讲:
半虚拟化一般对硬件虚拟化功能进行了特别优化,性能上比全虚拟化要高;
全虚拟化因为基于普通的操作系统,会比较灵活,比如支持虚拟机嵌套。嵌套意味着可以在KVM虚拟机中再运行KVM。

  1.  kvm介绍

kVM 全称是 Kernel-Based Virtual Machine。也就是说 KVM 是基于 Linux 内核实现的。
KVM有一个内核模块叫 kvm.ko,只用于管理虚拟 CPU 和内存。

那 IO 的虚拟化,比如存储和网络设备则是由 Linux 内核与Qemu来实现。

作为一个 Hypervisor,KVM 本身只关注虚拟机调度和内存管理这两个方面。IO 外设的任务交给 Linux 内核和 Qemu。

大家在网上看 KVM 相关文章的时候肯定经常会看到 Libvirt 这个东西。

Libvirt 就是 KVM 的管理工具。

其实,Libvirt 除了能管理 KVM 这种 Hypervisor,还能管理 Xen,VirtualBox 等。

Libvirt 包含 3 个东西:后台 daemon 程序 libvirtd、API 库和命令行工具 virsh

  • libvirtd是服务程序,接收和处理 API 请求;
  • API 库使得其他人可以开发基于 Libvirt 的高级工具,比如 virt-manager,这是个图形化的 KVM 管理工具;
  • virsh 是我们经常要用的 KVM 命令行工具
  • virtual shell

3.1要求:

镜像版本

rhel-server-7.4-x86_64-dvd.iso

网卡类型

NAT / 桥接  本文档是按照桥接来编写的

系统版本

RHEL  7  64

内存

4GB

磁盘大小

50GB

处理器

1*1 (并勾选虚拟化Inter VT / EPTAMD-V/RVI(V)

磁盘分区

/boot   500MB 

Swap   4GB

/       剩下都为根分区

// 勾选: ### 装机步骤过程省略

3.2配置步骤:

  1.  验证CPU是否支持硬件辅助虚拟化

如果结果中有vmxIntelsvm(AMD)字样,就说明CPU的支持虚拟化的。

egrep -o 'vmx|svm' /proc/cpuinfo

 

  1.  关闭防火墙

并设为开机自动关闭,并查看防火墙状态

systemctl stop firewalld

systemctl disable firewalld

systemctl statuts firewalld.service

  1.  关闭selinux

vim /etc/sysconfig/selinux  

//并设置为临时生效:

setenforce 0

getenforce   #此时的selinux状态为临时关闭,即Permissive

 

 

  1.  网络的配置

配置静态桥接ip  网卡为ifcfg –ens32

并编辑: /etc/resolv.conf的文件,插入以下内容(配置ipv4DNS,这个文件一定也要配置,否则ping外网通不了)

 

//重新激活网卡:

systemctl restart network

测试网络的连通性:

  1.  配置网络上的yum源

//配置国内开源的镜像站的yum,例如163的镜像站:

curl -o /etc/yum.repos.d/CentOS7-Base-163.repo http://mirrors.163.com/.help/CentOS7-Base-163.repo    //此处是一条命令

sed -i 's/\$releasever/7/g' /etc/yum.repos.d/CentOS7-Base-163.repo

sed -i 's/^enabled=.*/enabled=1/g' /etc/yum.repos.d/CentOS7-Base-163.repo

不报错即为成功:

 

 

//从互联网上安装软件包: 安装 epel-release、vim、wget、net-tools unzip、zip、gcc、gcc-、c++  ###安装过程步骤省略

yum -y install epel-release vim wget net-tools unzip zip gcc gcc-c++  //此处是一行命令

//安装qemu-kvm、qemu-kvm-tools、qemu-img、virt-manager、libvirt、libvirt-python、 libvirt-client、virt-install、virt-viewer、bridge-utils、libguestfs-tools等软件。

yum -y install qemu-kvm qemu-kvm-tools qemu-img virt-manager libvirt libvirt-python libvirt-client virt-install virt-viewer bridge-utils libguestfs-tools //此处是一行命令

此处如果报错,请使用“ping mirrors.163.comping”的命令,再重新执行一次如上命令即可解决,让所有包都能装上。 ###安装过程稍微有点慢,耐心等待

  1.  桥接网卡

vb0来桥接ens32网卡:(此时会用到两张网卡,ens32和vb0)。

参考例子:网页参考的网卡桥接配置

因为虚拟机中网络,我们一般都是和公司的其他服务器是同一个网段,所以我们需要把 \

KVM服务器的网卡配置成桥接模式。这样的话KVM的虚拟机就可以通过该桥接网卡和公司内部 \

其他服务器处于同一网段

//此处我的网卡是ens33,所以用br0来桥接ens33网卡

[root@kvm ~]# cd /etc/sysconfig/network-scripts/

[root@kvm network-scripts]# ls

ifcfg-ens33  ifdown-isdn      ifup          ifup-plip      ifup-tunnel

ifcfg-lo     ifdown-post      ifup-aliases  ifup-plusb    

.....此处内容省略

[root@kvm network-scripts]# cp ifcfg-ens33 ifcfg-br0

[root@kvm network-scripts]# cat ifcfg-br0

TYPE=Bridge

DEVICE=br0

NM_CONTROLLED=no

BOOTPROTO=static

NAME=br0

ONBOOT=yes

IPADDR=192.168.100.109

 

NETMASK=255.255.255.0

GATEWAY=192.168.160.1

DNS1=114.114.114.114

DNS2=8.8.8.8

[root@kvm network-scripts]# cat ifcfg-ens33

TYPE=Ethernet

BOOTPROTO=static

NAME=ens33

DEVICE=ens33

ONBOOT=yes

BRIDGE=br0

NM_CONTROLLED=no

//重启网络

[root@kvm ~]# systemctl restart network

[root@kvm ~]# ip addr list

1: lo: <LOOPBACK,UP,LOWER_UP> 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 forever2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UP qlen 1000

    link/ether 00:0c:29:4c:50:b4 brd ff:ff:ff:ff:ff:ff3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN qlen 1000

    link/ether 52:54:00:60:a8:ea 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 forever4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN qlen 1000

    link/ether 52:54:00:60:a8:ea brd ff:ff:ff:ff:ff:ff5: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP qlen 1000

    link/ether 72:63:57:0a:ca:76 brd ff:ff:ff:ff:ff:ff

    inet 192.168.160.109/24 brd 192.168.160.255 scope global br0

       valid_lft forever preferred_lft forever

    inet6 fe80::7063:57ff:fe0a:ca76/64 scope link

       valid_lft forever preferred_lft forever

参考以上的实例,桥接好以后, ens32的网卡不再使用,br0的配置如下:

 

 

//查看桥接状态,并激活br0区测试外网:

Brctl show

systemctl restart network

网桥状态中的STP是协议,(生成树协议)逻辑上断开环路,防止二层网络的广播风暴的产生。

//启动服务:并设置为开机自启

systemctl start libvirtd

systemctl enable libvirtd

//验证安装结果:

lsmod|grep kvm

 

 

注意这些参数的值,若不一样,则就需要排错

//用xz命令来解压.xz格式文件,

xz -d kvm.ko.xz

//测试并验证安装结果    #以root用户身份本地连接到监控QEMU和KVM域的守护程序-c:connetc 连接

virsh -c qemu:///system list

 

//显示xen的版本

virsh -version

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

 

修改/etc/libvirt/qemu.conf中取消对root用户/组的注释。

#user = "root"#group = "root"注释取消掉,

步骤:用vim /etc/libvirt/qemu.conf,进去后,按Esc键,输入,并输入set nu显示行数,更改后的内容如下:

 

// 重启服务:

systemctl restart libvirtd.service

// 在虚拟终端上输入virt-manager命令,弹出KVM虚拟机管理“Virtual Machine Manager”的图形化界面

virt-manager

 

// 创建虚拟机(会自动创建名为/root/test1.qcow2的镜像文件)

virt-install --virt-type=kvm --name=test1 --vcpus=2 --memory=2048

--location=/root/rhel-server-7.4-x86_64-dvd.iso --disk path=/root/test1.qcow2,size=10,format=qcow2 --network bridge=virbr0 --graphics none --extra-args='console=ttyS0'     --force      //此处是一行命令,用命令的方式来kvm虚拟机。

// 参数说明:

-name指定虚拟机的名称

- -memory指定分配给虚拟机的内存大小

maxmemory指定可调节的最大内存大小,(KVM支持热调整虚拟机的资源)

-vcpus指定分配给虚拟机的CPU核心数量maxvcpus指定可调节的最大CPU核心数量-os- -type指定虚拟机安装的操作系统类型-oS- -variant指定系统的发行版本

-location指定ISO镜像文件所在的路径,支持使用本地或网络资源路径

-disk path指定虚拟硬盘所存放的路径及名称,size则是指定该硬盘的可用大小,单位G

- -bridge指定使用某张桥接网卡

-graphics指定是否开后图形

-console定义终端的属性

target_ type 定义终端的类型

-extra- args 定义终端额外的参数

  1.  Kvm web管理界面安装

kvm 的 web 管理界面是由 webvirtmgr 程序提供的。

//安装依赖包

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

//升级pip

pip install --upgrade pip          //pip Python 包管理工具,该工具提供了对Python 包的查找、下载、安装、卸载的功能。该命令pip install --upgrade pip执行第一次时,报错:

再把该命令pip install --upgrade pip 再次执行即可。

//从github上下载webvirtmgr代码

[root@kvm ~]# cd /usr/local/src/

[root@kvm src]# git clone git://github.com/retspen/webvirtmgr.git

Cloning into 'webvirtmgr'...

remote: Enumerating objects: 5730, done.

remote: Total 5730 (delta 0), reused 0 (delta 0), pack-reused 5730

Receiving objects: 100% (5730/5730), 3.01 MiB | 39.00 KiB/s, done.

Resolving deltas: 100% (3688/3688), done.

//安装webvirtmgr

[root@kvm src]# cd webvirtmgr/

[root@kvm webvirtmgr]# pip install -r requirements.txt –timeout 1000

Collecting django==1.5.5 (from -r requirements.txt (line 1))

  Downloading https://files.pythonhosted.org/packages/38/49/93511c5d3367b6b21fc2995a0e53399721afc15e4cd6eb57be879ae13ad4/Django-1.5.5.tar.gz (8.1MB)

    57% |██████████████████▌             | 4.7MB 38kB/s eta 0:01:28

.....此处省略安装步骤

//检查sqlite3是否安装

[root@kvm webvirtmgr]# python

Python 2.7.5 (default, May  3 2017, 07:55:04)

[GCC 4.8.5 20150623 (Red Hat 4.8.5-14)] on linux2

Type "help", "copyright", "credits" or "license" for more information.

>>> import sqlite3

>>> exit()

//初始化帐号信息

[root@kvm webvirtmgr]# python 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.

Would you like to create one now? (yes/no): yes     //问你是否创建超级管理员帐号

Username (leave blank to use 'root'):   //指定超级管理员帐号用户名,默认留空为root

Email address:2031234996@qq.com     //设置超级管理员邮箱Password:       //设置超级管理员密码Password (again):       //再次输入超级管理员密码    密码:000000 (一定要记住这个密码,是用来做网页的登录密码的!!)

Superuser created successfully.

Installing custom SQL ...

Installing indexes ...

Installed 6 object(s) from 1 fixture(s)

//拷贝web网页至指定目录

[root@kvm webvirtmgr]# mkdir /var/www

[root@kvm webvirtmgr]# cp -r /usr/local/src/webvirtmgr  /var/www/

[root@kvm webvirtmgr]# chown -R nginx.nginx /var/www/webvirtmgr/

chown –R的意思:处理指定目录及以下的所有文件

//生成密钥   公钥在服务器上,私钥在客户端上

[root@kvm ~]# ssh-keygen -t rsa    # rsa是一种加密算法

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:

SHA256:CQoZtso2M5Uo39lKvjZboncqakQ69iJt5wnjiJKZNhw root@kvm

The key's randomart image is:

+---[RSA 2048]----+

|  o              |

| ..+.            |

|..+o  .          |

|o+.o + . .       |

|+*. = . S        |

|+E+o .           |

|+*= + .          |

|BO+===.          |

|Oo=**=           |

+----[SHA256]-----+

//由于这里webvirtmgr和kvm服务部署在同一台机器,所以这里本地信任。如果kvm部署在其他机器,那么这个是它的ip

[root@kvm ~]# ssh-copy-id 192.168.160.109

/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"

The authenticity of host '192.168.160.109 (192.168.160.109)' can't be established.

ECDSA key fingerprint is SHA256:UszC1ZeHM7xw/uefVkJoXW6XgRw+Jl51tAXLjFERclE.

ECDSA key fingerprint is MD5:b3:f1:02:b8:01:8e:53:a7:87:09:c0:75:24:4c:ad:88.Are you sure you want to continue connecting (yes/no)? yes

/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed

/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys

root@192.168.1.60's password:   //输入虚拟机的密码

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh '192.168.1.60'"

and check to make sure that only the key(s) you wanted were added.

//配置端口转发

ssh 192.168.1.60 -L localhost:8000:localhost:8000 -L localhost:6080:localhost:6080

Last login: Thu Oct 18 08:26:40 2018 from 192.168.1.60

//配置nginx

vim /etc/nginx/nginx.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;

        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;

    }

}

//确保bind绑定的是本机的8000端口

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

.....此处省略N行

bind = '0.0.0.0:8000'     //确保此处绑定的是本机的8000端口,这个在nginx配置中定义了,被代理的端口

backlog = 2048

.....此处省略N行

//重启nginx

[root@kvm ~]# systemctl restart nginx

[root@kvm ~]# ss –antl    //查看端口 是否有8000端口

 

//设置supervisor

[root@kvm ~]# vim /etc/supervisord.conf

 

插入的内容如下:

[program:webvirtmgr]

command=/usr/bin/python2 /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/python2 /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

//启动supervisor并设置开机自启

[root@kvm ~]# systemctl start supervisord

[root@kvm ~]# systemctl enable supervisord

//查看supervisor的状态:

systemctl status supervisord

//再查看端口:

ss -antl

//配置nginx用户

su - nginx -s /bin/bash

-bash-4.2$ ssh-keygen -t rsa

Generating public/private rsa key pair.

Enter file in which to save the key (/var/lib/nginx/.ssh/id_rsa):  此处直接回车

Created directory '/var/lib/nginx/.ssh'.

Enter passphrase (empty for no passphrase):  也直接回车

Enter same passphrase again:   也直接回车

Your identification has been saved in /var/lib/nginx/.ssh/id_rsa.

Your public key has been saved in /var/lib/nginx/.ssh/id_rsa.pub.

The key fingerprint is:

SHA256:rdbmW/YIXxAJBzPsd9q9eKHPjWtSZ5EQC5li3tkczYI nginx@localhost.localdomain

The key's randomart image is:

+---[RSA 2048]----+

|         .=o=.+  |

|         o.E.=.o |

|        o.o *.+ .|

|         o.o.+.o |

|        S ...+ ..|

|         o  ..o.+|

|        o + o.+oo|

|       . o =.*o+.|

|          o.oo*+.|

+----[SHA256]-----+

-bash-4.2$ touch ~/.ssh/config && echo -e "StrictHostKeyChecking=no\nUserKnownHostsFile=/dev/null" >> ~/.ssh/config

-bash-4.2$ chmod 0600 ~/.ssh/config

-bash-4.2$ ssh-copy-id root@192.168.1.60

/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/var/lib/nginx/.ssh/id_rsa.pub"

/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed

/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys

Warning: Permanently added '192.168.160.109' (ECDSA) to the list of known hosts.

root@192.168.1.60's password:   输入root的密码

注意:如果此时弹出:“Permission denied, please try again.”权限不够 ,直接ctrl+c结束进程

解决方案如下:

到home的目录下,去创建nginx用户,更改权限。

[root@KVM-1 ~]# cd /home/

[root@ KVM-1 ~ home]# mkdir nginx

[root@ KVM-1 ~ home]# chown -R nginx.nginx nginx/

[root@ KVM-1 ~ home]# chmod -R 700 nginx/

[root@ KVM-1 ~ home]# su - nginx -s /bin/bash

再去执行:ssh-copy-id root@192.168.1.60  即可。

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'root@192.168.160.109'"

and check to make sure that only the key(s) you wanted were added.

-bash-4.2$ exit

logout

再执行:

vim /etc/polkit-1/localauthority/50-local.d/50-libvirt-remote-access.pkla            //此处这个文件是没有的,新建!

进去后,插入:

[Remote libvirt SSH access]

Identity=unix-user:root

Action=org.libvirt.unix.manage

ResultAny=yes

ResultInactive=yes

ResultActive=yes

再执行:

chown -R root.root /etc/polkit-1/localauthority/50-local.d/50-libvirt-remote-access.pkla  //这是一条命令

重启nginx和libvirtd

systemctl restart nginx

systemctl restart libvirtd

此处若报错,请查看 故障案例1

4.Web页面的访问登录(ssh连接)

浏览器访问:在地址栏输入虚拟机的ip即可。

 

  此处的LableFQDN/ip 的两行,填同样的ip也可,ip为虚拟机ip两行ip必须要保持一致

 

 

 

自此,kvm的web平台已经搭建完成。

当虚拟机关机再重启以后,若不能正常用浏览器访问页面,请重启网络、再重启nginx服务

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小白不会debug

需要源码打个赏呗~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
>