Linux基础服务10——虚拟化kvm

news2024/11/24 22:29:31

文章目录

  • 一、基本了解
  • 二、安装kvm
    • 2.1 部署准备
    • 2.2 安装基础服务
    • 2.3 安装web管理服务
  • 三、web界面管理
    • 3.1 添加kvm主机
    • 3.2 存储管理
      • 3.2.1 上传镜像
      • 3.2.2 扩容存储池
    • 3.3 网络管理
    • 3.4 创建虚拟机
    • 3.5 报错处理
      • 3.5.1 Server disconnected
      • 3.5.1 文件句柄问题

一、基本了解

什么是虚拟化?

  • 虚拟化是云计算的基础。虚拟化可以让一台物理服务器上跑多台虚拟机,虚拟机共享物理机的 CPU、内存、IO 硬件资源,但逻辑上虚拟机之间是相互隔离的。物理机称为宿主机(Host),宿主机上面的虚拟机称为客户机(Guest)。
  • 宿主机通过Hypervisor程序将自己的硬件资源虚拟化,并提供给客户机使用。

虚拟化类型:

  • 根据 Hypervisor 的实现方式和所处的位置,Hypervisor是一个系统,也是一个软件,虚拟化又分为两种:
  • 全虚拟化: Hypervisor 直接安装在物理机上,多个虚拟机在 Hypervisor 上运行。Hypervisor 实现方式一般是一个特殊定制的 Linux 系统。常见的Hypervisor有Xen、ESXi 。
    在这里插入图片描述
  • 半虚拟化: 物理机上首先安装常规的操作系统,比如 Redhat、Ubuntu 和 Windows。Hypervisor 作为 OS 上的一个程序模块运行,并对管理虚拟机进行管理。常见的Hypervisor有KVM、VirtualBox 和 VMWare Workstation 。
    在这里插入图片描述

2类型虚拟化对比:

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

什么是kvm?

  • KVM 全称是 Kernel-Based Virtual Machine,是基于 Linux 内核实现的。
  • KVM的CPU和内存由内核模块kvm.ko管理,虚拟 CPU 和内存,磁盘和网络设备由 Linux 内核与Qemu来实现。
  • KVM作为一个 Hypervisor,本身只关注虚拟机调度和内存管理这两个方面。IO 外设的任务交给 Linux 内核和 Qemu。

KVM 的管理工具Libvirt:

  1. Libvirt可以管理 KVM 、Xen,VirtualBox 等多种Hypervisor。
  2. Libvirt 包含 3 个东西:后台程序 libvirtd、API 库、命令行工具 virsh。
    • libvirtd是服务程序,接收和处理 API 请求。
    • API 库是对开发人员用的,可以开发出图形化管理工具,比如 virt-manager。
    • virsh 是KVM 命令行工具。

二、安装kvm

2.1 部署准备

系统版本IP地址最低资源配置
CentOS7192.168.161.129CPU:8核
内存:4G
磁盘:50G

1.确保CPU虚拟化功能已开启。若使用的是虚拟机,则要关机设置CPU虚拟化;若使用的是物理机,则要在BIOS里开启CPU虚拟化

在这里插入图片描述
2.关闭防火墙和selinux。

systemctl stop firewalld
systemctl disable firewalld
setenforce 0

//重启。
reboot

3.配置网络源。

wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo

//配置epel源。
wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
sed -i 's|^#baseurl=https://download.example/pub|baseurl=https://mirrors.aliyun.com|' /etc/yum.repos.d/epel*
sed -i 's|^metalink|#metalink|' /etc/yum.repos.d/epel*

//安装基本工具包。
yum -y install  vim wget net-tools unzip zip gcc gcc-c++

4.检测机器的CPU是否支持KVM。若显示结果由vmx(Intel)或svm(AMD)字样,就说明支持。

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

在这里插入图片描述

2.2 安装基础服务

1.安装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 

2.设置KVM服务器网卡为桥接模式。让KVM的虚拟机就可以通过该桥接网卡和公司内部其他服务器处于同一网段。

cp /etc/sysconfig/network-scripts/ifcfg-ens33 /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.161.129
NETMASK=255.255.255.0
GATEWAY=192.168.161.2
DNS1=114.114.114.114
DNS2=8.8.8.8
EOF

