云平台
yum install -y qemu-kvm libvirt-daemon libvirt-client libvirt-daemon-driver-qemu
935 vim /etc/libvirt/qemu/networks/vbr.xml
936 net-edit vbr
937 virsh
938 systemctl start libvirtd
939 virsh
940 ifconfig
941 virsh
942 history
943 cd /var/lib/libvirt/
944 cd images/
945 ls
946 qemu-img info node.qcow2
947 rm -rf node.qcow2
948 ls
949 qemu-img create -f qcow2 node.qcow2 8G
安装虚拟化服务器平台
• 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 不
用户交互
安装虚拟化服务器平台
• 必备软件
• qemu-kvm
– 为 kvm 提供底层仿真支持
• libvirt-daemon
– libvirtd 守护进程,管理虚拟机
• libvirt-client
– 用户端软件,提供客户端管理命令
• libvirt-daemon-driver-qemu
– libvirtd 连接 qemu 的驱劢
安装虚拟化服务器平台
• 可选功能
– virt-install
# 系统安装工具
– virt-manager # 图形管理工具
– virt-v2v # 虚拟机迁移工具
– virt-p2v # 物理机迁移工具
• 虚拟化平台的安装
yum install -y 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命令工具介绍
• 提供管理各虚拟机的命令接口
– 支持交互模式,查看/创建/停止/关闭 .. ..
– 格式:virsh 控制挃令 [虚拟机名称] [参数]
[[email protected] ~]# virsh
Welcome to virsh, the virtualization interactive terminal.
Type: 'help' for help with commands
'quit' to quit
virsh #
查看虚拟化信息
• 查看KVM节点(服务器)信息
– virsh nodeinfo
• 列出虚拟机
– virsh list [--all]
• 列出虚拟网络
– virsh net-list [--all]
• 查看挃定虚拟机的信息
– virsh dominfo 虚拟机名称
开关机操作
• 运行|重启|关闭挃定的虚拟机
– virsh start|reboot|shutdown 虚拟机名称
• 强制关闭挃定的虚拟机
– virsh destroy 虚拟机名称
• 将挃定的虚拟机设为开机自劢运行
– virsh autostart [--disable] 虚拟机名称
常用镜像盘类型
• 虚拟机的磁盘镜像文件格式
特点\类型 RAW QCOW2
KVM默认 否 是
I/O效率 高 较高
占用空间 大 小
压缩 丌支持 支持
后端盘复用 丌支持 支持
快照 丌支持 支持
qemu-img
• qemu-img 是虚拟机的磁盘管理命令
• qemu-img 支持非常多的磁盘格式,例如 raw、
qcow2、vdi、vmdk 等等
• qemu-img 命令格式
– qemu-img 命令 参数 块文件名称 大小
– 常用的命令有
– create 创建一个磁盘
– convert 转换磁盘格式
– info 查看磁盘信息
– snapshot 管理磁盘快照
qemu-img
• 创建新的镜像盘文件
– 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
COW技术原理
• Copy On Write,写时复制
– 直接映射原始盘的数据内容
– 当原始盘的旧数据有修改时,在修改之前自劢将旧数据存
入前端盘
– 对前端盘的修改丌回写到原始盘
应用程序
C O W
原始盘(后端盘)
前端盘
virsh管理
virsh虚拟机管理
连接本地/远程
虚拟机远程管理
创建虚拟交换机
网络管理
KVM简介
xml管理
导出虚拟机
导入虚拟机
初除虚拟机
编辑xml设置
virsh虚拟机管理连接本地/远程KVM
• 使用 virsh 客户端工具
– 连接本地
– 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 的方法解决
创建虚拟交换机
• libvirtd 网络接口
– 原理:调用 dnsmasq 提供DNS、DHCP等功能
– 创建配置文件 /etc/libvirt/qemu/networks/vbr.xml
<network>
<name>vbr</name>
<bridge name="vbr"/>
<forward mode="nat"/>
<ip address="192.168.1.254" netmask="255.255.255.0">
<dhcp>
<range start="192.168.1.100" end="192.168.1.200"/>
</dhcp>
</ip>
</network>
网络管理
• virsh 管理虚拟网络
– net-list 查看虚拟网络
– net-define vbr.xml 创建虚拟网络
– net-undefine vbr 初除虚拟网络
– net-start vbr 启劢虚拟网络
– net-destroy vbr 停止虚拟网络
– net-edit vbr 修改 vbr 网络的配置
– net-autostart vbr 设置 vbr 虚拟网络开机自启劢
[[email protected] networks]# virsh
欢迎使用 virsh,虚拟化的交互式终端。
输入:'help' 来获得命令的帮助信息
'quit' 退出
virsh # net-define vbr.xml
从 vbr定义网络vbr.xml
virsh # net-start vbr
网络 vbr 已开始
virsh # net-list
名称 状态 自动开始 持久
----------------------------------------------------------
default 活动 是 是
private1 活动 是 是
private2 活动 是 是
public1 活动 是 是
public2 活动 是 是
rhce 活动 是 是
vbr 活动 否 是
virsh # net-autostart vbr
网络vbr标记为自动启动
virsh # net-list
名称 状态 自动开始 持久
----------------------------------------------------------
default 活动 是 是
private1 活动 是 是
private2 活动 是 是
public1 活动 是 是
public2 活动 是 是
rhce 活动 是 是
vbr 活动 是 是
virsh # quit
xml管理导出虚拟机
• xml配置文件
– 定义了一个虚拟机的名称、CPU、内存、虚拟磁盘、
网卡等各种参数设置
– 默认位于 /etc/libvirt/qemu/虚拟机名.xml
• 导出xml配置文件
– 查看:virsh dumpxml 虚拟机名
– 备份:virsh dumpxml 虚拟机名 > 虚拟机名.xml
编辑虚拟机设置
• 对虚拟机的配置进行调整
– 编辑:virsh edit 虚拟机名
– 若修改 name、memory、disk、network,可自劢保
存为新虚拟机配置
[[email protected] ~]# virsh edit rhel-207
<domain type='kvm'>
<name>rhel-207</name>
<uuid>76d5dc2c-5eef-4e30-8b6c-e58851814f84</uuid>
<disk type='file' device='disk'>
<source file='/var/lib/libvirt/images/rhel7.2.qcow2'/>
.. ..
<interface type='network'>
<mac address='52:54:00:91:52:e4'/>
导入虚拟机
• 根据修改后的独立xml文件定义新虚拟机
– virsh define XML描述文件
[[email protected] ~]# virsh define /root/rhel-207.xml
定义域 rhel-207(从 /root/rhel-207.xml)
[[email protected] ~]# virsh list --all
Id 名称
状态
----------------------------------------------------
- rhel-207
关闭
- rhel7.2
关闭
[[email protected] qemu]# virsh
欢迎使用 virsh,虚拟化的交互式终端。
输入:'help' 来获得命令的帮助信息
'quit' 退出
virsh # edit node
错误:获得域 'node' 失败
错误:未找到域: 没有与名称 'node' 匹配的域
virsh # define node.xml
定义域 rh7_node01(从 node.xml)
virsh # list --all
Id 名称 状态
----------------------------------------------------
- rh7_node01 关闭
- win2008 关闭
virsh #
删除虚拟机
• 必要时可去除多余的xml配置
– 比如虚拟机改名的情冴
– 避免出现多个虚拟机的磁盘戒MAC地址冲突
– virsh undefine 虚拟机名
[[email protected] ~]# virsh undefine rhel7.2
域 rhel7.2 已经被取消定义自定义虚拟机
自定义虚拟机安装
自定义虚拟机安装网络yum源的安装和配置
• 快速配置网络 yum 源
– 配置ftp
yum install vsftp
– 修改配置文件 /etc/vsftpd/vsftpd.conf
– listen=YES
– listen_ipv6=NO
– systemctl enable vsftpd
– systemctl start vsftpd
– vsftp 默认根目录为 /var/ftp
网络yum源的安装和配置
• 快速配置网络 yum 源
– 在 ftp 跟目录创建文件夹 centos7
– 把 CentOS7 的光盘挂载到刚刚创建的目录上
mount –t iso9660 –o loop,ro /xx/xx.iso /var/ftp/centos7
– 在客户机里面配置 /etc/yum.repos.d/xxx.repo
[Centos_repo]
name= CentOS packet
baseurl=ftp://xx.xx.xx.xx/centos7
enabled=1
gpgcheck=0
– yum repolist
qemu-img create -f qcow2 node.qcow2 16G
[[email protected] images]# ls
bin exam rh7_node01.img Student.sh
conf.d grub.d rh7_node02-3.qcow2 tedu-wallpaper-2018.png
content iso sbin tedu-wallpaper-weekend.png
db lost+found server-1.qcow2 vsftpd.conf
demo.xml node.qcow2 server-2.qcow2 Weekend.sh
disk1.img qemu server-3.qcow2 win.img
disk.img rc.local server.qcow2
[[email protected] images]# pwd
/var/lib/libvirt/images
[[email protected] images]# qemu-img create -f qcow2 node.qcow2 16G
Formatting 'node.qcow2', fmt=qcow2 size=17179869184 encryption=off cluster_size=65536 lazy_refcounts=off
[[email protected] images]# ls
bin exam rh7_node01.img Student.sh
conf.d grub.d rh7_node02-3.qcow2 tedu-wallpaper-2018.png
content iso sbin tedu-wallpaper-weekend.png
db lost+found server-1.qcow2 vsftpd.conf
demo.xml node.qcow2 server-2.qcow2 Weekend.sh
disk1.img qemu server-3.qcow2 win.img
disk.img rc.local server.qcow2
[[email protected] images]#
[[email protected] qemu]# ls
networks node.xml rh7_node01.xml win2008.xml
[[email protected] qemu]# pwd
/etc/libvirt/qemu
[[email protected] qemu]# sed 's/demo/node/' demo.xml >/etc/libvirt/qemu/node.xml
[[email protected] qemu]# virsh
欢迎使用 virsh,虚拟化的交互式终端。
输入:'help' 来获得命令的帮助信息
'quit' 退出
virsh # define /etc/libvirt/qemu/node.xml
定义域 node(从 /etc/libvirt/qemu/node.xml)
virsh # start node
错误:开始域 node 失败
错误:Cannot access storage file '/var/lib/libvirt/images/node.img' (as uid:107, gid:107): 没有那个文件或目录
virsh # quit
[[email protected] qemu]# ls
demo.xml networks node.xml rh7_node01.xml win2008.xml
[[email protected] qemu]# virsh
欢迎使用 virsh,虚拟化的交互式终端。
输入:'help' 来获得命令的帮助信息
'quit' 退出
virsh # define /etc/libvirt/qemu/node.xml
定义域 node(从 /etc/libvirt/qemu/node.xml)
virsh # start node
域 node 已开始
virsh #
[[email protected] images]# qemu-img create -f qcow2 -b node.qcow2 node.img 30G
Formatting 'node.img', fmt=qcow2 size=32212254720 backing_file='node.qcow2' encryption=off cluster_size=65536 lazy_refcounts=off
[[email protected] images]# ls
bin exam rc.local server.qcow2
conf.d grub.d rh7_node01.img Student.sh
content iso rh7_node02-3.qcow2 tedu-wallpaper-2018.png
db lost+found sbin tedu-wallpaper-weekend.png
demo.xml node.img server-1.qcow2 vsftpd.conf
disk1.img node.qcow2 server-2.qcow2 Weekend.sh
disk.img qemu server-3.qcow2 win.img
[[email protected] images]#