【虚拟化】KVM安装和WebVirtMgr创建虚拟机
KVM 的工作原理是使用 Linux 内核的虚拟化模块,将物理服务器划分为多个虚拟机。KVM 在 Linux 内核之上构建一个虚拟化层,该虚拟化层允许多个虚拟机共享物理服务器上的计算资源(如 CPU、内存和 0 设备)。在此虚拟化层中,每个虚拟机都被视为单独的计算机,每个虚拟机可以运行不同的操作系统和应用程序。KVM使用硬件虚拟化技术,即通过 intel VT-x 和 AMD-V 等 CPU 虚拟
目录
一、KVM 概述
KVM 是 Kernel-based Virtual Machine 的缩写,是一种用于虚拟化的开源硬件虚拟化技术。它使用 Linux 内核的虚拟化模块,将物理服务器划分为多个虚拟机。
KVM 允许虚拟机直接访问物理硬件资源,从而提供出色的性能和稳定性,同时还支持许多常见的操作系统和应用程序。 KVM 使用了 QEMU (Quick Emulator) 作为其默认的虚拟机监控程序。
除此之外,KVM 还支持多种嵌入式和云计算场景,并且得到了广泛的应用。
二、KVM工作原理
KVM 的工作原理是使用 Linux 内核的虚拟化模块,将物理服务器划分为多个虚拟机。
KVM 在 Linux 内核之上构建一个虚拟化层,该虚拟化层允许多个虚拟机共享物理服务器上的计算资源(如 CPU、内存和 0 设备)。在此虚拟化层中,每个虚拟机都被视为单独的计算机,每个虚拟机可以运行不同的操作系统和应用程序。
KVM使用硬件虚拟化技术,即通过 intel VT-x 和 AMD-V 等 CPU 虚拟化指集的支持,将虚拟化性能提升到接近原生性能。
此外,KVM 还使用 QEMU 作为其虚拟机监控程序,QEMU为每个虚拟机提供了一个虚拟化的环境,在该环境中,虚拟机可以访问它需要的资源(如磁盘、网络和其他I/0 设备)。
同时,KVM 利用 Linux 内核的强大功能,如分时调度和内存管理,来确保多个虚拟机之间的隔离性和安全性。
综上所述,KVM 的工作原理是结合硬件虚拟化技术和 Linux 内核的虚拟化模块,创建出一个虚拟化层,将物理服务器划分为多个虚拟机,并为每个虚拟机提供一个虚拟化的环境,从而实现资源共享和隔离。
三、KVM应用场景
KVM 作为一种强大的硬件虚拟化技术,在许多场景下都具有广泛的应用,以下是几个主要的应用场景:
1.云计算: KVM 在云计算中表现优异,可用于构建虚拟私有云、虚拟机托管服务等。KVM可以帮助企业实现资源共享、高可用性和快速部署的目标,同时还可以提高数据安全性和隔离性。
2.Web 托管: KVM 可以用于 Web 服务器的虚拟化,通过将多个虚拟机分配在一个物理服务器上,可以极大地提高服务器的利用率和性能。同时,KVM 还提供了快速备份和恢复数据的功能,保证了服务器的高可靠性。
3.测试和开发:KVM 可以帮助开发者创建多个虚拟机进行测试和开发,从而提高软件开发周期的效率和速度。开发者可以在虚拟机中运行不同的操作系统和应用程序,隔离他们的开发环境,同时可以在开发过程中随时备份和还原虚拟机。
4.HPC(高性能计算): KVM 可以用于构建 HPC 集群系统。通过虚拟化技术,HPC 集群系统可以实现资源共享和高效管理,同时保证计算资源的隔离性和安全性。
5.VDI(虚拟桌面基础设施): KVM 可以用于构建VDI 系统,将多个桌面虚拟机部署在一个物理服务器上,实现桌面虚拟化。VDI 系统可以提供远程访问、资源共享和快速部署的功能,同时可以保证数据隔离和安全性。
四、安装KVM
4.1 部署准备
系统版本 | IP地址 | 最低资源配置 | 部署角色 |
CentOS7.6 | 192.168.2.117 | CPU:8核 | KVM WebVirtMgr |
WMware ESXi | 7.0版本 |
确保CPU虚拟化功能已开启。若使用的是虚拟机,则要关机设置CPU虚拟化;若使用的是物理机,则要在BIOS里开启CPU虚拟化。
如下我使用了虚拟机 硬件虚拟化3个框我们都选中。
关闭防火墙和selinux。
systemctl stop firewalld
systemctl disable firewalld
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
setenforce 0
//安装基本工具包。
yum -y install vim wget net-tools unzip zip gcc gcc-c++ epel-release
yum install nginx -y
systemctl enable nginx supervisor
检测机器的CPU是否支持KVM。若显示结果由vmx(Intel)或svm(AMD)字样,就说明支持。
egrep -o 'vmx|svm' /proc/cpuinfo
lsmod | grep kvm
- vmx: 当前cpu支持Intel虚拟化技术
- svm: 当前cpu支持amd虚拟化技术
4.2 安装基础服务
安装kvm依赖包
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
// 根据实际安装情况,若有报错,可以参考安装以下依赖包。
wget http://mirror.centos.org/centos/7/updates/x86_64/Packages/qemu-kvm-tools-1.5.3-175.el7_9.1.x86_64.rpm
wget http://mirror.centos.org/centos/7/os/x86_64/Packages/libvirt-python-4.5.0-1.el7.x86_64.rpm
wget http://mirror.centos.org/centos/7/os/x86_64/Packages/bridge-utils-1.5-9.el7.x86_64.rpm
rpm -ivh --nodeps qemu-kvm-tools-1.5.3-175.el7_9.1.x86_64.rpm
yum -y localinstall bridge-utils-1.5-9.el7.x86_64.rpm
yum -y localinstall libvirt-python-4.5.0-1.el7.x86_64.rpm
安装包说明:
KVM安装包 | 含义 |
qemu-kvm | 主要KVM程序包 |
python-virtinst | 创建虚拟机所需要的命令行工具和程序 |
virt-manager | GUI虚拟机管理工具 |
virt-top | 虚拟机统计命令 |
virt-viewer | GUI连接程序,连接到已经配置好的虚拟机 |
libvirt | C语言工具包,提供libvirt服务 |
libvirt-client | 为虚拟机客户提供的C语言工具包9, |
virt-install | 基于libvirt服务的虚拟机创建命令 |
qemu-kvm-tools | KVM调试工具 |
qemu-img | QEMU磁盘映像实用程序 |
bridge-utils | 创建和管理桥接设备的工具 |
设置KVM服务器网卡为桥接模式。让KVM的虚拟机就可以通过该桥接网卡和公司内部其他服务器处于同一网段。
cp /etc/sysconfig/network-scripts/ifcfg-ens192 /etc/sysconfig/network-scripts/ifcfg-br0
# 配置虚拟网卡br0。
cat > /etc/sysconfig/network-scripts/ifcfg-br0 << EOF
TYPE=Bridge
DEVICE=br0
NM_CONTROLLED=no
BOOTPROTO=static
NAME=br0
ONBOOT=yes
IPADDR=192.168.2.117
NETMASK=255.255.255.0
GATEWAY=192.168.2.254
DNS1=114.114.114.114
DNS2=8.8.8.8
EOF
cat > /etc/sysconfig/network-scripts/ifcfg-ens192 << EOF
TYPE=Ethernet
BOOTPROTO=static
NAME=ens192
DEVICE=ens192
ONBOOT=yes
BRIDGE=br0
NM_CONTROLLED=no
EOF
查看网桥信息
brctl show
启动kvm,验证安装结果。
# 开启 libvirtd KVM服务,以开启相关支持
systemctl enable --now libvirtd
# 验证
lsmod|grep kvm
virsh --version
virt-install --version
查看 libvirt版本信息
4.3 安装web管理服务
安装依赖包
yum -y install git python-pip libvirt-python libxml2-python python-websockify supervisor nginx python2-devel
# 若安装过程中由依赖包报错,可以参考以下安装包。
wget http://mirror.centos.org/centos/7/os/x86_64/Packages/libxml2-python-2.9.1-6.el7.5.x86_64.rpm
wget https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/p/python-websockify-0.6.0-2.el7.noarch.rpm
yum -y install python2-devel python2-pip git libvirt-python supervisor nginx
rpm -ivh --nodeps libxml2-python-2.9.1-6.el7.5.x86_64.rpm
rpm -ivh --nodeps python-websockify-0.6.0-2.el7.noarch.rpm
下载安装webvirtmgr服务
cd /usr/local/src/
wget https://github.com/retspen/webvirtmgr/archive/refs/heads/master.zip
//解压,安装依赖包,只能使用pip或pip2来装。
unzip master.zip
cd webvirtmgr-master/
pip install -r requirements.txt
导入sqlite3模块。这里使用python2导入的。
python
>>> import sqlite3 //存在则不会报错,若不存在需要安装。
同步数据库,设置web页面登录帐号密码。
设置web页面前端文件,拷贝web网页文件到指定目录,也就是部署web站点。
mkdir /var/www
cp -r /usr/local/src/webvirtmgr-master /var/www/webvirtmgr
chown -R nginx.nginx /var/www/webvirtmgr/
对kvm服务器做免密
# webvirtmgr服务器生成密钥。
ssh-keygen -t rsa
# 由于我把webvirtmgr和kvm服务部署在同一台机器,所以这里本地信任。如果kvm部署在其他机器,那么这个是它的ip。
ssh-copy-id -i /root/.ssh/id_rsa.pub 192.168.2.117
nginx配置
cat > /etc/nginx/nginx.conf << EOF
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 {
}
}
}
EOF
// 以下的变量需保持一样,无须修改。
cat > /etc/nginx/conf.d/webvirtmgr.conf << EOF
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;
}
}
EOF
修改webvirtmgr程序文件,绑定为所有主机可以访问8000端口。
vim /var/www/webvirtmgr/conf/gunicorn.conf.py
检查nginx配置文件和进程
重启nginx
systemctl restart nginx
修改supervisor程序配置文件追加内容,并设置开机自启(supervisor服务不存在需要安装)。
cat >> /etc/supervisord.conf <<EOF
[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
EOF
# 启动supervisor并设置开机自启
systemctl enable --now supervisord
配置nginx用户
# 临时切换用户。
su - nginx -s /bin/bash
# 做免密登录
ssh-keygen -t rsa
ssh-copy-id root@192.168.161.129
# 设置nginx用户ssh该主机时,不验证也不记录。
touch ~/.ssh/config
echo -e "StrictHostKeyChecking=no\nUserKnownHostsFile=/dev/null" >> ~/.ssh/config
chmod 0600 ~/.ssh/config
可以在 webvirtmgr 安装 libvirt-client 进行测试:
virsh --connect qemu+ssh://root@192.168.2.117/system list --all
配置访问web页面时的验证用户为root。
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
EOF
# 修改属主属组。
chown -R root.root /etc/polkit-1/localauthority/50-local.d/50-libvirt-remote-access.pkla
重启服务,IP访问网页。
systemctl restart nginx
systemctl restart libvirtd
地址和账号 :http://192.168.2.117/login/ ,admin/admin
登录成功。到此,webvirtmgr控制台安装完毕。
五、web界面管理
5.1 KVM节点添加
yum install libvirt qemu-kvm virt-viewer -y
ln -vs /usr/libexec/qemu-kvm /usr/bin/
mv /etc/libvirt/qemu/networks/default.xml /tmp
systemctl start libvirtd
systemctl status libvirtd
切换到 nginx 用户,生成密钥对,然后将公钥拷贝到 kvm主机节点,实现免密码登录,因为命令是通过nginx用户发送到kvm主机执行的。我们这里只有一台测试机。
libvirt-client测试
virsh --connect qemu+ssh://root@192.168.2.117/system list --all
添加node节点
填写IP和用户名
这里是直接使用 root用户,建议使用普通用户,但是要注意权限,点击添加
点进来如果没有任何报错,那么基本上已经添加主机成功了。
5.2 存储管理
kvm服务器创建镜像存放目录。
mkdir /home/kvm_iso
网页创建指定该目录
将本地镜像上传到该目录
镜像上传到路径:/home/kvm_iso
webVirMgr就可以看到成功上传的镜像
5.3 创建虚拟机
创建虚拟磁盘文件
创建虚拟机
填写虚拟机名, 选择磁盘镜像和网络池
进入创建的虚拟机选择设置 镜像连接
开启虚拟机,就可以为虚拟机安装操作系统了
已进入系统安装界面
Centos 安装中
六、报错处理
报错1
[root@kvm ~]# virt-manager
[root@kvm ~]# libGL error: unable to load driver: swrast_dri.so
libGL error: failed to load driver: swrast
解决如下:
yum install -y mesa-libGLES-devel mesa-dri-drivers dejavu-lgc-sans-fonts
报错2
乱码
解决如下:
在命令行里执行
如果乱码执行:LANG=C,然后重新执行virt-manager
并配置如下:
使用的系统语言环境为中文,virt-manager显示乱码。
导致原因:语言不兼容,字符集不匹配
解决方法:将系统由中文调整为英文
调整方法1:
vim /etc/profile #打开配置文件
export LANG="en_US.UTF-8" #添加上这一行
source /etc/profile #新加载文件配置
如下可以看到乱码问题解决
【Linux】配置网络yum源,本地yum源以及本地光盘yum源_1.将之前的源进行备份,将media复制出来-CSDN博客
Linux基础服务10——虚拟化kvm_linux kvm-CSDN博客
Centos7 安装KVM_centos kvm-CSDN博客
pip 命令不存在解决:【已解决】 linux下提示:pip未找到命令(bash pip command not found_bash pip command not found_-bash: pip: 未找到命令-CSDN博客
更多推荐
所有评论(0)