//配置已经=存在的网卡ens33。
cat > /etc/sysconfig/network-scripts/ifcfg-ens33 << EOF
TYPE=Ethernet
BOOTPROTO=static
NAME=ens33
DEVICE=ens33
ONBOOT=yes
BRIDGE=br0
NM_CONTROLLED=no
EOF

//重启网卡。
systemctl restart network

3.启动kvm,验证安装结果。

systemctl enable --now libvirtd

//验证。
lsmod|grep kvm

4.测试验证安装结果。

virsh --version
virt-install --version

//做软连接。
ln -s /usr/libexec/qemu-kvm /usr/bin/qemu-kvm

//查看网桥信息
brctl show

在这里插入图片描述

2.3 安装web管理服务

  • kvm 的 web 管理界面是由 webvirtmgr 程序提供的,下载地址

1.安装依赖包。

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

2.下载安装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

3.导入sqlite3模块。若用python2导入,则初始化使用python2来进行,我这里是用Python导入的。

python
>>> import sqlite3    //存在则不会报错,若不存在需要安装。

4.同步数据库,设置web页面登录帐号密码。

python manage.py syncdb

在这里插入图片描述
5.设置web页面前端文件,拷贝web网页文件到指定目录。

mkdir /var/www
cp -r /usr/local/src/webvirtmgr-master /var/www/webvirtmgr
chown -R nginx.nginx /var/www/webvirtmgr/

6.对kvm服务器做免密。

//webvirtmgr服务器生成密钥。
ssh-keygen -t rsa

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

7.配置端口转发。

ssh 192.168.161.129 -L localhost:8000:localhost:8000 -L localhost:6080:localhost:60

8.配置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

9.修改webvirtmgr程序文件,绑定为所有主机可以访问8000端口。

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

在这里插入图片描述
10.重启nginx

systemctl enable --now nginx

11.修改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

12.配置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

13.配置访问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

14.重启服务,IP访问网页。

systemctl restart nginx
systemctl restart libvirtd

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

三、web界面管理

3.1 添加kvm主机

  • 提供web页面的程序与kvm是单独分开的,当kvm有多台时,可以姨太太添加进来。
  • 添加之前需要给supervisord所在服务器的nginx用户对kvm主机做免密登录,将公钥传到kvm服务器上,并设置不验证、不记录。也就是上面的”配置nginx用户”步骤。

在这里插入图片描述

在这里插入图片描述

3.2 存储管理

3.2.1 上传镜像

1.kvm服务器创建镜像存放目录。

mkdir /kvm_iso

2.网页创建指定该目录。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
3.将本地镜像上传到该目录。
在这里插入图片描述
4.创建虚拟机启动镜像文件。
在这里插入图片描述
在这里插入图片描述

3.2.2 扩容存储池

  • 当某台kvm服务器的存储不够时,需要扩容磁盘,项目中可以直接插硬盘做分区,我这里是添加虚拟机硬盘做演示。

1.添加硬盘。
在这里插入图片描述
在这里插入图片描述

2.磁盘分区,格式化,挂载。
在这里插入图片描述
在这里插入图片描述

//刷新分区。
partprobe

//格式化。
mkfs.xfs /dev/sdb1

//查看uuid。
blkid
/dev/sdb1: UUID="10c0590d-e469-45fd-9aba-33bce94cf763" TYPE="xfs" 

//挂载。
vim /etc/fstab
UUID="10c0590d-e469-45fd-9aba-33bce94cf763" /kvm_iso xfs defaults 0 0

mount -a

在这里插入图片描述

3.3 网络管理

1.创建网卡。
在这里插入图片描述
在这里插入图片描述
2.查看网卡。
在这里插入图片描述

3.4 创建虚拟机

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

3.5 报错处理

3.5.1 Server disconnected

  • web界面配置完成后可能会出现以下错误界面。

在这里插入图片描述

1.安装novnc,通过novnc_server启动一个vnc。

wget https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/n/novnc-0.5.1-2.el7.noarch.rpm
yum -y install novnc-0.5.1-2.el7.noarch.rpm


//文件末尾追加下面的内容。
vim /etc/rc.d/rc.local				
...
nohup novnc_server 192.168.50.156:5920 &

//添加文件执行权限,并启动程序。
chmod +x /etc/rc.d/rc.local
. /etc/rc.d/rc.local

2.做完以上操作后,再次访问即可正常访问。
在这里插入图片描述

3.5.1 文件句柄问题

  • 若第一次访问web页面时,一直访问不了一直转圈,且命令行界面一直报错(too many open files),这是文件句柄数太小太导致的。
