虚拟化概念
virtualization资源管理
- x个物理资源–>y个逻辑资源
- 实现程度:完全,部分,硬件辅助(CPU)
虚拟化主要厂商及产品
系列 | PC/服务器版代表 |
---|---|
VMware | VMware Workstation,vSphere |
Microsoft | VirtualPC,Hyper-V |
RedHat | KVM,RHEV |
Citrix | Xen |
Oracle | Oracle VM VirtualBox |
安装虚拟化服务器平台
- 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 -y install qemu-kvm libvirt-daemon libvirt-client libvirt-daemon-driver-qemu
systemctl start libvirtd
KVM虚拟机的组成
虚拟机的组成
- 内核虚拟模块(KVM)
- 系统设备仿真(QEMU)
- 虚拟机管理程序(LIBVIRT)
- 一个XML文件(虚拟机配置声明文件)
- 位置/etc/libvirt/qemu/
- 一个磁盘镜像文件(虚拟机的硬盘)
- 位置/var/lib/libvirt/images
管理KVM平台
virsh命令工具介绍
- 提供管理各虚拟机的命令接口
支持交互模式,查看/创建/停止/关闭 … …
格式:virsh 控制命令 [虚拟机名称] [参数]
[root@room9pc01 ~]# virsh nodeinfo //查看服务器节点信息
[root@room9pc01 ~]# virsh list //列出当前已启用的虚拟机
[root@room9pc01 ~]# virsh list --all //列出所有创建的虚拟机
[root@room9pc01 ~]# virsh net-list //列出活跃的虚拟网络
[root@room9pc01 ~]# virsh net-list --all //列出所有的虚拟的网络
[root@room9pc01 ~]# virsh dominfo ip2-5 //查看虚拟机ip2-5的信息
- start|shutdown|reboot 虚拟机启动,停止,重启
- destroy 强制停止虚拟机
- define|undefine 根据 xml 文件 创建/删除 虚拟机
- console 连接虚拟机的 console
virsh 虚拟机管理
- edit 修改虚拟机的配置
- autostart 设置虚拟机自启动
- virsh autostart --disable 取消开机自启
- domiflist 查看虚拟机网卡信息
- domblklist 查看虚拟机硬盘信息
- blockresize --path [绝对路径] --size 50G 虚拟机名称 虚拟机扩容
为某个虚拟机分区扩容(vda1)
(1)创建一台虚拟机并启动
[root@room9pc01 ~]# base-vm vm6
[root@room9pc01 ~]# virsh start vm6
(2)进入该虚拟机,查看虚拟机磁盘大小
[root@room9pc01 ~]# virsh console vm6
[root@localhost ~]# lsblk
[root@localhost ~]# df -h
(3)为该虚拟机磁盘分区vda扩容
1)查看虚拟机磁盘路径
[root@room9pc01 ~]# virsh domblklist vm6
目标 源
------------------------------------------------
vda /var/lib/libvirt/images/vm6.img
2)查看该虚拟机磁盘信息(大小)
[root@room9pc01 ~]# qemu-img info /var/lib/libvirt/images/vm6.img
3)为该虚拟机扩容,虚拟机必须处于开机状态
[root@room9pc01 ~]# virsh blockresize --path /var/lib/libvirt/images/vm4.img --size 50G vm6
(4)扩容分区vda1
[root@localhost ~]# LANG=C //设置虚拟机语言
[root@localhost ~]# growpart /dev/vda 1
(5)刷新分区格式
[root@localhost ~]# xfs_growfs /dev/vda1
virsh 虚拟网络管理
- net-list [–all] 列出虚拟网络
- net-start 启动虚拟交换机
- net-destroy 强制停止虚拟交换机
- net-define 根据 xml 文件 创建虚拟网络
- net-undefine 删除一个虚拟网络设备
- net-edit 修改虚拟交换机的配置
- net-autostart 设置虚拟交换机机自启动
常用镜像盘类型
- 虚拟机的磁盘镜像文件格式
特点\类型 | RAW | QCOW2 |
---|---|---|
KVM默认 | 否 | 是 |
I/O效率 | 高 | 较高 |
占用空间 | 大 | 小 |
压缩 | 不支持 | 支持 |
后端盘复用 | 不支持 | 支持 |
快照 | 不支持 | 支持 |
qemu-img命令
-
qemu-img 是虚拟机的磁盘管理命令,支持非常多
的磁盘格式,例如raw、qcow2、vdi、vmdk等等 -
qemu-img 命令格式
qemu-img 命令 参数 块文件名称 大小
常用的命令有
- create 创建一个磁盘
- convert 转换磁盘格式
- info 查看磁盘信息
- resize 扩容磁盘空间
创建新的镜像盘文件
- 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,写时复制
- 直接映射原始盘的数据内容
- 当数据有修改要求时,在修改之前自动将旧数据拷贝存入前端盘后,对前端盘进行修改
- 原始盘始终是只读的
Virsh管理
创建xml文件
对虚拟机的配置进行调整
- 编辑:virsh edit 虚拟机名
- 若修改 cpu、memory
[root@kvmsvr ~]# virsh edit node0
<domain type='kvm'>
<name>node0</name>
<uuid>7ec0ab09-d9cb-4b19-ad26-813381420260</uuid>
<memory unit='KiB'>1488282</memory>
<currentMemory unit='KiB'>1488282</currentMemory>
<vcpu placement='static'>2</vcpu>
.. ..
对虚拟机的配置进行调整
- 编辑:virsh edit 虚拟机名
- 若修改 磁盘
[root@kvmsvr ~]# virsh edit node0
.. ..
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2'/>
<source file='/var/lib/libvirt/images/node0.img'/>
<target dev='vda' bus='virtio'/>
</disk>
.. ..
对虚拟机的配置进行调整
- 编辑:virsh edit 虚拟机名
- 若修改 网络
[root@kvmsvr ~]# virsh edit node0
.. ..
<interface type='bridge'>
<source bridge='vbr'/>
<model type='virtio'/>
</interface>
.. ..
虚拟机创建
(1)拷贝配置文件
[root@room9pc01 ~]# /var/lib/libvirt/images
[root@room9pc01 images]# cp .node_base.xml /etc/libvirt/qemu/test.xml
(2)创建磁盘文件
[root@room9pc01 images]# qemu-img create -f qcow2 -b .node_base.qcow2 test.img 30G
(3)修改配置文件
... ...
<name>test</name>
... ...
<source file='/var/lib/libvirt/images/test.img'/>
... ...
(4)创建虚拟机,并启动
[root@room9pc01 ~]# virsh define /etc/libvirt/qemu/test.xml
[root@room9pc01 ~]# virsh start test
(5)进入虚拟机
[root@room9pc01 ~]# virsh console test
网卡及配置文件
网络配置文件说明
- /etc/sysconfig/network-scripts/ifcfg-eth0
# Generated by dracut initrd 注释
DEVICE="eth0"
# 驱动名称,与ifconfig 看到的名称一致
ONBOOT="yes"
# 开机启动
NM_CONTROLLED="no"
#不接受 NetworkManager 控制
TYPE="Ethernet"
#类型
BOOTPROTO="static"
#协议(dhcp|static|none)
IPADDR="192.168.1.10"
#IP地址
NETMASK="255.255.255.0" #子网掩码
GATEWAY="192.168.1.254" #默认网关
根分区扩容
-
根分区扩容
设置虚拟机语言
LANG=C
-
查看硬盘设备是否有多余空间
lsblk
-
扩容第一个分区
/usr/bin/growpart /dev/vda 1
-
扩容文件系统
/usr/sbin/xfs_growfs /
-
检查扩容结果
df -h