系统:
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/分区名 输入磁盘名 输出磁盘名