/修改nginx配置文件。
vim /etc/nginx/nginx.conf
......
pid /run/nginx.pid;
worker_rlimit_nofile 655350;   //添加此行


//修改系统文件句柄数。
vim /etc/security/limits.conf
......
# End of file
* soft nofile 655350     //添加这两行
* hard nofile 655350


//重启nginx。
systemctl restart nginx

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/752330.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

短视频抖音seo源码矩阵系统源码开发规则

一、 技术开发文档说明 目录 一、 技术开发文档说明 1. 系统架构 2. 抖音seo排名系统模块组成 二、功能结构&#xff1a; 三、 抖音seo源码开发功能目录 四、 短视频抖音seo矩阵系统源码开发代码展示 1. 建立数据表 1. 系统架构 短视频抖音seo矩阵源码部署功能架构包含…

基于 MNN 在个人设备上流畅运行大语言模型

LLM&#xff08;大语言模型&#xff09;因其强大的语言理解能力赢得了众多用户的青睐&#xff0c;但LLM庞大规模的参数导致其部署条件苛刻&#xff1b;在网络受限&#xff0c;计算资源有限的场景下无法使用大语言模型的能力&#xff1b;低算力&#xff0c;本地化部署的问题亟待…

牧云·云原生安全平台v2.0.0正式上线,云上想不安全都难!

**前言&#xff1a;**牧云云原生安全平台是长亭牧云团队以开源社区为生态载体技术积累为驱动所打造的云原生安全平台。首创双模探针架构&#xff0c;可选用 Agentless/Agent 多种方案进行部署&#xff0c;覆盖制品、运行时、集群全流程安全&#xff0c;开箱即用、快速实施、成本…

这所双一流,我求求你不要错过!错过后悔一年!

一、学校及专业介绍 山西大学&#xff08;ShanxiUniversity&#xff09;&#xff0c;位于山西省太原市&#xff0c;是中国办学历史最悠久的高等学府之一&#xff0c;国家“双一流”建设高校。 1.1 招生情况 物理电子工程学院中,081000信息与通信工程、085402通信工程&#xf…

IIS 部署的应用禁用HTTP TRACE / TRACK方法【原理扫描】

远程Web服务器支持TRACE和/或TRACK方法。 TRACE和TRACK是用于调试Web服务器连接的HTTP方法。 直接在网站Web.config文件中进行如下操作&#xff1a;在Web.config中的<system.webServer>节点内添加以下配置即可&#xff1a; <security> <requestFiltering> &…

水果编曲软件FLStudio21.0.3.3517中文直装版2023最新百度网盘下载

水果编曲软件FLStudio21.0.3.3517中文直装版2023最新百度网盘完整下载是最好的音乐开发和制作软件也称为水果循环。它是最受欢迎的工作室&#xff0c;因为它包含了一个主要的听觉工作场所。最新水果编曲软件FLStudio21中文直装版有不同的功能&#xff0c;如它包含图形和音乐音序…

Linux 虚拟机重启远程连接超时

问题 : 虚拟机关机重启之后,本来可以连接的远程,访问超时 原因 : 为了可以访问 CentOS 虚拟机,在 /etc/sysconfig/network-scripts/ifcfg-ens33 中修改使用了network静态ip的方式,在重启后与NetWorkManager自动配置冲突,导致远程无法正常访问 处理方式 &#xff1a; 禁用…

PyTorch从零开始实现Transformer

文章目录 自注意力Transformer块编码器解码器块解码器整个Transformer参考来源全部代码&#xff08;可直接运行&#xff09; 自注意力 计算公式 代码实现 class SelfAttention(nn.Module):def __init__(self, embed_size, heads):super(SelfAttention, self).__init__()self.e…

奥特曼与钢铁侠【InsCode Stable Diffusion美图活动一期】

文章目录 简介图片生成步骤更多体验方式 简介 InsCode 是一个一站式的软件开发服务平台&#xff0c;从开发-部署-运维-运营&#xff0c;都可以在 InsCode 轻松完成。 InsCode 的 Ins 是 Inspiration&#xff0c;意思是创作、寻找有灵感的代码。 Stable Diffusion是文图生成模型…

MySQL的下载、安装和配置(图文详解)

