当前位置: 首页 > news >正文

KVM虚拟化:提升企业效率的利器

1,虚拟化介绍
虚拟化:在一台计算机上虚拟出多个逻辑的计算机,而且每个逻辑计算机
它可以是不同操作系统
虚拟化的本质是通过虚拟化层(Hypervisor 或虚拟引擎) 对物理资源进行抽象和模拟,主要过程包括:
  1. 资源抽象:将物理硬件(如 CPU、内存、硬盘)转化为可统一管理的虚拟资源(如虚拟 CPU、虚拟内存、虚拟磁盘)。
  2. 隔离与封装:每个虚拟环境(如虚拟机、容器)在逻辑上与其他环境隔离,拥有独立的运行空间,互不干扰。
  3. 动态分配:虚拟化层可根据需求动态分配资源(如为某个虚拟机临时增加内存),提升资源利用率。
2,虚拟化技术:可以扩大硬件容量,单个cpu模拟出多个cpu并行,
允许一个平台上同时运行多个操作系统,应用程序都可以在相互独立
的空间内运行,而且互不影响。
3,为什么企业使用虚拟化技术
  • 节约成本
  • 提高效率,物理机我们一般称为宿主机(Host),宿主机上面的虚拟机称为客户机(Guest)。
4,那么 Host 是如何将自己的硬件资源虚拟化,并提供给 Guest 使用的呢?
这个主要是通过一个叫做 Hypervisor 的程序实现的。
Hypervisor:一种运行在物理服务器硬件与操作系统之间的中间软件层
可允许多个操作系统和应用来共享硬件资源
根据 Hypervisor 的实现方式和所处的位置,虚拟化又分为两种:
完全虚拟化:直接在物理机上部署虚拟化,且不需要修改操作系统内核
半虚拟化:需要修改操作系统内核,使其支持虚拟化驱动来实现虚拟化技术
  完全虚拟化
Hypervisor 直接安装在物理机上,多个虚拟机在 Hypervisor 上运行。Hypervisor 实现方式一般是一个特殊定制的 Linux 系统。Xen 和 VMWare 的 ESXi 都属于这个类型
  半虚拟化
理论上讲:
全虚拟化一般对硬件虚拟化功能进行了特别优化,性能上比半虚拟化要高;
半虚拟化因为基于普通的操作系统,会比较灵活,比如支持虚拟机嵌套。嵌套意味着可以在KVM虚拟机中再运行KVM。
5,kvm介绍
kVM 全称是 Kernel-Based Virtual Machine。也就是说 KVM 是基于 Linux 内核实现的。
KVM有一个内核模块叫 kvm.ko,只用于管理虚拟 CPU 和内存。
那 IO 的虚拟化,比如存储和网络设备则是由 Linux 内核与Qemu来实现。
Qemu 是纯软件实现的虚拟化模拟器,几乎可以模拟任何硬件设备,我们最熟悉的就是能够模拟一台能够独立运行操作系统的虚拟机,虚拟机认为自己和硬件打交道,但其实是和 Qemu 模拟出来的硬件打交道,Qemu 将这些指令转译给真正的硬件。
正因为 Qemu 是纯软件实现的,所有的指令都要经 Qemu 过一手,性能非常低,所以,在生产环境中,大多数的做法都是配合 KVM 来完成虚拟化工作,因为 KVM 是硬件辅助的虚拟化技术,主要负责 比较繁琐的 CPU 和内存虚拟化,而 Qemu 则负责 I/O 虚拟化,两者合作各自发挥自身的优势,相得益彰.
作为一个 Hypervisor,KVM 本身只关注虚拟机调度和内存管理这两个方面。IO 外设的任务交给 Linux 内核和 Qemu。
Libvirt 就是 KVM 的管理工具。管理虚拟机和虚拟化功能的软件
其实,Libvirt 除了能管理 KVM 这种 Hypervisor,还能管理 Xen,VirtualBox 等。
Libvirt 包含 3 个东西:后台 daemon 程序 libvirtd、API 库和命令行工具 virsh
  • libvirtd是服务程序,接收和处理 API 请求;
  • API 库使得其他人可以开发基于 Libvirt 的高级工具,比如 virt-manager,这是个图形化的 KVM 管理工具;
  • virsh 是我们经常要用的 KVM 命令行工具
  • KVM部署(基于CentOS7)
环境说明:
系统:CentOS7
IP:192.168.100.40
1、CPU虚拟化功能
部署前请确保你的CPU虚拟化功能已开启,分为两种情况:
1虚拟机要关机设置CPU虚拟化
2物理机要在BIOS里开启CPU虚拟化

