KVM虚拟化

虚拟化是什么?

在这里插入图片描述

虚拟化(Virtualization)是资源的逻辑表示,其不受物理限制的约束。将任何一种形式的资源抽象成另一种形式的技术都是虚拟化。

简单归纳一下就是:
1.虚拟化是资源的一种逻辑表示,并不会受限于物理资源。
2.运行的环境不在真实的硬件上,而是硬件之上的虚拟内存中的一段,或者说是虚拟的环境中。
3.虚拟化为数据、计算能力、存储资源等提供了一个逻辑视图,而不是物理视图。
4.虚拟化的发展,大幅降低了IT硬件成本,减少了资源的浪费,并且提升了系统的稳定性和安全性

虚拟化分几种?

在这里插入图片描述

  • 全虚拟化 裸金属(没有操作系统,只有硬件)上部署 性能强

    • 全虚拟化(FullVirtualization)也称为原始虚拟化技术,该模型使用虚拟机协调Guest操作系统和原始硬件,VMM在Guest操作系统和裸硬件之间用于工作协调,一些受保护指令必须由Hypervisor(虚拟机管理程序)来捕获处理。全虚拟化的运行速度要快于硬件模拟,但是性能方面不如裸机,因为Hypervisor需要占用一些资源。
  • 半虚拟化 os上部署 性能低

    • 半虚拟化(ParaVirtualization)是另一种类似于全虚拟化的技术,它使用Hypervisor分享存取底层的硬件,但是它的Guest操作系统集成了虚拟化方面的代码。该方法无需重新编译或引起陷阱,因为操作系统自身能够与虚拟进程进行很好的协作。半虚拟化需要Guest操作系统做一些修改,使Guest操作系统意识到自己是处于虚拟化环境的,但是半虚拟化提供了与原操作系统相近的性能

全虚拟化:
Hypervisor 直接安装在物理机上,多个虚拟机在 Hypervisor 上运行。Hypervisor 实现方式一般是一个特殊定制的 Linux 系统。Xen 和 VMWare 的 ESXi 都属于这个类型
在这里插入图片描述
半虚拟化:
物理机上首先安装常规的操作系统,比如 Redhat、Ubuntu 和 Windows。Hypervisor 作为 OS 上的一个程序模块运行,并对管理虚拟机进行管理。KVM、VirtualBox 和 VMWare Workstation 都属于这个类型
在这里插入图片描述
理论上讲:
全虚拟化一般对硬件虚拟化功能进行了特别优化,性能上比半虚拟化要高;
半虚拟化因为基于普通的操作系统,会比较灵活,比如支持虚拟机嵌套。嵌套意味着可以在KVM虚拟机中再运行KVM。

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 命令行工具

实现虚拟化的方式

  • 基于主机的虚拟存储,依赖于代理或管理软件
  • 基于存储设备的虚拟化,依赖于提供相关功能的存储模块
  • 基于网络的虚拟存储,又可分为基于互联设备的虚拟化和基于路由器的虚拟化。

kvm部署

环境说明

系统类型IP主机名
redhat8192.168.129.135kvm
Centos 7192.168.129.33web

kvm安装

在vmware的kvm主机上打开虚拟机设置开启虚拟化
在这里插入图片描述
关闭防火墙与SELINUX

[root@kvm ~]# systemctl disable --now firewalld.service 
[root@kvm ~]# sed -ri 's/^(SELINUX=).*/\1disabled/g' /etc/selinux/config 
[root@kvm ~]# setenforce 0
[root@kvm ~]# reboot

安装工具与依赖包,验证CPU是否支持KVM并且安装KVM所需

[root@kvm ~]# yum -y install epel-release vim wget net-tools unzip zip gcc gcc-c++
[root@kvm ~]# egrep -o 'vmx|svm' /proc/cpuinfo
vmx
vmx

//安装依赖包
[root@kvm ~]# yum -y install qemu-kvm qemu-kvm-common qemu-img virt-manager libvirt python3-libvirt libvirt-client virt-install virt-viewer cockpit-bridge libguestfs-tools

