且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

Day12 KVM构建与管理(Service01)

更新时间:2022-10-13 14:32:50

一、虚拟化概述

1.1 定义

通过X个物理资源生成Y个逻辑资源
系统服务名:libvirtd

1.2 程度

完全
部分
硬件辅助(CPU):主流CPU都集成了虚拟化技术如VT、VD

1.3 虚拟机主要厂商和产品

虚拟化厂商 虚拟化产品
VMware VMware Workstation、vSphere
Microsoft VirtualPC、Hypre-V、Azure
RedHat KVM、RHEV(收费版)
Citrix Xen
Oracle Oracle VM VirtualBox

二、搭建KVM环境

2.1 安装虚拟化软件包组

LANG=en
yum grouplist hidden |grep Virtual #rhel7查看可用的虚拟化相关的软件包组
Virtualization Host
Virtualization Client
Virtualization Hypervisor
Virtualization Platform
Virtualization Tools

yum grouplist hidden |grep Virtual #rhel6查看可用的虚拟化相关的软件包组
Virtualization
Virtualization Client
Virtualization Platform
Virtualization Tools

yum -y group install Virtualization\ Client Virtualization\ Hypervisor Virtualization\ Platform Virtualization\ Tools

2.2 图形桌面上的快捷方式创建

cd /usr/share/applications
cp virt-manager.desktop ~/桌面/

2.3 一台KVM虚拟机的组成

2.3.1 /etc/libvirt/qemu

虚拟机的XML配置文件所在路径。XML配置文件定义虚拟机的名称、UUID、内存、虚拟磁盘、网卡等各种参数设置

2.3.2 /var/lib/libvirt/images

虚拟机的磁盘镜像文件所在路径。磁盘镜像文件用来保存虚拟机的操作系统及文档等数据

三、KVM管理命令

3.1 virt-manager

图形化管理工具

3.2 virsh nodeinfo

查看实体机的CPU、内存等信息

3.3 virsh list [--all]

查看正在运行的虚拟机,--all表示显示所有的虚拟机

3.4 virsh dominfo 虚拟机名

查看虚拟机的详细信息

3.5 virsh autostart [--disable] 虚拟机名

设置开机自动运行虚拟机,--disable表示取消开机自动运行功能

3.6 virsh start|reboot|shutdown 虚拟机名

启动、重启和关闭虚拟机

3.7 virsh destory 虚拟机名

强制关闭虚拟机

3.7 virsh define 虚拟机名.xml

导入虚拟机

3.8 virsh undefine 虚拟机名

删除虚拟机的XML文件,不在KVM管理器里面显示

3.9 virsh dumpxml 虚拟机名 > 新虚拟机名.xml

导出虚拟机的XML文件重定向到新虚拟机的XML文件

3.10 virsh edit 虚拟机名

导出修改再导入虚拟机的XML文件

3.11 virsh snapshot-list 虚拟机名

查看虚拟机现有的快照信息

3.12 virsh snapshot-create-as server nullmail

为server创建快照名为nullmail

3.13 virsh snapshot-delete server --snapshotname 快照名

删除虚拟机快照

3.14 virsh snapshot-edit server --snapshotname 1512630021 --rename nullmail

修改虚拟机快照的名称

3.15 virsh snapshot-revert server --snapshotname nullmail --running

server恢复快照,快照名称为nullmail,恢复后运行虚拟机

3.16 virsh setmem server --size 8192000 --live

在线修改server的使用内存为8192000KB

3.17 virsh setmaxmem server --size 8192000 --config

修改server的最大可用内存为8192000KB,无法在线修改,只能关机后修改,下一次开机后应用该设置

3.18 qemu-img info 虚拟机磁盘镜像文件名

查看镜像的相关信息

3.19 qemu-img create -f qcow2 -b 原始盘 前端盘

四、快速创建虚拟机

4.1 以example为模板生成另外一台虚拟机

virsh destroy example#强制关机example
cd /var/lib/libvirt/images#虚拟机的XML配置文件所在路径
qemu-img info example.qcow2#查看虚拟机磁盘镜像文件的信息
cp example.qcow2 test01.qcow2#拷贝镜像文件
cd /etc/libvirt/qemu#虚拟机的磁盘镜像文件所在路径
cp example.xml test01.xml#拷贝XML配置文件
vim test01.xml
删除两个<channel></channel>标记
修改虚拟机名称、虚拟机磁盘文件、网卡MAC地址、UUID
注意!UUID和网卡MAC地址都是16进制,修改的时候字母只有a~f可用
uuidgen#专业生成UUID的小工具
virsh define /etc/libvirt/qemu/test01.xml#导入test01虚拟机
virsh undefine /etc/libvirt/qemu/test01.xml#删除test01虚拟机