2、虚拟机设置(内存:8G  磁盘:200G  虚拟化功能:开启)

//设置虚拟机内存,添加一块200G的硬盘

3,创建分区并挂载

[root@ycy ~]# parted /dev/sdb
GNU Parted 3.1
使用 /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mklabel                                                          
新的磁盘标签类型? msdos                                                  
(parted) unit                                                             
Unit?  [compact]? MiB                                                     
(parted) p
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 204800MiB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: Number  Start  End  Size  Type  File system  标志(parted) mkpart                                                           
分区类型?  primary/主分区/extended/扩展分区? primary                     
文件系统类型?  [ext2]? xfs                                               
起始点? 10MiB                                                            
结束点? 204790MiB                                                        
(parted) p                                                                
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 204800MiB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: Number  Start    End        Size       Type     File system  标志1      10.0MiB  204790MiB  204780MiB  primary(parted) q                                                                
信息: You may need to update /etc/fstab.
[root@ycy ~]# udevadm settle
[root@ycy ~]# mkfs.xfs /dev/sdb1
[root@ycy ~]# blkid /dev/sdb1
/dev/sdb1: UUID="d5b2d3e7-7698-4224-8b14-cb66697636bd" TYPE="xfs"//挂载
[root@ycy ~]# mkdir /kvmdata
[root@ycy ~]# vim /etc/fstab
//插入一行
UUID=d5b2d3e7-7698-4224-8b14-cb66697636bd  /kvmdata  xfs    defaults 0 0     
[root@ycy ~]# mount -a
[root@yy ~]# df -Th
文件系统       类型      容量  已用  可用 已用% 挂载点
/dev/sda3      xfs        50G  1.3G   49G    3% /
devtmpfs       devtmpfs  3.9G     0  3.9G    0% /dev
tmpfs          tmpfs     3.9G     0  3.9G    0% /dev/shm
tmpfs          tmpfs     3.9G   12M  3.9G    1% /run
tmpfs          tmpfs     3.9G     0  3.9G    0% /sys/fs/cgroup
/dev/sda1      xfs      1014M  127M  888M   13% /boot
tmpfs          tmpfs     797M     0  797M    0% /run/user/0
/dev/sdb1      xfs       200G   33M  200G    1% /kvmdata

4,关闭防火墙以及selinux

[root@ycy ~]# systemctl stop firewalld
[root@ycy ~]# systemctl disable firewalld
[root@ycy ~]# cat /etc/sysconfig/selinux 
SELINUX=disabled
[root@ycy ~]# reboot

5,部署yum源(访问giehub太慢,结尾有彩蛋)

//部署yum源
[root@ycy ~]# cd /etc/yum.repos.d
[root@ycy yum.repos.d]# rm -rf *
[root@ycy yum.repos.d]# curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
[root@ycy yum.repos.d]# yum  -y  install epel-release
//安装所需软件包
[root@ycy ~]# yum -y install  vim wget net-tools unzip zip gcc gcc-c++//验证cpu是否支持kvm,vmx是intel的  svm是AMD的
[root@ycy ~]# egrep -o 'vmx|svm' /proc/cpuinfo 

6,安装kvm

[root@ycy ~]# 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 //配置网络,因为虚拟机中的网络,我们一般是都和公司服务器处在同一网段的,所以我们需要把kvm的网卡配置成桥接模式
[root@ycy ~]# cd /etc/sysconfig/network-scripts/
[root@ycy network-scripts]# cp ifcfg-ens33 ifcfg-br0
[root@ycy network-scripts]# cat ifcfg-br0 
TYPE=Bridge
BOOTPROTO=none
NAME=br0
DEVICE=br0
ONBOOT=yes
IPADDR=192.168.100.30
PREFIX=24
GATEWAY=192.168.100.254
DNS1=8.8.8.8
[root@cy network-scripts]# cat ifcfg-ens33 
TYPE=Ethernet
BOOTPROTO=none
NAME=ens33
DEVICE=ens33
ONBOOT=yes
BRIDGE=br0
[root@ycy network-scripts]# //重启网卡服务
[root@ycy network-scripts]# systemctl restart NetworkManager
[root@ycy network-scripts]# systemctl restart network
[root@ycy ~]# systemctl restart libvirtd
[root@ycy ~]# systemctl enable libvirtd//查看kvm模块是否加载
[root@ycy ~]# lsmod | grep kvm
kvm_intel             183621  0 
kvm                   586948  1 kvm_intel
irqbypass              13503  1 kvm//验证安装结果
[root@ycy ~]# virsh -c qemu:///system listId    名称                         状态
----------------------------------------------------
[root@ycy ~]# virsh --version
4.5.0
[root@ycy ~]# virt-install --version
1.5.0
[root@ycy ~]#//将qemu-kvm这个命令做一个软链接到/usr/bin/qemu-kvm
[root@ycy ~]# ln -s /usr/libexec/qemu-kvm /usr/bin/qemu-kvm
[root@ycy ~]# ll /usr/bin/qemu-kvm
lrwxrwxrwx 1 root root 21 9月  30 00:14 /usr/bin/qemu-kvm -> /usr/libexec/qemu-kvm//查看网桥信息
[root@ycy ~]# brctl show
bridge name	bridge id		STP enabled	interfaces
br0		8000.000c294927bd	no		ens33
virbr0		8000.525400f9acee	yes		virbr0-nic

