KVM笔记

张开发
2026/5/23 16:05:49 15 分钟阅读
KVM笔记
第一章 概述1.1 云计算是一种基于互联网的计算方式, 通过这种方式来共享软硬件资源, 可以按照需求分配各种软硬件资源1.2 云计算服务模型1.2.1 SaaS模型概念: 云厂商直接提供给用户软件服务, 用户不必维护软件本身, 只需要使用软件提供的服务1.2.2 PaaS模型概念: 云厂商提供给用户软件运行环境, 用户负责维护自己的软件来提供服务, 但不需要维护网络, 硬件以及操作系统1.2.3 IaaS模型概念: 云厂商仅提供给用户一个虚拟的主机环境, 用户负责在环境上维护自己的操作系统, 网络, 服务等资源第二章 虚拟化技术2.1 虚拟化概念: 将计算机的各种实体资源进行重组与分割, 来提高对硬件资源的利用率作用: 一个物理机可以安装多个虚拟机, 每个虚拟机的资源都是独立的, 以此来提高资源利用率2.2 虚拟化技术2.2.1 半虚拟化虚拟机监视器不完全模拟硬件, 虚拟机中的操作系统知道自己是虚拟的2.2.2 全虚拟化虚拟机监视器完全模拟整套硬件, 虚拟机中的操作系统不知道自己是虚拟的注意:全虚拟化: 不用更改系统内核, 兼容行好, 性能差半虚拟化: 需要更改系统内核, 性能好, 兼容性差2.3 虚拟技术的组成硬件: 将硬件资源虚拟成多分, 并隔离使用, 是虚拟化技术的载体VMM(虚拟机监视器): 负责管理, 调度以及虚拟机的隔离虚拟机: 拥有虚拟的硬件资源, 每套硬件资源之间是隔离的, 可以独立安装操作系统虚拟网络: 是虚拟机与虚拟机, 虚拟机与外网通信的关键, 有桥接, net, vhost模式虚拟机管理平台: 统一管理集群, 宿主机与虚拟机第三章 KVM3.1 KVM概念KVM是采用全虚拟化技术实现的虚拟化, 基于linux内核原生的虚拟化技术3.2 KVM的三大组件KVM内核模块: 对CPU与内存进行虚拟化, 嵌入linux内核, 将普通Linux变成虚拟化管理程序QEMU用户态: 对IO设备进行虚拟化, 也可配合virtio驱动实现半虚拟化libvirt管理工具: 统一封装KVM, 提供virsh命令, 与虚拟机管理的图形化界面注意:在KVM中, 一个虚拟机是一个Linux进程, 进程的名称是qemu-kvmKVM是实现虚拟机的技术, 虚拟机是KVMQEMU的实例3.3 KVM的网络模式3.3.1 NET模式原理: 虚拟机共享宿主机IP, 通过宿主机的NET转发, 实现上网特点: 虚拟机在私有网段, 可访问外网, 但不能被外网直接访问3.3.2 桥接模式原理: 虚拟机通过网桥直接连接到宿主机的物理网卡, 与宿主机在同一个局域网特点: 虚拟机有独立的公网ip与局域网ip3.3.3 仅主机模式3.4 基于桥接模式创建KVM虚拟机3.4.1 安装QEMU虚拟化工具#使用git下载虚拟化工具 git clone https://gitee.com/mirschao/kvmvirtual.git #安装虚拟化工具 bash ./kvmvirtual/installer/deploy.sh 3.4.2 配置桥接模式网络 Bash #配置桥接网卡, 将物理网卡桥接到桥接网卡 vim /etc/sysconfig/network-scripts/ifcfg-br0 DEVICEbr0 #网桥设备名称 NAMEbr0 #网络连接名称 BOOTPROTOstatic #静态IP ONBOOTyes #开机自启 TYPEBridge #桥接网卡 IPADDR192.168.255.130 GATEWAY192.168.255.2 NETMASK255.255.255.0 DNS18.8.8.8 DEFROUTEyes #将桥接网卡设置为默认路由 #配置物理网卡 vim /etc/sysconfig/network-scripts/ifcfg-ens33 DEVICEens33 NAMEens33 BOOTPROTOnone #对外ip由网桥承担 NM_CONTROLLEDno #禁用networkmanager管理 ONBOOTyes TYPEEthernet #以太网 BRIDGEbr0 #将ens33桥接到br0 DEFROUTEyes IPV4_FAILURE_FATALyes #重启网络配置 systemctl restart network #查看网桥状态 brctl show #查看br0网卡配置 ip addr show br0 3.4.3 基于KVM创建虚拟机 YAML #使用qeum的创建工具, 创建一个20G的磁盘, 磁盘格式为raw qemu-img create -f raw /kvm/vdisks/tmplate.raw 20G #安装centos7虚拟机, 名称为template virt-install --nametemplate\ #虚拟机cpu2个, 内存2G, 磁盘是template.raw --vcpus2 --memory2048 --disk/kvm/vdisks/template.raw\ #安装的镜像为最小化centos7 --cdrom./kvm/isos/CentOS-7-x86_64-Minimal-2009.ios --os-variantrhel7\ #虚拟机网络为桥接模式 --network bridgebr0\ #使用VNC图形界面工具, 并且允许任意IP的5900端口进行访问 --graphics vnc,listen0.0.0.0,port5900 #查看虚拟机列表 virsh list #查看虚拟机详细信息 virsh dump template | grep -A5 bridge #测试VNC端口是否可以访问 telnet 192.168.255.130 5900 #宿主机打开VNC工具, 访问虚拟机 宿主机ip:5900 第四章 KVM生命周期管理 4.1 KVM上虚拟机进程管理 1. 关闭虚拟机 YAML virsh shutdown 虚拟机名称 2. 虚拟机断开电源 YAML virsh destroy 虚拟机名称 3. 开启虚拟机 YAML virsh start 虚拟机名称 4. 重启虚拟机 YAML virsh reboot 虚拟机名称 5. 连接虚拟机 YAML virsh console 虚拟机名称 4.2 虚拟机硬件管理 1. 调整虚拟机内存 YAML virsh edit template #虚拟机最大可使用内存为16G memory unitKiB16000000/memory #当前虚拟机分配内存大小为4G currentMemory unitKiB4000000/currentMemory #重启虚拟机 virsh reboot template #验证 virsh console template free -h 2. 调整虚拟机CPU YAML virsh edit template vcpu placementstatic3/vcpu #重启虚拟机 virsh reboot template #查看cpu virsh console template lscpu | grep CPU(s) 3. 调整虚拟机磁盘 YAML #新增磁盘 #为templat虚拟机创建大小为20G, 格式为raw的磁盘 qemu-img create -f raw /kvm/vidsks/template_data_3.raw 20G #为虚拟机template, 临时挂载磁盘vdb, perisitent永久挂载 virsh attach-disk template /kvm/vidsks/template_data_3.raw vdb --persistent #配置虚拟机xml文件 virsh edit template #在devices标签中, 新增吸盘配置 disk typefile devicedisk #配置磁盘创建方式与类型 driver nameqemu typeraw/ #磁盘文件对应路径 source file/kvm/vdisks/template_data_3.raw/ #磁盘名称vdb target devvdb busvirtio/ address typepci domain0x0000 bus0x00 slot0x07 function0x0/ /disk #重启虚拟机 virsh reboot template #进入虚拟机 virsh console template #查看磁盘 lsblk #对磁盘进行格式化 mkfs -ext4 /dev/vdb #临时挂载 mount /dev/vdb /mnt/vdb #卸载磁盘 #取消挂载 umount /dev/vdb /mnt/vdb #卸载 virsh detach-disk template vdb 4.3 虚拟机快照与克隆管理 YAML #为虚拟机拍摄快照 virsh snapshot-create-as template template-snapshot-$(date%Y%m%d%H%M%S) #恢复快照 virsh snapshot-revert template template-snapshot-年月日时分秒 #删除快照 virsh snapshot-delete template template-snapshot-年月日时分秒 #克隆虚拟机 virsh-clone -o template -n new-template -f /kvm/vdisks/new-template.raw 第五章 web端管理KVM 5.1 安装webvirtcloud 1. 环境准备 YAML sed -ri s/SELINUXenforcing/SELINUXdisabled/w /etc/sysconfig/selinux getenforce 2. 安装依赖 YAML yum -y install epel-relase python3-virtualenv python3-devel libvirt-devel glibc gcc nginx supervisor python3-lxml git python3-libguestfs iproute-tc cyrus-sasl-md5 python3-libguestfs 3. 下载webvirtcloud源码安装包 YAML cd /srv/ git clone https://github.com/retspen/webvirtcloud cd webvirtcloud pip3 install -i https://mirrors.ustc.edu.cn/pypi/web/simple pip -U pip config set global.index-url https://mirrors.ustc.edu.cn/pypi/web/simple pip install -U setuptools virtualenv cp webvirtcloud/settings.py.template webvirtcloud/settings.py # 复制配置模板 virtualenv -p $(which python3) /srv/envs/webvirtcloud # 创建Python3虚拟环境 source /srv/envs/webvirtcloud/bin/activate # 激活虚拟环境 4. 生成密钥并配置Django YAML (webvirtcloud) $ python /srv/webvirtcloud/conf/runit/secret_generator.py # 生成Django SECRET_KEY (webvirtcloud) $ vim /srv/webvirtcloud/webvirtcloud/settings.py # 写入秘钥 SECRET_KEY 生成的秘钥字符串 5. 安装python依赖并初始化数据库 YAML cd /srv/webvirtcloud/ pip install -r conf/requirements.txt # 安装WebVirtCloud的Python依赖 python manage.py makemigrations # 生成数据库迁移文件Django ORM python manage.py migrate # 执行数据库迁移默认使用SQLite无需额外配置 6. 配置supervisor Markdown vim /etc/supervisord.d/webvirtcloud.ini # 配置supervisor管理进程 # [program:webvirtcloud]管理Django服务gunicorn运行 # [program:novncd]管理VNC代理服务实现Web端VNC访问虚拟机 systemctl enable --now supervisord # 启动并开机自启supervisor supervisorctl reload # 重载配置 supervisorctl update # 更新进程配置 supervisorctl restart all # 重启所有进程 supervisorctl status # 检查状态两个进程均为RUNNING则正常 7. 配置nginx YAML cp conf/nginx/webvirtcloud.conf /etc/nginx/conf.d/ # 复制Nginx配置模板 systemctl enable --now nginx # 启动并开机自启Nginx 8. 验证 YAML # 检查supervisor管理的进程必须均为RUNNING supervisorctl status # 检查Nginx状态 systemctl status nginx # 检查libvirt服务WebVirtCloud依赖 systemctl status libvirtd 9. 访问webvirtcloud界面 YAML http://192.168.255.130 账号: admin 密码: admin

更多文章