virtualization 资源管理:
– x个物理资源 --> y个逻辑资源;
– 实现程度:完全、部分、硬件辅助(CPU)虚拟化.
虚拟化的主要厂商及产品:
VMware--------->VMware Workstation, vSphere
RedHat------------>KVM , RHEV
虚拟机的组成:
– 内核虚拟化模块(KVM)
– 系统设备仿真(QEMU)
– 虚拟机管理程序(LIBVIRT)
– KVM是 linux 内核的模块; 它需要 CPU 的支持,采用硬件辅助虚拟化技术 Intel-VT,AMD-V,内存的相关
如Intel的 EPT 和 AMD 的 RVI 技术;
– QEMU 是一个虚拟化的仿真工具; 通过 ioctl 与内核kvm 交互完成对硬件的虚拟化支持;
– Libvirt 是一个对虚拟化管理的接口和工具; 提供用户端程序 virsh ,virt-install, virt-manager, virt-view 与
用户交互.
虚拟机搭建成功有两个文件:
– 一个 XML 文件(虚拟机配置声明文件) – 位置 /etc/libvirt/qemu/
– 一个磁盘镜像文件(虚拟机的硬盘) – 位置 /var/lib/libvirt/images/
必备软件
• qemu-kvm
– 为 kvm 提供底层仿真支持
• libvirt-daemon
– libvirtd 守护进程,管理虚拟机
• libvirt-client
– 用户端软件,提供客户端管理命令
• libvirt-daemon-driver-qemu
– libvirtd 连接 qemu 的驱动
虚拟化平台的安装:
[root@room9pc01 ~]#yum install -y qemu-kvm libvirt-daemon libvirt-client libvirt-daemon-driver-qemu
[root@room9pc01 ~]#systemctl start libvirtd
virsh 虚拟机管理:
[root@room9pc01 ~]#virsh list //列出所有在运行的虚拟机
[root@room9pc01 ~]#virsh list --all //列出所有的不管是运行状态的还是关闭状态的虚拟机
[root@room9pc01 ~]#virsh start xuniji //打开关闭状态的虚拟机
[root@room9pc01 ~]#virsh shutdown xuniji //关闭打开状态的虚拟机
[root@room9pc01 ~]#virsh destroy xuniji //有些虚拟机通过shutdown无法关闭,可以用destroy
[root@room9pc01 ~]#virsh define /etc/libvirt/qemu/xuniji.xml //根据xml文件创建虚拟机
[root@room9pc01 ~]#virsh undefine xuniji //可以直接通过虚拟机的名字删除虚拟机
[root@room9pc01 ~]#virsh console xuniji //进入虚拟机,这种方法进入,由于本身的设置,太长的文字会出现折行,通常只是在刚创建时使用,设置IP地址,以后SSH远程连接
[root@room9pc01 ~]#virsh edit xuniji //关闭虚拟机,编辑xml文件,可以更改虚拟机的内存,名字,cpu内核数等,且只有这种方式有效,vim只是在第一次使用后端盘创建虚拟机时有效
[root@room9pc01 ~]#virsh autostart xuniji //设置虚拟机的自启动
root@room9pc01 ~]#virsh domiflist xuniji //查看虚拟机的网卡配置信息,例如:接口,类型,源,型号,MAC地址等
root@room9pc01 ~]#virsh domblklist xuniji //查询虚拟机的硬盘信息,一般都是/var/lib/libvirt/images/kvm.img镜像盘
虚拟机扩容:
root@room9pc01 ~]#virsh domblklist xuniji //查出虚拟盘的位置
root@room9pc01 ~]#virsh blockresize --path /var/lib/libvirt/images/kvm.img --size 50G xuniji //blockresize为硬盘扩容, --path 指明给那个盘扩容,指明路径 ,--size 指明要将虚拟机的内存扩大到多少,最后跟上要扩容的虚拟机的名字
root@room9pc01 ~]#virsh console kvm
root@room9pc01 ~]#lsblk //发现真是磁盘大小和根分区的磁盘大小不一致
root@room9pc01 ~]#LANG=C //定义语言为中文,缩写
root@room9pc01 ~]#blkid //查看磁盘文件系统类型
root@room9pc01 ~]#growpart /dev/vda 1 //扩展根磁盘空间,最后的1是固定格式
root@room9pc01 ~]#xfs_growfs / //给新增加的磁盘添加文件系统
root@room9pc01 ~]#lsblk //磁盘大小一致了
root@room9pc01 ~]#df -h //文件系统的大小也改变了,扩容成功
virsh 虚拟网络管理:(与虚拟机类型,只是前加了一个net)
– net-list [--all] 列出虚拟网络
– net-start 启动虚拟交换机
– net-destroy 强制停止虚拟交换机
– net-define 根据 xml 文件 创建虚拟网络
– net-undefine 删除一个虚拟网络设备
– net-edit 修改虚拟交换机的配置
– net-autostart 设置虚拟交换机机自启动
qemu-img命令:
• qemu-img 是虚拟机的磁盘管理命令,支持非常多的磁盘格式,例如raw、qcow2、vdi、vmdk等等
• qemu-img 命令格式
– qemu-img 命令 参数 块文件名称 大小
– 常用的命令有:
– create 创建一个磁盘
– convert 转换磁盘格式
– info 查看磁盘信息
– resize 扩容磁盘空间
root@room9pc01 ~]#qemu-image info /var/lib/libvirt/image/xuniji.img
通过后端存储盘qcow2创建虚拟机:(xml模板存在,qcow2后端盘存在)
root@room9pc01 ~]#qemu-img create -f qcow2 -b /var/lib/libvirt/image/node_base.qcow2 /var/lib/libvirt/images/xuniji.img 30G //-f 代表类型,-b 指的是以那个文件为源创建镜像磁盘,然后就是要创建的虚拟机名字和大小了
root@room9pc01 ~]#cp /var/lib/libvirt/image/.node_base.xml /etc/libvirt/qemu/xuniji.xml
root@room9pc01 ~]#vim /etc/libvirt/qemu/xuniji.xml //更改虚拟机的名字,内存,磁盘名
root@room9pc01 ~]#virsh define /etc/libvirt/qemu/xuniji.xml //定义虚拟机,启来就行了
COW技术原理(qcow2):
Copy On Write,写时复制
– 直接映射原始盘的数据内容
– 当数据有修改要求时,在修改之前自动将旧数据拷贝存入前端盘后,对前端盘进行修改
– 原始盘始终是只读的