系统:
CentOS7
内容:
一、KVM构建和管理
二、virsh控制工具
三、镜像管理
四、虚拟机快建技术
五、离线访问虚拟机
一、KVM构建及管理
1.搭建KVM服务器
1.1 虚拟化概述
- 虚拟化作用:
- 将一套或多套物理资源整合为平台,以软件的方式虚拟出更多可用的计算机资源。
- 虚拟化优势:
- 以一变多,节省成本;资源调度更加灵活,提高效率。
- virtualization资源管理器
- x个物理资源 --> y个逻辑资源
- 实现程度: 完全、部分、硬件辅助(CPU)
- 虚拟化平台─┬─ 虚拟机1 ── RHEL7.5
├─ 虚拟机2 ── CentOS7.2
├─ 虚拟机3 ── Win2012
├─ ...
- 虚拟化主要厂商及产品:
系列 PC/服务器版代表
VMware Workstation、vSphere
Microsoft VirtualPC、Hyper-V
RedHat KVM、RHEV
Citrix Xen
Oracle Oracle VM VirtualBox
1.2 安装KVM
1.2.1 检查系统是否支持虚拟化
- 物理机需要进入BIOS开启
- 虚拟机需要开启虚拟化支持选项"虚拟化Intel VT-x/EPT或AMD-V/RVI"
]# egrep "vmx|smv" /proc/cpuinfo #有输出代表支持虚拟化
# vmx,Intel CPU
# smv,AMD CPU
1.2.2 安装KVM
]# yum -y install qemu-kvm qemu-img virt-manager virt-viewer libvirt libvirt-client \
> libvirt-python
# qemu-kvm : KVM模块
# qemu-img : qemu组件,创建磁盘、启动虚拟机等功能
# qemu-kvm-tools : KVM调试工具
# virt-manager : 虚拟机图形管理工具
# virt-viewer : 虚拟机图形界面查看器
# virt-install : 命令行安装虚拟机
# libvirt : 虚拟机管理工具virsh
# libvirt-client : 虚拟机管理工具客户端
# libvirt-python : 虚拟机管理工具python组件
# python-virtinst : python组件,记录创建VM时的xml文件
# bridge-utils : 网络支持工具
]# lsmod | grep kvm #确认KVM是否安装
kvm_intel 183621 12 #KVM已安装
kvm 586948 1 kvm_intel
irqbypass 13503 19 kvm
1.2.3 启动libvirtd服务
- libvirtd为管理虚拟机提供服务接口
- 调用 dnsmasq ,提供DNS、DHCP等功能
- 建立 virbr0 ,虚拟网络(192.168.122.0/24)
]# systemctl start libvirtd && systemctl enable libvirtd
]# ifconfig virbr0
1.3 配置桥接网卡
1.3.1 查看外网网卡
]# ip a
1.3.2 配置桥接网卡br0
]# cp /etc/sysconfig/network-scripts/ifcfg-ens33 /etc/sysconfig/network-scripts/ifcfg-br0
]# vi /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE=br0
TYPE=Bridge #修改
ONBOOT=yes
NM_CONTROLLED=no #不实时生效
BOOTPROTO=dhcp #使用dhcp
UUID=
1.3.3 重启网卡服务
]# systemctl restart network
2.图形管理KVM平台
2.1 连接本地/远程KVM
- 使用命令 ]# virt-manager
- 【应用程序】-【系统工具】-【虚拟系统管理器】
- 添加连接
- 默认连接本机的libvirtd服务
2.2 管理虚拟网络
- 添加新的虚拟网络
- 【编辑】-【连接详情】-【虚拟网络】-【添加网络】
2.3 新建虚拟机
- 【文件】-【新建虚拟机】
- 根据向导提示创建新虚拟机
- 选择镜像
- 设置CPU/内存
- 设置虚拟机名称/网络
- 查看5900端口是否被监听,KVM虚拟机监听端口会从5900开始逐渐递增
2.4 虚拟机的基本控制
- 虚拟机的运行/关机/克隆/删除/打开
- 配置虚拟机硬件(灯泡)
二、virsh控制工具
1.操作虚拟机
1.1 virsh命令工具介绍
- 提供管理各虚拟机的命令接口
- 支持交互模式,查看、创建、停止、关闭
- 格式:
]# virsh 控制指令 [虚拟机名称] [参数]
]# virsh #进入虚拟化交互式终端,quit退出
1.2 查看虚拟化信息
]# virsh nodeinfo #查看KVM节点(服务器)信息
]# virsh list \[--all|--inactive\] \[--name\] #列出活跃虚拟机,\[全部|不活跃\],\[只输出域名\]
]# virsh dominfo 虚拟机名 #查看指定虚拟机(域)的信息,dominfo=domain info
]# virsh net-list \[--all\] #列出活跃网络,\[全部网络\]
1.3 开关虚拟机操作
]# virsh start|reboot|shutdown 虚拟机名 #启动、重启、关闭 指定虚拟机
]# virsh destroy 虚拟机名 #强制关闭虚拟机,destroy=破坏
]# virsh autostart \[--disable\] 虚拟机名 #指定虚拟机开机自启\[关闭\]
1.4 连接虚拟机
1)图形连接
]# virt-viwer 虚拟机名
2)命令行连接
]# virsh console 虚拟机名 #需要回车一次
- 退出命令行连接: 【ctrl】+【\]】
- 连接卡住的解决办法(在虚拟主机执行):
]# grubby --update-kernel=ALL --args="console=ttyS0"
]# reboot
1.5 虚拟机快照
]# virsh snapshot-create-as 域(虚拟机)名 快照名 #使用一组参数为域创建快照
]# virsh snapshot-list 虚拟机名 #查看虚拟机快照
]# virsh snapshot-revert 域名 快照名 #恢复到虚拟机的快照状态
]# virsh snapshot-delete 域名 快照名 #删除虚拟机的快照
1.6 virsh其它操作
]# virsh domstate 虚拟机名 #查看虚拟机运行状态
]# virsh domblklist 域名 #查看虚拟机块设备
]# virsh domiflist 域名 #查看虚拟机网卡信息
]# virsh -c qemu:///system attach-interface 虚拟机名称 bridge 网桥名称 --model virtio
#添加网卡
- 添加硬盘
]# virsh -c qemu:///system attach-disk 虚拟机名称 虚拟机磁盘文件 sdb \
> --subdriver qcow2 --sourcetype file #
2.xml配置文件
- xml配置文件定义了一个虚拟机的名称、UUID、CPU、内存、虚拟磁盘、网卡等各种参数设置
- 默认位于 /etc/libvirt/qemu/虚拟机名.xml
2.1 xml配置文件
- 查看xml配置文件
]# virsh dumpxml 虚拟机名
- 备份xml配置文件
]# virsh dumpxml 虚拟机名 > 备份名.xml
2.2 编辑xml虚拟机设置
- 对虚拟机的xml配置文件进行调整
]# virsh edit 虚拟机名
#若修改name、uuid、disk、mac,会自动保存为新虚拟机配置
2.3 定义新虚拟机
- 根据修改后的独立xml文件定义新虚拟机
]# virsh define xml文件
#define,定义
2.4 删除虚拟机
- 必要时可去除多余的xml配置文件
- 比如虚拟机改名的情况
- 避免出现多个虚拟机的磁盘或MAC地址冲突
- 删除虚拟机之前,必须先删除虚拟机的快照]# virsh undefine 虚拟机名
#这个操作只会删除xml文件,
#还要到 /var/lib/libvirt/images/ 删除对应的镜像文件
三、镜像管理
1.虚拟机磁盘镜像
1.1 常用的虚拟机磁盘镜像文件格式
┌──────────┬──────┬──────┐
│特点\\类型 │ RAW │QCOW2 │
├──────────┼──────┼──────┤
│ KVM默认 │ 否 │ 是 │
├──────────┼──────┼──────┤
│ I/O效率 │ 高 │ 较高 │
├──────────┼──────┼──────┤
│ 占用空间 │ 大 │ 小 │
├──────────┼──────┼──────┤
│ 压缩 │不支持│ 支持 │
├──────────┼──────┼──────┤
│后端盘复用 │ 不支持│ 支持 │
├──────────┼──────┼──────┤
│ 快照 │ 不支持 │ 支持 │
└──────────┴──────┴──────┘
1.2 创建虚拟机磁盘镜像
- 创建新的虚拟机镜像盘文件
]# qemu-img create -f 镜像盘格式 镜像盘路径/镜像盘名 镜像盘大小 #-f=format
#镜像盘格式:qcow2,随使用而逐渐增加的使用空间,不会超过设置的最大空间
]# qemu-img create -f qcow2 /var/lib/libvirt/images/disk1.qcow2 20G
- 查询镜像盘文件的信息
]# qemu-img info 镜像路径/镜像名
]# qemu-img info /var/lib/libvirt/images/disk1.qcow2
- 镜像盘格式转换
]# qemu-img convert -f 源镜像盘格式 源磁盘名 -O 输出镜像盘格式 输出镜像盘名
]# qemu-img convert -f qcow2 disk1.qcow2 -O raw disk1.raw
1.3 创建、还原、删除快照
- 快照的作用
- 在虚拟机磁盘镜像内记录不同时间点的状态数据备份
- 必要时可将虚拟机恢复到指定的快照 - 快照的基本用法:
]# qemu-ima snapshot -c 快照名 qcow2镜像名 #创建磁盘镜像快照,-c=creates=创建
]# qemu-img snapshot -l qcow2镜像名 #列出磁盘镜像的快照,-l=lists=列表
]# qemu-img snapshot -a 快照名 qcow2镜像名 #恢复镜像的快照,-a=applies=应用
]# qemu-img snapshot -d 快照名 qcow2镜像名 #删除镜像的快照,-d=deletes=删除
四、虚拟机快建技术
1.快建虚拟机的思路
1.1 一台KVM虚拟机的组成:
- xml配置文件:定义虚拟机的名称、UUID、CPU、内存、虚拟磁盘、网卡等各种参数设置
- 磁盘镜像文件:保存虚拟机的操作系统及文档数据,镜像路径取决于xml配置文件中的定义
1.2 快建要点
1)准备一台模板虚拟机(xml配置文件+镜像磁盘)
2)基于磁盘复用技术(COW)快建新虚拟机的磁盘
3)通过调整模板机的配置文件,达成快建新虚拟机的xml配置文件
4)定义新虚拟机
1.3 COW技术原理
- Copy On Write , 写时复制
- 直接映射原始盘的数据内容
- 当原始盘的旧数据有修改时,在修改之前自动将旧数据存入前端盘
- 对前端盘的修改不会写到原始盘
- 前端盘只拥有制成的一瞬间时,原始盘的所有数据内容
2.快建新虚拟机
2.1 准备模板虚拟机
- 模板机的选择: 可以用现有虚拟机,也可以再安装一台新虚拟机
- 模板机的初始化:
- 预装软件、系统优化、关闭SELinux等
- 生产环境可以标记/.unconfigured,方便新虚拟机的配置(相当于出场配置,提示用户初始化)
- 备份好模板磁盘、xml配置文件
- 删除模板机(undefine)
2.2 快速创建qcow2前端盘
- 默认虚拟机磁盘路径: /var/lib/libvirt/images/
]# cd /var/lib/libvirt/images
- 后端盘复用
]# qemu-img create -f qcow2 -b 后端盘(复用盘) 前端盘(新建盘)
]# qemu-img create -f qcow2 -b old.qcow2 new.qcow2
#new复用后端盘old - 对比两盘大小
]# ls -h *.qcow2
-rw-r--r-- 1 root root 198K 12月 9 13:55 new.qcow2
-rw-r--r-- 1 qemu qemu 3.2G 12月 7 11:08 old.qcow2
2.3 配置新虚拟机
- 默认虚拟机xml配置路径: /etc/libvirt/qemu
]# cd /etc/libvirt/qemu
- 拷贝模板机的xml配置文件
- 按需要修改,并据此定义新虚拟机]# cp old.xml new.xml
]# vim new.xml
#必须修改name、uuid、disk、mac,避免冲突 - 定义新虚拟机
]# virsh define new.xml
2.4 新虚拟机的交付使用
- 正常运行快建的新虚拟机
- 检查已经装好的操作系统,登入后与模板机一样
- 用户自行修改主机名/ip地址等参数
2.5 快建虚拟机脚本
]# vim clone.sh
#!/bin/bash
xml_DIR=/etc/libvirt/qemu
img_DIR=/var/lib/libvirt/images
virsh list --all
read -p "请输入 模板机 名:" muban
Mxml=${xml_DIR}/$muban.xml
Mdisk=${img_DIR}/${muban}.qcow2
read -p "请输入 新主机 名:" new
Nxml=${xml_DIR}/${new}.xml
Ndisk=${img_DIR}/${new}.qcow2
virsh dumpxml $Mxml > $Nxml #定义新xml文件
qemu-img create -f qcow2 -b $Mdisk $Ndisk #定义新镜像盘,后端盘复用
sed -ri "s#(<name>)(.*)(</name>)#\\1${new}\\3#" $Nxml #设置主机名
sed -ri "s#(<uuid>)(.*)(</uuid>)#\\1$(uuidgen)\\3#" $Nxml #设置uuid
sed -ri "s#(<source file=').*('/>)#\\1$Ndisk\\2#" $Nxml #设置磁盘
fix_mac=\`awk -F"'" '/mac address/{print $2}' $Nxml | head -1 | cut -b 1-9\`
blk_mac=\`openssl rand -hex 3 | sed 's/\\(..\\)/\\1:/g; s/.$//'\`
mac=${fix\_mac}${blk\_mac} #获取mac地址
sed -ri "s#(<mac address=').*('/>)#\\1${mac}\\2#" $Nxml #设置mac
virsh define $Nxml #定义新虚拟机
五、离线访问虚拟机
1.guestmount工具
- 支持离线挂载raw、qcow2格式虚拟机磁盘
- 可以再虚拟机关机的情况下,直接修改磁盘中的文件
- 方便对虚拟机定制、修复、脚本维护
- 挂载虚拟机磁盘访问
]# yum -y install libguestfs-tools-c #安装guestmount工具
]# guestmount -a 被挂载磁盘路径 -i /挂载点
]# guestmount -d 被挂载域名 -i /挂载点
]# rpm -qa --dbpath /挂载点/var/lib/rpm #查看该虚拟机下的rpm包
]# umount /挂载点 #取消挂载
2.查看虚拟机磁盘信息
]# virt-filesystems --long --parts --blkdevs -h -a 磁盘名
3.磁盘扩容
]# virt-resize --expand /dev/分区名 输入磁盘名 输出磁盘名