4.2 COW快速创建虚拟机

4.2.1 COW机制的概念

COW(Copy on Write)写(变化)时复制
直接映射原始盘的数据内容,当原始盘的旧数据有修改时,在修改之前将旧数据存入前端盘,对前端盘的修改将不再回写到原始盘
原始盘(后端盘):需要备份的原始数据
增量盘(前端盘):永远储存,在制作前端盘的那一瞬间,原始盘的数据内容
可以这么理解:
假设原始盘的容量很大,创建增量盘需要10分钟。那么在创建增量盘的这10分钟内,一旦原始盘的数据有写操作(修改、删除等),通过COW机制,原始盘会把要操作的数据实体,拷贝到增量盘中,以保证增量盘永远储存,在创建增量盘的那一瞬间原始盘的数据内容

举例来说:
原始盘有1.txt、2.txt、3.txt等文件
创建增量盘的时候,前端盘实际存储的是1.txt、2.txt、3.txt的快捷方式
用户访问增量盘的1.txt的时候,实际查看的是原始盘里面的1.txt的内容
而如果原始盘的1.txt被删除时,会把将删除的1.txt的数据实体而不是快捷方式,拷贝到增量盘。拷贝完毕后。用户再访问增量盘的1.txt的时候,就是查看存储在增量盘里面的数据,不再是原始盘里面的数据,因为原始盘里面以及没有数据了。

4.2.2 磁盘镜像格式分类

RAW:原始数据格式,被rhel7抛弃
QCOW2:rhel7新使用的格式

4.2.3 创建过程

cd /var/lib/libvirt/images/
qemu-img create -f qcow2 -b example.qcow2 test02.qcow2
cd /etc/libvirt/qemu/
cp example.xml test02.xml
vim test02.xml
修改虚拟机名、磁盘镜像名、UUID、MAC地址
virsh define test02.xml#导入test02虚拟机
virsh list --all|grep test02
virsh start test02

五、离线访问虚拟机

5.1 guestmount -a 虚拟机磁盘镜像路径 -i 挂载点

记得关闭SELinux,可以在虚拟机关机的情况下离线修改,但是花费的时间比较长

六、搭建新的教学环境

6.1 要求

资源端:由实体机提供
服务端:虚拟机A
客户端:虚拟机B
用clone-vm7脚本创建两台虚拟机8、9

虚拟机A:
主机名:svr7.tedu.cn
网卡:eth0
IP:192.168.4.7/24
帐号:root
密码:123456
虚拟机B:
主机名:pc207.tedu.cn
网卡:eth0
IP:192.168.4.207/24
帐号:root
密码:123456

yum仓库搭建
yum服务端:实体机
yum客户端:虚拟机

6.2 操作

6.2.1 生成两台虚拟机

实体机:
clone-vm7 8
clone-vm7 9

6.2.2 虚拟机配置主机名和IP地址

虚拟机A:
echo svr7.tedu.cn >/etc/hostname
hostname
nmcli c m eth0 ipv4.method manual ipv4.addresses '192.168.4.7/24' connection.autoconnect yes
nmcli c up eth0
ping 192.168.4.254
虚拟机B:
echo pc207.tedu.cn >/etc/hostname
hostname
nmcli c m eth0 ipv4.method manual ipv4.addresses '192.168.4.207/24' connection.autoconnect yes
nmcli c up eth0
ping 192.168.4.254

6.2.3 Yum仓库搭建

实体机:
systemctl restart httpd
systemctl enable httpd
mkdir -p /var/www/html/rhel7
echo '/ISO/rhel-server-7.2-x86_64-dvd.iso /var/www/html/rhel7 iso9660 defaults 0 0' >>/etc/fstab
tail -1 /etc/fstab
mount -a
firefox http://127.0.0.1/rhel7#验证web服务是否正常
虚拟机A,B:
vim /etc/yum.repos.d/dvd.repo
[dvd]
name=rhel7
baseurl=http://192.168.4.254/rhel7
enabled=1
gpgcheck=0
yum clean all
yum repolist



本文转自 goldwinner 51CTO博客,原文链接:http://blog.51cto.com/355665/2068775,如需转载请自行联系原作者