7,KVM管理界面安装

Kvm的web界面是由webvirtmgr程序提供的
//安装依赖包
[root@ycy ~]# yum -y install git python-pip libvirt-python libxml2-python python-websockify supervisor nginx python-devel//从github上下载webvirtmgr代码
[root@ycy ~]# cd /usr/local/src/
[root@ycy src]# git clone https://github.com/retspen/webvirtmgr.git//安装webvirtmgr
cd webvirtmgr/
[root@ycy webvirtmgr]# pip --trusted-host pypi.python.org install -r requirements.txt//检查sqlite3是否安装
[root@ycy ~]# python
Python 2.7.5 (default, Jun 28 2022, 15:30:04) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-44)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sqlite3
>>> exit()

8,初始化账号信息

[root@ycy ~]# cd /usr/local/src/webvirtmgr/
[root@ycy webvirtmgr]# python manage.py syncdb
//省略其中一部分
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: admin@example.com  //设置超级管理员邮箱
Password:     //设置超级管理员密码
Password (again):    //再次输入确认超级管理员密码
Superuser created successfully.
Installing custom SQL ...
Installing indexes ...
Installed 6 object(s) from 1 fixture(s)

9,拷贝web网页到指定目录

[root@ycy webvirtmgr]# mkdir /var/www
[root@ycy webvirtmgr]# cp -r /usr/local/src/webvirtmgr/ /var/www/
[root@ycy webvirtmgr]# chown -R nginx.nginx /var/www/webvirtmgr///生成一对公钥与私钥,由于这里webvirtmgr和kvm服务部署在同一台主机中,所以这里本地信任。如果kvm部署在其他机器上的时候,那么就需要把公钥发送到kvm主机中
[root@ycy webvirtmgr]# ssh-keygen
[root@ycy webvirtmgr]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.100.100

10,配置端口转发

[root@ycy webvirtmgr]# ssh 192.168.100.100 -L localhost:8000:localhost:8000 -L localhost:6080:localhost:60
可以使用ss -antl查看端口情况

11,配置nginx

