• 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/
• 提供管理各虚拟机的命令接口
– 支持交互模式,查看/创建/停止/关闭 .. ..
– 格式:virsh 控制指令 [虚拟机名称] [参数]
[root@nova01 ~]# 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] 虚拟机名称
• 虚拟机的磁盘镜像文件格式
• 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
• Copy On Write(写时复制)
– 直接映射原始盘的数据内容
– 当原始盘的旧数据有修改时,在修改之前自劢将旧数据存入前端盘
– 对前端盘的修改不回写到原始盘
连接本地/远程KVM
• 使用 virsh 客户端工具
– 连接本地
– ]#virsh
– virsh# connect qemu:///system (默认选项)
– 连接远程
– virsh# connect qemu+ssh://[email protected]:port/system虚拟机远程管理
[root@room9pc01 ~]# virsh -c qemu+ssh://[email protected]/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
[root@room9pc01 ~]# vim /etc/libvirt/qemu/networks/vbr.xml
vbr
[root@room9pc01 ~]# cd /etc/libvirt/qemu/networks/ #要进入到相关目录里新建虚拟网卡。
[root@room9pc01 network]# virsh
virsh # net-define vbr.xml
从 vbr定义网络vbr.xml
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
[root@room9pc01 images]# ifconfig vbr
vbr: flags=4163 mtu 1500
inet 192.168.3.254 netmask 255.255.255.0 broadcast 192.168.3.255
ether 52:54:00:0d:2f:13 txqueuelen 1000 (Ethernet)
RX packets 6223 bytes 523942 (511.6 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 7985 bytes 54000037 (51.4 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
• 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配置文件
– 定义了一个虚拟机的名称、CPU、内存、虚拟磁盘、 网卡等各种参数设置
– 默认位置: /etc/libvirt/qemu/虚拟机名.xml
• 导出xml配置文件
– 查看:virsh dumpxml 虚拟机名
– 备份:virsh dumpxml 虚拟机名 > 虚拟机名.xml
编辑虚拟机设置
• 对虚拟机的配置进行调整
– 编辑虚拟机配置:virsh edit 虚拟机名
– 若修改 name、memory、disk、network,可自动保存为新虚拟机配置
[root@kvmsvr ~]# virsh edit rhel-207
rhel-207
76d5dc2c-5eef-4e30-8b6c-e58851814f84
.. ..
.. ..
• 根据修改后的独立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 关闭
• 必要时可去除多余的xml配置
– 比如虚拟机改名的情况
– 避免出现多个虚拟机的磁盘戒MAC地址冲突
– virsh undefine 虚拟机名
[root@kvmsvr ~]# 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
• 启动 virt-manager 软件,选择新建虚拟机
• 选择网络安装源
创建后端盘文件
– ]#qemu-img create -f qcow2 node.qcow2 10G //大小没有要求
• 网络选择前面创建的自定义的 vbr (可以连接外网)
–此虚拟机作为后端盘语言选择英语、软件选择 minimal、关闭 KDUMP、 选择手工分区
• 手动分区
• 使用标准分区格式,只分一个根分区
• 选取一个根分区,开启安装系统
系统装完后可以进行初始化操作,见搭建KVM服务器(2)。