一、虚拟化所需软件概述
1、KVM /QEMU /LIBVIRTD
– KVM是linux内核的模块,它需要CPU的支持,采用硬
件辅助虚拟化技术 Intel-VT,AMD-V,内存的相关如,Intel的 EPT 和 AMD 的 RVI 技术
– QEMU 是一个虚拟化的仿真工具,通过 ioctl 与内核kvm 交互完成对硬件的虚拟化支持
– Libvirt 是一个对虚拟化管理的接口和工具,提供用户端程序 virsh ,virt-install, virt-manager, virt-view 与用户交互
2、必备软件
• qemu-kvm
– 为 kvm 提供底层仿真支持
• libvirt-daemon
– libvirtd 守护进程,管理虚拟机
• libvirt-client
– 用户端软件,提供客户端管理命令
• libvirt-daemon-driver-qemu
– libvirtd 连接 qemu 的驱动
3、可选功能
– virt-install # 系统安装工具
– virt-manager # 图形管理工具
– virt-v2v # 虚拟机迁移工具
– virt-p2v # 物理机迁移工具
• 虚拟化平台的安装
yum install -y qemu-kvm \
libvirt-daemon \
libvirt-client \
libvirt-daemon-driver-qemu
systemctl start libvirtd #启动服务
4、虚拟机的组成
--- 一个xml 文件(虚拟机配置声明文件)
---位置 /etc/libvirt/qemu/
---一个磁盘镜像文件(虚拟机的硬盘)
---位置 /var/lib/libvirt/images/
二、管理KVM平台
1、virsh命令工具的介绍
---提供管理各虚拟机的命令接口
– 支持交互模式,查看/创建/停止/关闭 .. ..
---格式:virsh 控制指令 【虚拟机名称】【参数】
• 查看KVM节点(服务器)信息
– virsh nodeinfo
• 列出虚拟机
– virsh list [--all] #--all列出所有包括关闭的虚拟机
• 列出虚拟网络
– virsh net-list [--all] #--all列出所有包括不活跃的网络
• 查看指定虚拟机的信息
– virsh dominfo 虚拟机名称
• 运行|重启|关闭指定的虚拟机
– virsh start|reboot|shutdown 虚拟机名称
• 强制关闭指定的虚拟机
– virsh destroy 虚拟机名称
• 将指定的虚拟机设为开机自劢运行
– virsh autostart [--disable] 虚拟机名称
2、常用镜像盘类型
• 虚拟机的磁盘镜像文件格式
3、qemu-img
• qemu-img 是虚拟机的磁盘管理命令
• qemu-img 支持非常多的磁盘格式,例如 raw、qcow2、vdi、vmdk 等等
• qemu-img 命令格式
– qemu-img 命令 参数 块文件名称 大小
– 常用的命令有
– create 创建一个磁盘
– convert 转换磁盘格式
– info 查看磁盘信息
– snapshot 管理磁盘快照
• 创建新的镜像盘文件
– qemu-img create -f 格式 磁盘路径 大小
– qemu-img create -f qcow2 disk.img 50G
• 查询镜像盘文件的信息
– qemu-img info 磁盘路径
– qemu-img info disk.img
• -b 使用后端模板文件
– qemu-img create -b disk.img -f qcow2 disk1.img
4、COW技术原理
• Copy On Write,写时复制
– 直接映射原始盘的数据内容
– 当原始盘的旧数据有修改时,在修改之前自动将旧数据存入前端盘
– 对前端盘的修改不回写到原始盘
三、virsh虚拟机管理
1、连接本地/远程kvm
• 使用 virsh 客户端工具
– 连接本地
– virsh# connect qemu:///system (默认选项)
– 连接远程
– virsh# connect qemu+ssh://[email protected]:port/system
虚拟机远程管理
• 使用 virt-manager 客户端工具
– virt-manager 也可以通过 add connection 管理其它机器上的虚拟机,一般通过"remote tunnel over ssh"就可以了
– 需要注意的是 virt-manager 需要使用 ssh 免密码登录如果没有免密码登录需要单独安装 python 的 ssh 相关模块,这里我们可以使用部署 key 的方法解决
四、创建虚拟交换机
1、 libvirtd 网络接口
– 原理:调用 dnsmasq 提供DNS、DHCP等功能
– 创建配置文件 /etc/libvirt/qemu/networks/public.xml
2、网络管理
• virsh 管理虚拟网络
– net-list 查看虚拟网络
– net-define public.xml 创建虚拟网络 #注意配置文件路径
– net-undefine public 初除虚拟网络
– net-start public 启动虚拟网络
– net-destroy public 停止虚拟网络
– net-edit public 修改 public 网络的配置 #与vim打开用法一样
– net-autostart public 设置 public 虚拟网络开机自启动
五、XML管理
1、 xml配置文件
– 定义了一个虚拟机的名称、CPU、内存、虚拟磁盘、网卡等各种参数设置
– 默认位于 /etc/libvirt/qemu/虚拟机名.xml
2、导出xml配置文件
– 查看:virsh dumpxml 虚拟机名
– 备份:virsh dumpxml 虚拟机名 > 虚拟机名.xml
3、 对虚拟机的配置进行调整
– 编辑: virsh edit 虚拟机名
– 若修改 name、memory、disk、network,可自动保存为新虚拟机配置
4、导入虚拟机
• 根据修改后的独立xml文件定义新虚拟机
– virsh define XML描述文件
[root@kvmsvr ~]# virsh define /root/rhel-207.xml
定义域 rhel-207(从 /root/rhel-207.xml)
5、删除虚拟机
• 必要时可去除多余的xml配置
– 比如虚拟机改名的情冴
– 避免出现多个虚拟机的磁盘戒MAC地址冲突
– virsh undefine 虚拟机名
[root@kvmsvr ~]# virsh undefine rhel7.2
域 rhel7.2 已经被取消定义
六、自定义虚拟机安装
1 、yum 源的安装和配置(网络yum源) #在物理机上操作
光盘作为 yum 源 CentOS7-1708.iso #将光盘挂载到ftp目录下centos7.0
---NOTE:有 repodata 目录的才可以作为 yum 源
2、自定义 yum 源 #需要有rpm包的目录
进入有rpm包的目录执行 createrepo . #创建一个repodata清单目录 ,如果有新rpm包增加可执行更新操作 createrepo --update .
3、virt-manager安装虚拟机
• 启动 virt-manager 软件,选择新建虚拟机
• 选择网络安装源
•创建硬盘文件
– qemu-img create -f qcow2 node.qcow2 16G
•选择创建的磁盘镜像文件
• 网络选择自定义的 public
– 软件选择 minimal ,关闭 KDUMP #安装语言要选择English
– 选择手工分区
• 手动分区
• 使用标准分区格式,只分一个根分区
• 选取一个根分区,开启安装系统
七、虚拟机模板制作
1、软件包安装及yum准备
• 把刚刚安装好的系统刜始化SELINUX=disabled
– 1、禁用 selinux /etc/selinux/config
SELINUX=disabled
– 2、卸载防火墙不NetworkManager
yum remove -y NetworkManager- firewalld- python-firewall
– 3、配置 yum 源
[local_repo]
name=CentOS-$releasever - Base
baseurl="ftp://192.168.1.254/centos7"
enabled=1
gpgcheck=0
– 安装软件
yum install -y lftp
– 1、yum 源导入公钥验证配置
gpgcheck=1
– 2、导入 gpg key
rpm--import ftp://192.168.1.254/centos7/RPM-GPG-KEY-CentOS-7
– 3、常用系统命令安装
yum install -y net-tools #ifconfig 命令 vim-enhanced #vim命令 bridge-utils psmisc #网桥配置工具
yum provides 命令 #可查询命令是由那个软件包提供的
网卡及配置文件设置
• 删除网络配置里的个性化信息
– /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"
ONBOOT="yes“
IPV6INIT="no"
TYPE="Ethernet"
BOOTPROTO ="dhcp"
– 禁用空路由
– /etc/sysconfig/network
NOZEROCONF="yes"
Console及磁盘分区配置
• 添加 Console 配置及初除磁盘分区里的个性化信息
– /etc/default/grub
添加内容如下:
GRUB_CMDLINE_LINUX="biosdevname=0 net.ifnames=0,console=ttyS0,115200n8"
GRUB_DISABLE_LINUX_UUID="true" #以阻止GRUB将传递参数 "root=UUID=xxx" 传递给 Linux
GRUB_ENABLE_LINUX_LABEL="true"
– 重新生成 grub.cfg
grub2-mkconfig -o /boot/grub2/grub.cfg
– /etc/fstab 文件中到 UUID 手工修改成系统设备
blkid 查看 uuid 对应的磁盘设备
修改 UUID=xxxxxx 为 /dev/vda1
去除个性化信息
• 安装分区扩展软件
yum install -y cloud-utils-growpart #设置第一次开机自动扩容根目录
chmod 755 /etc/rc.local
– 在 rc.local 里加入如下配置
###
/usr/bin/growpart /dev/vda 1 NOTE:1前边有空格
/usr/sbin/xfs_growfs / NOTE:/前边有空格
/usr/bin/sed '/^###/,$d' -i /etc/rc.d/rc.local
– 关闭虚拟机后执行信息清理工作
virt-sysprep -d node #物理机上执行
---XML详解virsh dumpxml node >demo.xml
备份虚拟机node的配置文件virsh undefine node
清楚node配置
– xml 标签必须成对出现 如:<keyword> ... ... </keyword>
– memory unit 虚拟机最大使用内存,可以手动调整
– currentmemory 创建虚拟机使用内存
2097152
2097152
– cpu 设置,可以调整<vcpu placement='static'>2</vcpu>
– 资源设置,可以初除<resource> ... ... </resource>
– 系统配置及引导设备,丌需要修改
– 电源相关配置无需修改<features> ... ... </features>
– cpu配置,可以修改成使用真机cpu
– 时钟相关配置,可以删除<clock ... ... </clock>
– 重启,关机,强制关闭对应命令
destroy
restart
destroy
– 内存及硬盘休眠相关设置,可以删除<pm> ... ... </pm>
– 仿真设备相关配置<devices> ... ... </devices>
– 其他配置
– 驱动安全标签,可删除<seclabel> ... ... </seclabel>
• 仿真设备配置
– 总线地址,别名配置,都可以删除
– 硬盘配置,需要修改
/usr/libexec/qemu-kvm
– usb 相关设备配置,可以删除
<controller type='usb'
– type='pci' pci总线设备,可删除
– type='virtio-serial' 串口设备需要保留串口终端
– type='network' 网络配置需要修改
– type='pty' 串口终端,需要保留
– type='unix' 虚拟机通讯控制接口
– type='spicevmc' 图形图像相关配置可以初除
– type='tablet' 数位板,可以初除XML详解
• 仿真设备配置
– type='mouse' 鼠标,保留
– type='keyboard' 键盘保留
– graphics、video 图形图像显卡相关配置,可以删除
– sound 声卡相关配置,可以删除
– redirdev 设备重定向,可以删除
– memballoon 内存气泡,可以动态调整内存
八、快速创建虚拟机
1、例如创建虚拟机 node1
---创建磁盘文件
cd /var/lib/libvirt/images
qemu-img create -b node.img -f qcow2 node1.img 32G
---创建虚拟机配置文件
```sed 's/node/node1/' node.xml >/etc/libvirt/qemu/node1.xml
virsh define /etc/libvirt/qemu/node1.xml
--启动虚拟机
`virsh start node1`
--连接查看虚拟机
`virsh console node1`
--添加网卡
--添加硬盘
cd /var/lib/libvirt/images/
qemu-img create -f qcow2 disk.img 20G
九、配置虚拟机系统有奇招
• 使用 guestmount 工具
– 支持离线挂载 raw、qcow2 格式虚拟机磁盘
– 可以在虚拟机关机的情冴下,直接修改磁盘中的文档
– 方便对虚拟机定制、修复、脚本维护
!!! NOTE: SELinux 机制的影响,后端盘一旦修改,所有前端盘都不可用。
• 基本用法
guestmount -a 虚拟机磁盘路径 -i /挂载点