目录 一、MySQL的4大版本 二、软件的下载 1. 下载地址 2. 打开官网&#xff0c;点击DOWNLOADS 3. 点击 MySQL Community Server 三、MySQL8.0 版本的安装 四、配置MySQL8.0 五、配置MySQL8.0 环境变量 六、MySQL5.7 版本的安装、配置 一、MySQL的4大版本 MySQL Commu…

内存泄露?腾讯工程师2个压箱底的方法和工具

导读&#xff5c;遭受内存泄露往往是令开发者头疼的问题&#xff0c;传统分析工具 gdb、Valgrind在解决内存泄露问题上效率较低。本文特别邀请到了腾讯后台开发工程师邢孟棒以 TDSQL实际生产中mysql-proxy内存泄露问题作为分析对象&#xff0c;分享其基于动态追踪技术的通用内存…

倾斜摄影三维模型数据在哪些行业或场景发挥了重要的作用?

倾斜摄影技术是一种高精度三维建模方法&#xff0c;目前已经在许多行业中获得了认可。倾斜摄影技术就是利用无人机搭载相机以不同的角度捕捉建筑物、道路等物体的外形&#xff0c;并生成高分辨率的三维模型数据。那么&#xff0c;这些数据能够应用在哪些行业或场景中呢&#xf…

智慧校园能源管控系统

智慧校园能源管控系统是一种搭载了物联网技术、大数据技术、大数据等技术性智能化能源管理方法系统&#xff0c;致力于为学校提供更高效、安全性、可信赖的能源供应管理和服务。该系统包括了校内的电力工程、水、气、暖等各类能源&#xff0c;根据对能源的实时检测、数据统计分…

最全的ubuntu20.04上安装nvidia和cuda

文章目录 一、环境要求二、查询推荐安装的驱动版本三、安装470四、查看显卡驱动是否成功五、安装对应版本的cuda 官方路径 一、环境要求 ubuntu20.04如果之前有过驱动应该先卸载 sudo apt-get --purge remove nvidia* sudo apt autoremove# 卸载cuda sudo apt-get --purge r…

Jenkins全栈体系(二)

Jenkins 第三章 Jenkins Git Maven 自动化部署配置 十、几种构建方式 快照依赖构建/Build whenever a SNAPSHOT dependency is built 当依赖的快照被构建时执行本job 触发远程构建 (例如,使用脚本) 远程调用本job的restapi时执行本job job依赖构建/Build after other proj…

【分布式应用】kafka集群、Filebeat+Kafka+ELK搭建

目录 一、kafka概述1.1为什么需要消息队列&#xff08;MQ&#xff09;1.2常见的中间1.3消息队列的优点1.4消息队列的两种模式1.5 Kafka 定义1.6 Kafka 的特性1.7kafka的系统架构 二、部署kafka集群2.1安装kafka2.2Kafka 命令行操作 三、kafka架构深入3.1kfka工作流程及文件存储…

flutter开发实战-flutter实现类似iOS的Alert提示框与sheet菜单效果

flutter开发实战-flutter实现类似iOS的Alert提示框与sheet菜单效果 在开发过程中&#xff0c;经常使用到提示框Dialog&#xff0c;与sheet&#xff0c;使用到了flutter的showDialog与showModalBottomSheet 我这里类似alert弹窗直接调用 flutter 中提供的showDialog()函数显示对…

QML语法--第二篇

链接: QML Book中文版(QML Book In Chinese) QML语言描述了用户界面元素的形状和行为。用户界面能够使用JavaScript来提供修饰&#xff0c;或者增加更加复杂的逻辑。 从QML元素的层次结构来理解是最简单的学习方式。子元素从父元素上继承了坐标系统&#xff0c;它的x,y坐标总…

社交圈..

社交圈 - 题目 - Daimayuan Online Judge 思路&#xff1a;我们能够想到&#xff0c;如果i,j是并列的&#xff0c;则l[i]与r[j]会有重合的部分&#xff0c;那么其实重合的部分越多越好&#xff0c;其实就是让l[i]与r[i]的差值越小越好&#xff0c;同时要让越…

使用qemu创建ubuntu-base文件系统,并安装PM相关内核模块

目录 一、配置镜像二、使用qemu模拟nvdimm&#xff08;安装PM相关内核模块&#xff09;运行记录 遇到的一些问题1、ext4文件系统损坏问题&#xff1a;系统启动时&#xff0c;遇到ext4的报错信息解决办法&#xff1a;2、内核模块未成功加载3、qemu报错4、主机终端无法正常打开 流…