理论基础
例子
grub 的内容
ifcfg-eth0 的内容
vbr.xml 的内容
node.xml 参考/etc/libvirt/qemu/目录下的xml
虚拟化概述:
virtualization资源管理
1 x个物理资源—->y个逻辑资源 (不同的虚拟机可以装不同的系统或者不同的版本)
2 实现的程度:完全、部分、硬件辅助(CPU)
虚拟化主要厂商及产品
VMware VMware Workstation、vSphere
Microsoft VirtualPC、Hyper-V
RedHat KVM、RHEV
Citrix Xen
Oracle Oracle VM virtualBox
安装虚拟化服务器平台
KVM(模块)
linux内核的模块,需要CPU的支持,采用硬件辅助虚拟化技术Intel-VT,AMD-V,内存的相关如Intel的EPT和AMD的RVI技术
QEMU(仿真)
虚拟化的仿真工具,通过ioctl与内核kvm交互完成对硬件的虚拟化支持
Libvirt(管理)
虚拟化管理的接口和工具,提供用户端程序virsh,virt-install,virt-manager,virt-view 与用户交互
必备软件说明
qemu-kvm
提供底层仿真技术
libvirt-daemon
libvirtd守护进程,管理虚拟机
libvirt-client
用户端软件,提供客户端管理命令
libvirt-daemon-driver-qemu
libvirtd连接qemu的驱动
可选功能
virt-install 系统安装工具
virt-manager 图形管理工具
virt-v2v 虚拟机迁移工具
virt-p2v 物理机迁移工具
虚拟化平台的安装
yum -y install qemu-kvm libvirt-daemon libvirt-client libvirt-daemon-driver-qemu
systemctl start libvirtd
虚拟机的组成
内核虚拟化模块(KVM)
系统设备仿真(QEMU)
虚拟机管理程序(LIBVIRT)
虚拟机配置声明文件XML文件 位置:/etc/libvirt/qemu/
虚拟机的硬盘 位置:/var/lib/libvirt/images/
管理KVM平台
virsh命令工具
提供管理各虚拟机的命令接口
支持交互模式,查看/创建/停止/关闭…
格式L:virsh 控制指令 [虚拟机名称] [参数]
查看虚拟化信息
查看KVM节点(服务器)信息 (CPU信息,内存大小)
virsh nodeinfo
列出虚拟机(正在运行的虚拟机,所有的虚拟机)
virsh list [–all]
列出虚拟网络(虚拟网卡,网桥)
virsh net-list [–all]
查看指定虚拟机的信息
virsh dominfo 虚拟机名称
运行|重启|关闭指定的虚拟机
virsh start|reboot|shutdown 虚拟机名称
强制关闭指定的虚拟机
virsh destory 虚拟机名称
将指定的虚拟机设为开机自动运行
virsh autostart [–disable] 虚拟机名称
磁盘镜像文件格式
RAW:KVM不默认,I/O效率高,占用空间大,不支持压缩、后端盘复用、快照(假如给50G给这个格式的磁盘,那么这个格式就是50G的大小)
QCOW2:KVM默认,I/O效率较高,占用空间小,持压缩、后端盘复用、快照(假如给这个格式的磁盘50G,那么磁盘的大小是实际使用的大小,不是50G,但是,实际使用不可超过50G,也相当于,是给这个磁盘的大小做一个限制,而不是规定)
qemu-img
1 虚拟机的磁盘管理命令
2 支持非常多的磁盘格式,如:raw,qcow2,vdi,vmdk 等等
3 命令格式
qemu-img 命令 参数 块文件名称 大小
4 常用的命令有
create 创建一个磁盘
convert 转换磁盘格式
info 查看磁盘信息
snapshot 管理磁盘快照
5 创建新的镜像文件盘
qemu-img create -f 格式 磁盘路径 大小
qemu-img create -f qcow2 disk.img 50G
6 查询镜像文件的信息
qemu-img info 磁盘路径
qemu-img info disk.img
7 使用后端模板文件
qemu-img create -b disk.img -f qcow2 disk1.img
8 前后端模版区别
后端模版文件: 根据真实机创建的模版,是通用的那个模版,用它来创建前端模版
前端模版文件: 根据后端模版创建的,创建新的虚拟机时使用的是它(创建新的虚拟机,要先根据后端模版文件创建新的模版,即前端模版,然后利用前端模版和XML文件来创建新的虚拟机)
COW技术原理 Copy On Write :写时复制 (前后端模版工作原理)
1 直接映射原始盘的数据内容
2 当原始盘的旧数据有修改时,在修改之前自动将旧数据存入前端盘
3 对前端盘的修改不回写到原始盘
virsh管理
1 使用virsh连接本地/远程KVM
连接本地
virsh
virsh# connct qemu:///system(默认选项)
连接远程
virsh# connect qemu+ssh://user@ip.xx.xx.xx: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/vir.xml
vbr
网络管理
virsh管理虚拟网络
net-list 查看虚拟网络
net-define vbr.xml 创建虚拟网络
net-undefine vbr 删除虚拟网络
net-start vbr 启动虚拟网络
net-destory 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,可自动保存为新虚拟机配置
3 导入虚拟机
根据修改后的独立xml文件定义新虚拟机
vivirsh define XML描述文件
4 删除虚拟机
必要时可去除多余的xml配置
比如虚拟机改名的情况
避免出现多个虚拟机的磁盘戒MAC地址冲突
virsh undefine 虚拟机名
自定义虚拟机
自定义虚拟机安装
1 配置网络 yum 源
2 virt-manager安装虚拟机
a1 启劢 virt-manager 软件,选择新建虚拟机
b1 选择网络安装源
c1 qemu-img create -f qcow2 node.qcow2 16G
d1 2G内存 2个CPU 选择或创建自定义存储:/var/libvirt/images/node.qcow2
e1 网络选择自定义的 vbr
f1 软件选择 minimal ,关闭 KDUMP,选择手工分区
g1 手动分区 I will configure partitioning
h1 使用标准分区格式,只分一个根分区 standard Partition
i1 选取一个根分区,开启安装系统
虚拟机模板制作
1 把刚刚安装好的系统刜始化
禁用 selinux /etc/selinux/config
SELINUX=disabled
卸载防火墙不NetworkManager
yum remove -y NetworkManager-* firewalld-* python-firewall
配置 yum 源
yum 源导入公钥验证配置,gpgcheck=1
导入 gpg key,rpm –import
ftp://192.168.1.254/centos7/RPM-GPG-KEY-CentOS-7
常用系统命令安装,yum install -y net-tools vim-enhanced bridge-utils psmisc
2 网卡及配置文件设置
初除网络配置里的个性化信息
vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=”eth0”
ONBOOT=”yes“
IPV6INIT=”no”
TYPE=”Ethernet”
BOOTPROTO =”dhcp”
禁用空路由
vim /etc/sysconfig/network
NOZEROCONF=”yes”
3 Console及磁盘分区配置
添加 Console 配置及初除磁盘分区里的个性化信息
vim /etc/default/grub
GRUB_CMDLINE_LINUX=”biosdevname=0 net.ifnames=0
console=ttyS0,115200n8”
GRUB_DISABLE_LINUX_UUID=”true”
GRUB_ENABLE_LINUX_LABEL=”true”
重新生成 grub.cfg
grub2-mkconfig -o /boot/grub2/grub.cfg
/etc/fstab 文件中到 UUID 手工修改成系统设备
blkid 查看 uuid 对应的磁盘设备,修改 fstab 文件
4 去除个性化信息
安装分区扩展软件
yum install -y cloud-utils-growpart
设置第一次开机自动扩容根目录
chmod 755 /etc/rc.local
在 rc.local 里加入如下配置
#
/usr/bin/growpart /dev/vda 1
/usr/sbin/xfs_growfs /
/usr/bin/sed ‘/^###/,$d’ -i /etc/rc.d/rc.local
关闭虚拟机后执行信息清理工作
virt-sysprep -d node
5 虚拟设备管理
XML 配置文件
保存 node 虚拟机配置文件
virsh dumpxml node >demo.xml
清除模板配置
virsh undefine node
centos7.0
8413f30a-c978-4796-a28f-8ba9fe74b759
2097152
2097152
id=4 个性化设置 ,去掉
uuid 去掉
memory unit 虚拟机最大使用内存,可以手劢调整
currentmemory 创建虚拟机使用内存
cpu 设置,可以调整
2
资源设置,可以删除
… …
系统配置及引导设备,不需要修改
电源相关配置无需修改
… …
cpu配置,可以修改成使用真机cpu
————————————————————————
初始化虚拟机
1 修改 /etc/selinux/config
SELINUX=disabled
2 配置网卡配置文件 /etc/sysconfig/network-scripts/ifcfg-eth0
3 停止 firewalld NetworkManager
systemctl stop firewalld
systemctl stop NetworkManager
4 卸载
yum remove -y NetworkManager-* firewalld-* python-firewall
5 重启机器
6 配置 yum 源
[local_repo]
name=CentOS-$releasever – Base
baseurl=”ftp://192.168.1.254/centos7”
enabled=1
gpgcheck=0
7 安装软件
yum provides 命令
yum install 包名
8 验证数字签名
下载 RPM-GPG-KEY-CentOS-7
导入 rpm –import RPM-GPG-KEY-CentOS-7
修改 local.repo gpgcheck=1
使用 yum install lftp lrzsz 验证
9 配置网络,禁用空路由
配置文件 /etc/sysconfig/network
NOZEROCONF=”yes”
网卡配置文件见范例
10 添加串口终端
配置文件 /etc/default/grub
修改内容看范例
修改完成之后创建引导文件
grub2-mkconfig -o /boot/grub2/grub.cfg
11 修改 fstab
blkid
修改 UUID=xxxxxx 为 /dev/xvda1
12 安装分区扩展软件
yum install -y cloud-utils-growpart
扩展磁盘分区空间(让 /dev/vda1 变大)
/usr/bin/growpart /dev/vda 1
扩展文件系统识别空间(让 df -h 可使用空间变大)
/usr/sbin/xfs_growfs /
13 关闭虚拟机,清理信息 (真机)
设置语言为英文 LANG=en_US.UTF-8
virt-sysprep -d 虚拟机名称
14 删除虚拟机定义
virsh undefine centos7.0
15 快速创建虚拟机
例如创建虚拟机 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
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2'/>
<source file='/var/lib/libvirt/images/disk.img'/>
<target dev='vdb' bus='virtio'/>
</disk>
grub 内容
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR=”
(
s
e
d
′
s
,
r
e
l
e
a
s
e
.
∗
(
s
e
d
′
s
,
r
e
l
e
a
s
e
.
∗
,,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”
ifcfg-eth0 的内容
Generated by dracut initrd
DEVICE=”eth0”
ONBOOT=”yes”
NM_CONTROLLED=”no”
TYPE=”Ethernet”
BOOTPROTO=”dhcp”
IPADDR=”192.168.1.50”
PREFIX=”24”
GATEWAY=”192.168.1.254”
vbr.xml 的内容
vbr