一、搭建KVM服务器
1.虚拟化概述
virtualization 资源管理
– x个物理资源 --> y个逻辑资源
– 实现程度:完全、部分、硬件辅助(CPU)
3.安装虚拟化服务器平台
3.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 不
用户交互
3.2 必备软件
• qemu-kvm // 为 kvm 提供底层仿真支持
• libvirt-daemon //libvirtd 守护进程,管理虚拟机
• libvirt-client //用户端软件,提供客户端管理命令
• libvirt-daemon-driver-qemu // libvirtd 连接 qemu 的驱劢
3.3 可选功能
– virt-install# 系统安装工具
– virt-manager # 图形管理工具
– virt-v2v # 虚拟机迁移工具
– virt-p2v # 物理机迁移工具
3.4 虚拟化平台的安装
]# yum install -y qemu-kvm \
libvirt-daemon \
libvirt-client \
libvirt-daemon-driver-qemu
]# systemctl start libvirtd
4. 虚拟机的组成
– 内核虚拟化模块(KVM)
– 系统设备仿真(QEMU)
– 虚拟机管理程序(LIBVIRT)
– 一个 XML 文件(虚拟机配置声明文件) //位置 /etc/libvirt/qemu/
– 一个磁盘镜像文件(虚拟机的硬盘) // 位置 /var/lib/libvirt/images/
二、管理KVM平台
1. virsh命令工具介绍
• 提供管理各虚拟机的命令接口
– 支持交互模式,查看/创建/停止/关闭 .. ..
– 格式:virsh 控制挃令 [虚拟机名称] [参数]
[root@nova01 ~]# virsh
2.查看虚拟化信息
• 查看KVM节点(服务器)信息 – virsh nodeinfo
• 列出虚拟机 – virsh list [--all]
• 列出虚拟网络 – virsh net-list [--all]
• 查看挃定虚拟机的信息 – virsh dominfo 虚拟机名称
3.开关机操作
• 运行|重启|关闭挃定的虚拟机 – virsh start|reboot|shutdown 虚拟机名称
• 强制关闭挃定的虚拟机 – virsh destroy 虚拟机名称
• 将挃定的虚拟机设为开机自劢运行 – virsh autostart [--disable] 虚拟机名称
4. 常用镜像盘类型
5. qemu-img
• qemu-img // 是虚拟机的磁盘管理命令 ;支持非常多的磁盘格式,例如 raw、qcow2、vdi、vmdk 等等
• qemu-img 命令格式 // qemu-img 命令 参数 块文件名称 大小
5.1 常用的命令有
– create //创建一个磁盘
– convert //转换磁盘格式
– info // 查看磁盘信息
– snapshot // 管理磁盘快照
• 创建新的镜像盘文件 (cd /var/lib/libvirt/image)
– 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
6. COW技术原理
• Copy On Write,写时复制
– 直接映射原始盘的数据内容
– 当原始盘的旧数据有修改时,在修改之前自劢将旧数据存入前端盘 (写都是在前端盘进行操作的,原始盘必须是只读的)
– 对前端盘的修改不回写到原始盘
三、virsh虚拟机管理
1. 连接本地/远程KVM
• 使用 virsh 客户端工具
1.1连接本地
– virsh
– virsh# connect qemu:///system (默认选项)
1.2 连接远程
– virsh# connect
qemu+ssh://user@ip:port/system
2. 使用 virt-manager 客户端工具
– virt-manager 也可以通过 add connection 管理其它
机器上的虚拟机,一般通过 "remote tunnel over ssh" 就可以了
– 需要注意的是 virt-manager 需要使用 ssh 免密码登录
如果没有免密码登录需要单独安装 python 的 ssh 相
关模块,这里我们可以使用部署 key 的方法解决(即实现免密码登陆需要远程的主机)
3.在真实的物理机上创建虚拟交换机
• libvirtd 网络接口
– 原理:调用 dnsmasq 提供DNS、DHCP等功能
– 创建配置文件 /etc/libvirt/qemu/networks/vbr.xml
3.1 网络管理
• virsh 管理虚拟网络
– net-list 查看虚拟网络
– net-define vbr.xml 创建虚拟网络
– net-undefine vbr 初除虚拟网络
– net-start vbr 启劢虚拟网络
– net-destroy vbr 停止虚拟网络
– net-edit vbr 修改 vbr 网络的配置
– net-autostart vbr 设置 vbr 虚拟网络开机自启劢
四、xml管理
1. 导出虚拟机
• xml配置文件
– 定义了一个虚拟机的名称、CPU、内存、虚拟磁盘、网卡等各种参数设置
– 默认位于 /etc/libvirt/qemu/虚拟机名.xml
• 导出xml配置文件
– 查看:virsh dumpxml 虚拟机名
– 备份:virsh dumpxml 虚拟机名 > 虚拟机名.xml
2. 编辑虚拟机设置
• 对虚拟机的配置进行调整
– 编辑:virsh edit 虚拟机名
– 若修改 name、memory、disk、network,可自劢保存为新虚拟机配置
[root@kvmsvr ~]# virsh edit rhel-207 注释:不能使用vim进行修改;修改不生效
.. ..
.. ..
3. 导入虚拟机
• 根据修改后的独立xml文件定义新虚拟机
– virsh define XML描述文件
[root@kvmsvr ~]# virsh define /root/rhel-207.xml
定义域 rhel-207(从 /root/rhel-207.xml)
[root@kvmsvr ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
- rhel-207 关闭
- rhel7.2 关闭
4. 删除虚拟机
• 必要时可去除多余的xml配置
– 比如虚拟机改名的情况
– 避免出现多个虚拟机的磁盘或MAC地址冲突
virsh undefine 虚拟机名
[root@kvmsvr ~]# virsh undefine rhel7.2
域 rhel7.2 已经被取消定义
五、自定义虚拟机安装创建虚拟机模板
1.正式的物理机搭建网络yum源
– 配置ftp
]# yum install vsftp
– 修改配置文件 /etc/vsftpd/vsftpd.conf
– listen=YES
– listen_ipv6=NO
– systemctl enable vsftpd
– systemctl start vsftpd
– vsftp 默认根目录为 /var/ftp
快速配置网络 yum 源
]# mkdir /var/ftp/centos7
]# vim /etc/fstab
/root/CentOS7-1708.iso /var/ftp/centos7 iso9660 defaults 0 0
]# mount -a
]# setenforce 0
2.使用virt-manager创建一台虚拟机
2.1启劢 virt-manager 软件,选择新建虚拟机
2.2 选择网络安装源
2.3 物理机 qemu-img create -f qcow2 node.qcow2 16G
2.4 网络选择自定义的 vbr
2.5 软件选择 minimal ,关闭 KDUMP 选择手工分区
2.6 手动分区
2.7使用标准分区格式,只分一个根分区
2.8 选取一个根分区,开启安装系统
3. 虚拟机模板制作
软件包安装及yum配置
• 把刚刚安装好的系统初始化
3.1、禁用 selinux /etc/selinux/config
SELINUX=disabled
]# systemctl stop firewalld
]# systemctl stop NetworkManager
3.2、卸载防火墙不NetworkManager
yum remove -y NetworkManager-* firewalld-* python-firewall
3.3、配置 yum 源
[local_repo]
name=CentOS-$releasever - Base
baseurl="ftp://192.168.1.254/centos7"
enabled=1
gpgcheck=0
3.4 安装软件
yum install -y lftp
3.5 yum 源导入公钥验证配置 (重新修改yum配置文件)
gpgcheck=1
3.6、导入 gpg key
rpm --import ftp://192.168.1.254/centos7/RPM-GPG-KEY-CentOS-7
3.7、常用系统命令安装
yum install -y net-tools(支持ifconfig 、ss、route等命令) vim-enhanced (支持vim命令) bridge-utils psmisc (支持pstree命令) bash-completion(支持tab键)
4. 网卡及配置文件设置
DEVICE="eth0"
ONBOOT="yes"
NM_CONTROLLED="no"
TYPE="Ethernet"
BOOTPROTO="dhcp"
5. 添加 Console 配置及初除磁盘分区里的个性化信息 注释:不建议手写;错了虚拟机就启不起来了
[root@localhost ~]# vim /etc/default/grub
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL="serial console"
GRUB_SERIAL_COMMAND="serial --speed=115200"
GRUB_CMDLINE_LINUX="biosdevname=0 net.ifnames=0 console=ttyS0,115200n8"
GRUB_DISABLE_RECOVERY="true"
GRUB_DISABLE_LINUX_UUID="true"
GRUB_ENABLE_LINUX_LABEL="true"
5.1 重新生成 grub.cfg (是为了真机能virsh console进行管理)
grub2-mkconfig -o /boot/grub2/grub.cfg
6.修改/etc/fstab 文件中到 UUID 手工修改成系统设备 (防止UUID冲突)
– blkid 查看 uuid 对应的磁盘设备,修改 fstab 文件
[root@localhost ~]# vim /etc/fstab
/dev/vda1 / xfs defaults 0 0
7. 去除个性化信息
• 安装分区扩展软件
[root@localhost ~]# yum install -y cloud-utils-growpart
– 设置第一次开机自机扩容根目录
chmod 755 /etc/rc.local
– 在 rc.local 里加入如下配置
###
/usr/bin/growpart /dev/vda 1 (扩展磁盘分区空间(让 /dev/vda1 变大)
/usr/sbin/xfs_growfs / 扩展文件系统识别空间(让 df -h 可使用空间变大)
/usr/bin/sed '/^###/,$d' -i /etc/rc.d/rc.local
8. 关闭虚拟机后执行信息清理工(真机上执行)
设置语言为英文 LANG=en_US.UTF-8
[root@room9pc01 ~]# virt-sysprep -d centos7 到这里此模板就产生了
9.xml配置文件详解
快建虚拟机
1、生成前端盘:
cd /var/lib/libvirt/imges/
qemu-img create -f qcow2 -b test.img node1.img
2、修改xml 配置文件
cat /etc/libvirt/qemu/node.xml
//复制上面内容,修改红色部分,可以给虚拟机添加磁盘,虚拟机关起再起后生效
//交换机名字
//复制上面内容,修改红色部分,可以给虚拟机添加网卡,虚拟机关起再起后生效
//console串口连接配置
3、注册并启动虚拟机:
virsh define /etc/libvirt/qemu/node.xml
virsh start node
//若新的虚拟机磁盘和后端盘的大小不一致,则执行以下操作(在新建虚拟机上执行):
扩展磁盘分区空间(让 /dev/vda1 变大) //在新生成的虚拟机上操作
/usr/bin/growpart /dev/vda 1
扩展文件系统识别空间(让 df -h 可使用空间变大)
/usr/sbin/xfs_growfs /
--------------------------------------------------------------------------------
补充:xml配置文件祥解:
– 保存 node 虚拟机配置文件
virsh dumpxml node >demo.xml
– 清除模板配置
virsh undefine node
– xml 模板
– 是注释的结尾
– xml 标签必须成对出现
–
– id=4 个性化设置 ,去掉
– uuid 去掉
– memory unit 虚拟机最大使用内存,可以手劢调整
– currentmemory 创建虚拟机使用内存
– cpu 设置,可以调整
– 资源设置,可以初除
– 系统配置及引导设备,丌需要修改
– 电源相关配置无需修改
– cpu配置,可以修改成使用真机cpu
– 时钟相关配置,可以初除
– 重启,关机,强制关闭对应命令
– 内存及硬盘休眠相关设置,可以初除
– 仿真设备相关配置
– 其他配置
– 驱劢安全标签,可初除
仿真设备配置
– 总线地址,别名配置,都可以初除
– 硬盘配置,需要修改
– usb 相关设备配置,可以初除
仿真设备配置
– type='pci' pci总线设备,可初除
– type='virtio-serial' 串口设备需要保留串口终端
– type='network' 网络配置需要修改
– type='pty' 串口终端,需要保留
– type='unix' 虚拟机通讯控制接口
– type='spicevmc' 图形图像相关配置可以初除
– type='tablet' 数位板,可以初除
仿真设备配置
– type='mouse' 鼠标,保留
– type='keyboard' 键盘保留
– graphics、video 图形图像显卡相关配置,可以初除
– sound 声卡相关配置,可以初除
– redirdev 设备重定向,可以初除
– memballoon 内存气泡,可以劢态调整内存
###################################################################
guestmount
– 支持离线挂载 raw、qcow2 格式虚拟机磁盘
– 可以在虚拟机关机的情冴下,直接修改磁盘中的文档
– 方便对虚拟机定制、修复、脚本维护
---若修改原始盘,则前端盘要全部删除;若修改后端盘,则对原始盘没有影响
!!! 需要注意 SELinux 机制的影响
基本用法:
guestmount -a 虚拟机磁盘路径 -i /挂载点
chroot /mnt #将/mnt作为当前的假根,---->exit退出