[root@ycy ~]# cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak
[root@ycy ~]# vim /etc/nginx/nginx.conf
//在server参数中进行修改
删除listen       [::]:80;行
参数server_name行改成server_name  localhost;
删除root         /usr/share/nginx/html;行
在include /etc/nginx/default.d/*.conf;行下添加
location / {root    html;index   index.html index.htm;}

12 ,配置nginx虚拟主机

[root@ycy ~]# 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端口

启动服务:

//确保bind绑定本机的8000端口
[root@ycy ~]# vim /var/www/webvirtmgr/conf/gunicorn.conf.py
//省略多行
bind = '127.0.0.1:8000'  //确保此处绑定的是本机的8000端口,这个在nginx配置中定义了,被代理的端口
backlog = 2048
//省略多行//重启nginx服务,查看端口是否开启
Nginx -t 检查语法有没有错误
[root@ycy ~]# systemctl restart nginx 
Systemctl enable nginx
[root@ycy ~]# ss -antl(保证6080 8000 80启动)

13,设置supervisor

[root@cy ~]# vim /etc/supervisord.conf
//在文件最后添加如下信息
[program:webvirtmgr]
#这里command是一行-c 空格接/var/...
command=/usr/bin/python2 /var/www/webvirtmgr/manage.py run_gunicorn -c /var/www/webvirtmgr/conf/gunicorn.conf.pydirectory=/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@cy ~]# systemctl restart supervisord.service[root@cy ~]# systemctl enable supervisord.service

14,配置nginx用户

[root@ycy ~]# su - nginx -s /bin/bash
-bash-4.2$ ssh-keygen
-bash-4.2$ touch ~/.ssh/config
-bash-4.2$ echo -e "StrictHostKeyChecking=no\nUserKnownHostsFile=/dev/null" >> ~/.ssh/config 
-bash-4.2$ chmod 0600 ~/.ssh/config 
-bash-4.2$ ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.100.40//验证基于密钥认证是否成功
-bash-4.2$ ssh root@192.168.100.40
Warning: Permanently added '192.168.100.40' (ECDSA) to the list of known hosts.
Last login: Fri Sep 30 00:46:32 2022 from cy.example.com
[root@ycy ~]# exitConnection to 192.168.100.40 closed.
-bash-4.2$ exit[root@ycy ~]#
[root@ycy ~]# 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[root@ycy ~]# chown -R root.root /etc/polkit-1/localauthority/50-local.d/50-libvirt-remote-access.pkla
[root@cy ~]# systemctl restart nginx
[root@cy ~]# systemctl restart libvirtd

15,KVM web界面管理

使用浏览器访问192.168.100.40,服务器出现了accept:Too many open files

解决方法:

//修改nginx配置文件
[root@ycy ~]# vim /etc/nginx/nginx.conf
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
worker_rlimit_nofile 655350;   //添加此行//对系统参数进行设置
[root@ycy ~]# vim /etc/security/limits.conf
//在文件最末尾写入
* soft nofile 655350
* hard nofile 655350
//重启服务,重读文件
[root@ycy ~]# sysctl -p
[root@ycy ~]# systemctl restart nginx
//安装novnc,并通过novnc_server启动一个vnc
[root@ycy ~]# yum -y install novnc
[root@ycy ~]# chmod +x /etc/rc.d/rc.local
[root@ycy ~]# vim /etc/rc.d/rc.local
//在最末尾加入如下行
nohup novnc_server 192.168.100.40:5920 &
[root@ycy ~]# . /etc/rc.d/rc.local

16 .用Google Chrome浏览器访问

// 添加连接

//创建虚拟机

1,新建存储

2,上传镜像,使用xftp或者xshell,再或者其他工具,将镜像文件上传到服务器的/kvmdata目录下存放

[root@cy ~]# yum -y install lrzsz

[root@cy ~]# cd /kvmdata/

将CentOS 7镜像拖进来

刷新后就可以看到上传的镜像,在添加镜像

3,添加网络

4,实例管理,现在去创建一个虚拟机

连接:

彩蛋:如果下载github太慢或者进不去。
方法一:可以下载一个FastGithub.UI(免费)
我用夸克网盘给你分享了「fastgithub-win-x64.zip」,点击链接或复制整段内容,打开「夸克APP」即可获取。
/~f72637wl9e~:/
链接:https://pan.quark.cn/s/c6c1e90abe7c
方法二:
进入:https://raw.hellogithub.com/hosts.json 复制内容
粘贴到进入 hosts 用记事本打开
Windows系统C:\Windows\System32\drivers\etc\hosts的hosts
都设置好了就可以快速的访问github了

http://www.xdnf.cn/news/1355635.html

相关文章:

  • 【嵌入式】【搜集】RTOS相关技术信息整理
  • 微信小程序界面常用操作
  • SpringBoot自动装配原理深度解析
  • 电蚊拍的原理及电压电容参数深度解析:从高频振荡到倍压整流的完整技术剖析
  • Trae Solo模式生成一个旅行足迹App
  • 最新短网址源码,防封。支持直连、跳转。 会员无广
  • Azure Kubernetes Service (AKS)
  • 视觉革命:云渲染如何让创意不再受限于硬件
  • qt ElaWidgetTools第一个实例
  • leetcode刷题记录03——top100题里的6道简单+1道中等题
  • H264编解码过程简述
  • 算法 ---哈希表
  • C 语言标准输入输出头文件stdio.h及其常见用法
  • 【KO】前端面试六
  • 【40页PPT】企业如何做好大数据项目的选型(附下载方式)
  • 利用背景图片定位套打档案封面
  • 当AI成了“历史笔迹翻译官”:Manus AI如何破解多语言手写文献的“密码锁”
  • 1200 SCL学习笔记
  • 【Java SE】抽象类与Object类
  • 51单片机-实现外部中断模块教程
  • SpringBoot3整合dubbo3客户端【最佳实践】
  • 编程刷题-染色题DFS
  • 【C标准库】详解<stdio.h>标准输入输出库
  • CUDA和torch的安装
  • 什么是多元线性回归,系数、自变量、因变量是什么,多元线性回归中的线性是什么
  • 多光谱相机检测石油石化行业的跑冒滴漏的可行性分析
  • 【yocto】Yocto Project 配置层(.conf)文件语法详解
  • calchash.exe和chckhash.exe计算pe文件hash值的两个实用小工具
  • 智慧零售漏扫率↓79%!陌讯多模态融合算法在智能收银与货架管理的实战解析
  • 双目密集匹配(stereo dense matching)