//因为虚拟机中网络,我们一般都是和公司的其他服务器是同一个网段,所以我们需要把 \
KVM服务器的网卡配置成桥接模式。这样的话KVM的虚拟机就可以通过该桥接网卡和公司内部 \
其他服务器处于同一网段
//此处我的网卡是ens160,所以用br0来桥接ens160网卡
[root@kvm ~]# cd /etc/sysconfig/network-scripts/
[root@kvm network-scripts]# cp ifcfg-ens160 ifcfg-br0
[root@kvm network-scripts]# vim ifcfg-br0 
[root@kvm ~]# cat /etc/sysconfig/network-scripts/ifcfg-br0
TYPE="Bridge"
BOOTPROTO="static"
NAME="br0"
DEVICE="br0"
ONBOOT="yes"
IPADDR=192.168.129.135  
NETMASK=255.255.255.0   
GATEWAY=192.168.129.2   
DNS1=114.114.114.114

[root@kvm ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens160 
TYPE="Ethernet"
BOOTPROTO="static"
NAME="ens160"
DEVICE="ens160"
ONBOOT="yes"
BRIDGE=br0

//重启网络
[root@kvm network-scripts]# systemctl restart NetworkManager
[root@kvm network-scripts]# ifdown ens160;ifup ens160
成功停用连接 "ens160"(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/3)
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/4[root@kvm ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    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: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master br0 state UP group default qlen 1000
    link/ether 00:0c:29:aa:87:a6 brd ff:ff:ff:ff:ff:ff
3: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 00:0c:29:aa:87:a6 brd ff:ff:ff:ff:ff:ff
    inet 192.168.129.135/24 brd 192.168.129.255 scope global noprefixroute br0
       valid_lft forever preferred_lft forever
    inet6 fe80::14a5:ff:fe33:1d93/64 scope link 
       valid_lft forever preferred_lft forever

启动服务

[root@kvm ~]# systemctl enable --now libvirtd
[root@kvm ~]# systemctl status libvirtd
● libvirtd.service - Virtualization daemon
   Loaded: loaded (/usr/lib/systemd/system/libvirtd.service; enabled; vendor preset: enabled)
   Active: active (running) since Thu 2021-10-21 01:04:53 CST; 5s ago
     Docs: man:libvirtd(8)
           https://libvirt.org
 Main PID: 23153 (libvirtd)
    Tasks: 19 (limit: 32768)
   Memory: 23.8M
   CGroup: /system.slice/libvirtd.service
           ├─23153 /usr/sbin/libvirtd --timeout 120
           ├─23301 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/u>
           └─23302 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/u>

1021 01:04:54 192.168.129.132 dnsmasq[23294]: listening on virbr0(#4): 192.168.122.1
1021 01:04:54 192.168.129.132 dnsmasq[23301]: started, version 2.79 cachesize 150
1021 01:04:54 192.168.129.132 dnsmasq[23301]: compile time options: IPv6 GNU-getopt DBus no-i18n IDN2 DHCP DHCPv6 n>
1021 01:04:54 192.168.129.132 dnsmasq-dhcp[23301]: DHCP, IP range 192.168.122.2 -- 192.168.122.254, lease time 1h
1021 01:04:54 192.168.129.132 dnsmasq-dhcp[23301]: DHCP, sockets bound exclusively to interface virbr0
1021 01:04:54 192.168.129.132 dnsmasq[23301]: reading /etc/resolv.conf
1021 01:04:54 192.168.129.132 dnsmasq[23301]: using nameserver 114.114.114.114#53
1021 01:04:54 192.168.129.132 dnsmasq[23301]: read /etc/hosts - 2 addresses

测试并验证安装结果

[root@kvm ~]# lsmod| grep kvm
kvm_intel             294912  0
kvm                   786432  1 kvm_intel
irqbypass              16384  1 kvm

[root@kvm ~]# virsh -c qemu:///system list
 Id   名称   状态
-------------------

[root@kvm ~]# virsh --version
6.0.0

[root@kvm ~]# virt-install --version
2.2.1

[root@kvm ~]# ln -s /usr/libexec/qemu-kvm /usr/bin/qemu-kvm
[root@kvm ~]# ll /usr/bin/qemu-kvm
lrwxrwxrwx 1 root root 21 1020 16:35 /usr/bin/qemu-kvm -> /usr/libexec/qemu-kvm
[root@kvm ~]# lsmod |grep kvm
kvm_intel             294912  0
kvm                   786432  1 kvm_intel
irqbypass              16384  1 kvm

查看网桥信息

[root@kvm ~]# yum install -y bridge-utils
[root@kvm ~]# brctl show
bridge name     bridge id               STP enabled     interfaces
br0             8000.000c29aa87a6       no              ens160
virbr0          8000.52540023b910       yes             virbr0-nic

kvm web管理界面安装

关闭防火墙与SELINUX

[root@web ~]# systemctl disable --now firewalld.service 
[root@web ~]# sed -ri 's/^(SELINUX=).*/\1disabled/g' /etc/selinux/config 
[root@web ~]# setenforce 0
[root@web ~]# reboot

安装依赖包

[root@web ~]# yum -y install epel-release
[root@web ~]# yum -y install git python-pip libvirt-python libxml2-python python-websockify supervisor nginx python-devel

从github上下载webvirtmgr代码,安装webvirtmgr

[root@web ~]# cd /usr/local/src/
[root@web src]# git clone git://github.com/retspen/webvirtmgr.git
正克隆到 'webvirtmgr'...
remote: Enumerating objects: 5614, done.
remote: Total 5614 (delta 0), reused 0 (delta 0), pack-reused 5614
接收对象中: 100% (5614/5614), 2.97 MiB | 1.41 MiB/s, 完成.
处理 delta 中: 100% (3606/3606), 完成.

//安装webvirtmgr
[root@web ~]# cd /usr/local/src/webvirtmgr
[root@web webvirtmgr]# pip install -r requirements.txt
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)
    100% |████████████████████████████████| 8.1MB 65kB/s 
Collecting gunicorn==19.5.0 (from -r requirements.txt (line 2))
  Downloading https://files.pythonhosted.org/packages/f9/4e/f4076a1a57fc1e75edc0828db365cfa9005f9f6b4a51b489ae39a91eb4be/gunicorn-19.5.0-py2.py3-none-any.whl (113kB)
    100% |████████████████████████████████| 122kB 115kB/s 
Collecting lockfile>=0.9 (from -r requirements.txt (line 5))
  Downloading https://files.pythonhosted.org/packages/c8/22/9460e311f340cb62d26a38c419b1381b8593b0bb6b5d1f056938b086d362/lockfile-0.12.2-py2.py3-none-any.whl
Installing collected packages: django, gunicorn, lockfile
  Running setup.py install for django ... done
Successfully installed django-1.5.5 gunicorn-19.5.0 lockfile-0.12.2

检查sqlite3是否安装

[root@web webvirtmgr]# python
Python 2.7.18 (default, Jan 29 2021, 18:19:04) 
[GCC 8.4.1 20200928 (Red Hat 8.4.1-1)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sqlite3
>>> exit()

初始化帐号信息

[root@web 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'): admin   				#指定超级管理员帐号用户名,默认留空为root
Email address: 123@qq.com								#设置超级管理员邮箱
Password: 												#设置超级管理员密码
Password (again): 										#再次输入超级管理员密码
Superuser created successfully.
Installing custom SQL ...
Installing indexes ...
Installed 6 object(s) from 1 fixture(s)

将网站移动到对应的目录,设置属组、属主

[root@web webvirtmgr]# mkdir -p /var/www
[root@web webvirtmgr]# cp -r /usr/local/src/webvirtmgr /var/www/
[root@web webvirtmgr]# chown -R nginx.nginx /var/www/webvirtmgr/

生成密钥

[root@web ~]# ssh-keygen -t 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:zPeNexTfobcrXtRjFY02955bJ6FRvfrbHV0iu31wHtA root@kvm.localdomain
The key's randomart image is:
+---[RSA 3072]----+
|               +.|
|              = =|
|             o.o+|
|       o    ..oE+|
|        S . .o=O*|
|         . ..B*=@|
|            +.+BB|
|             =o+*|
|            +oo+=|
+----[SHA256]-----+

//由于这里webvirtmgr和kvm服务部署在同一台机器,所以这里本地信任。如果kvm部署在其他机器,那么这个是它的ip
[root@web ~]# ssh-copy-id 192.168.129.135
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host '192.168.129.135 (192.168.129.135)' can't be established.
ECDSA key fingerprint is SHA256:ifuuL7ERwLYteDwADiJDTDQRFzNz0myTvXGsI2ioyD8.
Are you sure you want to continue connecting (yes/no/[fingerprint])? 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.129.135's password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh '192.168.129.135'"
and check to make sure that only the key(s) you wanted were added.

配置端口转发

[root@web ~]# ssh 192.168.129.135 -L localhost:8000:localhost:8000 -L localhost:6080:localhost:60
Last login: Wed Oct 20 15:52:07 2021 from 192.168.129.1
[root@web ~]# ss -antl
State        Recv-Q        Send-Q               Local Address:Port               Peer Address:Port       Process       
LISTEN       0             128                        0.0.0.0:111                     0.0.0.0:*                        
LISTEN       0             128                        0.0.0.0:80                      0.0.0.0:*                        
LISTEN       0             32                   192.168.122.1:53                      0.0.0.0:*                        
LISTEN       0             128                        0.0.0.0:22                      0.0.0.0:*                        
LISTEN       0             128                           [::]:111                        [::]:*                        
LISTEN       0             128                           [::]:22                         [::]:*   

配置nginx

[root@web ~]# cp -r /etc/nginx/nginx.conf /etc/nginx/nginx1.conf
[root@web ~]# vim /etc/nginx/nginx.conf
[root@web ~]# cat /etc/nginx/nginx.conf
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

http {
    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  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    include /etc/nginx/conf.d/*.conf;

    server {
        listen       80;
        server_name  localhost;

        include /etc/nginx/default.d/*.conf;

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

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }
}

[root@web ~]# vim /etc/nginx/conf.d/webvirtmgr.conf
[root@web ~]# cat /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端口

[root@web ~]# vim /var/www/webvirtmgr/conf/gunicorn.conf.py
...
bind = '0.0.0.0:8000'     //确保此处绑定的是本机的8000端口,这个在nginx配置中定义了,被代理的端口
backlog = 2048
...

开启nginx

[root@web ~]# systemctl  enable --now nginx
Created symlink /etc/systemd/system/multi-user.target.wants/nginx.service → /usr/lib/systemd/system/nginx.service.

重启nginx

[root@web ~]# systemctl restart nginx
[root@web ~]# ss -anlt
State       Recv-Q Send-Q              Local Address:Port                             Peer Address:Port              
LISTEN      0      128                             *:80                                          *:*                  
LISTEN      0      128                             *:22                                          *:*                  
LISTEN      0      100                     127.0.0.1:25                                          *:*                  
LISTEN      0      128                            :::22                                         :::*                  
LISTEN      0      100                           ::1:25                                         :::* 

[root@web ~]#  cat >> /etc/supervisord.conf <<EOF
[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
EOF

启动supervisor并设置开机自启

[root@web ~]# systemctl enable --now supervisord
Created symlink /etc/systemd/system/multi-user.target.wants/supervisord.service → /usr/lib/systemd/system/supervisord.service.

//查看状态
[root@web ~]# systemctl status supervisord
● supervisord.service - Process Monitoring and Control Daemon
   Loaded: loaded (/usr/lib/systemd/system/supervisord.service; enabled; vendor preset: disabled)
   Active: active (running) since Wed 2021-10-20 19:16:53 CST; 15s ago
  Process: 327152 ExecStart=/usr/bin/supervisord -c /etc/supervisord.conf (code=exited, status=0/SUCCESS)
 Main PID: 327155 (supervisord)
    Tasks: 2 (limit: 49594)
   Memory: 38.9M
   CGroup: /system.slice/supervisord.service
           ├─327155 /usr/bin/python3.6 /usr/bin/supervisord -c /etc/supervisord.conf
           └─327568 /usr/bin/python2 /var/www/webvirtmgr/manage.py run_gunicorn -c /var/www/webvirtmgr/conf/gunicorn.c>

1020 19:16:53 localhost.localdomain systemd[1]: Starting Process Monitoring and Control Daemon...
1020 19:16:53 localhost.localdomain systemd[1]: Started Process Monitoring and Control Daemon.

[root@web ~]# ss -antl
State       Recv-Q Send-Q              Local Address:Port                             Peer Address:Port              
LISTEN      0      128                             *:80                                          *:*                  
LISTEN      0      128                             *:22                                          *:*                  
LISTEN      0      100                     127.0.0.1:25                                          *:*                  
LISTEN      0      128                            :::22                                         :::*                  
LISTEN      0      100                           ::1:25                                         :::*

配置nginx账户,做免密登录

[root@web ~]# 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:msg77oQqw2HEWS9oIeg/QofGxRsy7cPJnEw2JGExyHw nginx@localhost.localdomain
The key's randomart image is:
+---[RSA 2048]----+
|=**.             |
|=*oE             |
|= ^ B            |
| % & .           |
|= o o   S        |
| + = . o         |
|o + = o          |
|oo ...           |
|o. o+.           |
+----[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.129.135
/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.129.135' (ECDSA) to the list of known hosts.
root@192.168.129.135's password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'root@192.168.129.135'"
and check to make sure that only the key(s) you wanted were added.

-bash-4.2$ exit
登出

[root@web ~]# vim /etc/polkit-1/localauthority/50-local.d/50-libvirt-remote-access.pkla
[root@web ~]# cat > /etc/polkit-1/localauthority/50-local.d/50-libvirt-remote-access.pkla << EOF
[Remote libvirt SSH access]
Identity=unix-user:root
Action=org.libvirt.unix.manage
ResultAny=yes
ResultInactive=yes
ResultActive=yes

[root@web ~]# chown -R root.root /etc/polkit-1/localauthority/50-local.d/50-libvirt-remote-access.pkla
[root@web ~]# systemctl restart nginx
[root@kvm ~]# systemctl restart libvirtd		#kvm上重启

kvm web界面管理

在这里插入图片描述
在这里插入图片描述
创建SSH连接:
在这里插入图片描述
在这里插入图片描述
创建存储:
在这里插入图片描述
在这里插入图片描述
进入存储:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

通过远程连接软件上传ISO镜像文件至存储目录/var/lib/libvirt/images/

[root@kvm ~]# cd /var/lib/libvirt/images/
[root@kvm images]# ls
rhel-8.2-x86_64-dvd_2.iso

在 web 界面查看ISO镜像是否存在
在这里插入图片描述
在这里插入图片描述
添加成功如下图所示
在这里插入图片描述
添加桥接网络
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
实例(虚拟机)创建

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
虚拟机插入光盘
在这里插入图片描述
设置在 web 上访问虚拟机的密码
在这里插入图片描述
启动虚拟机

在这里插入图片描述
在这里插入图片描述
虚拟机安装
在这里插入图片描述
在这里插入图片描述

报错故障

案例1
在添加镜像时,添加不成功,报错
在这里插入图片描述
解决方法:在kvm上安装一个包

[root@kvm ~]# yum update libgcrypt

下载完成后,在添加就课成功
在这里插入图片描述
案例2
web界面配置完成后可能会出现以下错误界面
在这里插入图片描述
解决方法是安装novnc并通过novnc_server启动一个vnc

[root@kvm images]# ll /etc/rc.local
lrwxrwxrwx 1 root root 13 810 23:31 /etc/rc.local -> rc.d/rc.local
[root@kvm images]# ll /etc/rc.d/rc.local
-rw-r--r--. 1 root root 474 810 23:31 /etc/rc.d/rc.local
[root@kvm images]# chmod +x /etc/rc.d/rc.local
[root@kvm images]# ll /etc/rc.d/rc.local
-rwxr-xr-x. 1 root root 474 810 23:31 /etc/rc.d/rc.local
[root@kvm images]# vim /etc/rc.d/rc.local
......此处省略N行
# that this script will be executed during boot.

touch /var/lock/subsys/local
nohup novnc_server 192.168.129.135:5920 &
[root@kvm images]# . /etc/rc.d/rc.local

案例3
第一次通过web访问kvm时可能会一直访问不了,一直转圈,而命令行界面一直报错(too many open files) 此时需要对nginx进行配置

[root@web ~]# vim /etc/nginx/nginx.conf
....此处省略N行
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
worker_rlimit_nofile 655350;    //添加此行配置

# Load dynamic modules. See /usr/share/nginx/README.dynamic.
....此处省略N行

[root@web ~]# systemctl restart nginx

然后对系统参数进行设置

[root@web ~]# vim /etc/security/limits.conf
....此处省略N行
# End of file
* soft nofile 655350
* hard nofile 655350

到此问题即可解决

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值