常见虚拟化技术
VMware----VMware Workstation
Redhat-----KVM
虚拟化与云计算的关系
虚拟化是一种技术 ,将不可拆分的实体资源变成可以自由化分的逻辑资源,从而实现资源的整合、隔离、在分配
云计算是 利用虚拟化的技术 对外提供的一种服务
虚拟化平台的介绍(KVM)
kvm(Kernel-based Virtaul Machine)
linux内核把kvm的模块放入了内核中,已经编译了进去 ,在之后目前的CPU厂商,集成了虚拟化指令集(硬件支持虚拟化),所以性能也随之提高
1.查看内核模块
lsmod 查看安装了哪些模块
modprobe 加载内核模块名称
rmmod 停止内核模块名
查看硬件是否支持虚拟化
grep "vmx|svm" /proc/cpuinfo
lsmod | grep kvm
KVM是linux内核模块,需要CPU指令集
QEMU是一个虚拟化的仿真工具,通过ioctl与内核模块交互完成对硬件的虚拟化支持
Libvirt 是一个对虚拟化管理的接口和工具 提供命令有virsh virt-manager
2. Linux虚拟化平台安装
yum repolist
yum install -y qemu-kvm \
libvirt-daemon \
libvirt-client \
libvirt-daemon-driver-qemu
systemctl enable --now libvirtd
virsh version
qemu-kvm 提供底层仿真支持
libvirt-daemon libvirtd守护进程 管理虚拟机
libvirt-client 客户端软件提供virsh命令
libvirt-daemon-driver-qemu 连接qemu驱动
网络管理命令virsh
命令 | 说明 |
---|---|
virsh list [--all] | 列出虚拟机 |
virsh start/shutdown | 启动/关闭虚拟机 |
virsh destroy | 强制停止虚拟机 |
virsh define/undefine | 创建/删除虚拟机 |
virsh console | 连接虚拟机的 console |
virsh edit | 修改虚拟机的配置 |
virsh autostart | 设置虚拟机自启动 |
virsh dominfo | 查看虚拟机摘要信息 |
virsh domiflist | 查看虚拟机网卡信息 |
virsh domblklist | 查看虚拟机硬盘信息 |
virsh net-list [--all] | 列出虚拟网络 |
virsh net-start | 启动虚拟交换机 |
virsh net-destroy | 强制停止虚拟交换机 |
virsh net-define | 根据xml文件创建虚拟网络 |
virsh net-undefine | 删除一个虚拟网络设备 |
virsh net-edit | 修改虚拟交换机的配置 |
virsh net-autostart | 设置开机自启动 |
3.创建网桥(交换机)
默认配置文件位置 /etc/libvirt/qemu/networks/vbr.xml
bridge name是ifconfig看到的网卡的名字
ip address是网桥的网关
[root@ecs ~]# vim /etc/libvirt/qemu/networks/vbr.xml
<network>
<name>vbr</name>
<forward mode='nat'/>
<bridge name='vbr' stp='on' delay='0'/>
<ip address='192.168.100.254' netmask='255.255.255.0'>
<dhcp>
<range start='192.168.100.128' end='192.168.100.200'/>
</dhcp>
</ip>
</network>
[root@ecs ~]# yum install -y ebtables iptables dnsmasq
[root@ecs ~]# systemctl restart libvirtd
[root@ecs ~]# virsh net-define /etc/libvirt/qemu/networks/vbr.xml
[root@ecs ~]# virsh net-list --all
[root@ecs ~]# virsh net-start vbr
[root@ecs ~]# virsh net-autostart vbr
[root@ecs ~]# ifconfig vbr # 验证
4.创建虚拟机
host.img(存储磁盘文件,有一个可以启动的操作系统) /var/lib/libvirt/images/xx.img
host.xml(配置文件定义内存cpu网络等)/etc/libvirt/qemu/network/xx.xml
4.1 创建后端盘
4.11(兄弟们不用看,跳过4.11,我留着自己用)这就是镜像模版的制作过程
创建原始磁盘
qemu-img create -f qcow2 disk.img 20G
然后创建系统的时候用它当作硬盘,往里装系统 ,然后关闭虚拟机,把disk.img拷出来
从这开始看创建硬盘(带后端盘的文件)
上传 cirros.qcow2 到虚拟机
下载地址http://donload.cirros-cloud.net/0.4.0/
选择“cirros-0.4.0-x86_64-disk.img"-f 指定格式
-b 指定后端盘
[root@ecs ~]# cp cirros.qcow2 /var/lib/libvirt/images/
[root@ecs ~]# cd /var/lib/libvirt/images/
[root@ecs ~]# qemu-img create -f qcow2 -b cirros.qcow2 vmhost.img 20G
[root@ecs ~]# qemu-img info vmhost.img #查看信息
4.2 虚拟机配置文件
官方文档地址 https://libvirt.org/format.html
定义了虚拟机的设备、例如:CPU、内存、网卡等
[root@ecs ~]# vim /etc/libvirt/qemu/vmhost.xml
02: <name>vmhost</name>
03: <memory unit='KB'>1024000</memory>
04: <currentMemory unit='KB'>1024000</currentMemory>
05: <vcpu placement='static'>2</vcpu>
26: <source file='/var/lib/libvirt/images/vmhost.img'/>
30: <source bridge='vbr'/>
4.3 启动虚拟机
[root@ecs ~]# virsh define /etc/libvirt/qemu/vmhost.xml
Domain vmhost defined from /etc/libvirt/qemu/vmhost.xml
[root@ecs ~]# virsh list --all
Id Name State
----------------------------------------------------
- vmhost shut off
[root@ecs ~]# virsh start vmhost
Domain vmhost started
[root@ecs ~]# virsh console vmhost # 两次回车
Connected to domain vmhost
Escape character is ^]
login as 'cirros' user. default password: 'gocubsgo'. use 'sudo' for root.
cirros login:
退出使用 ctrl + ]
5. 虚拟机磁盘
ROW格式:原始盘不会变,更改体现的前端盘
读:软链接指向写:拷贝后端盘的文件到前端盘去修改
ROW支持特性:
- 弹性压缩
- 快照
- 压缩
- 后端盘复用
创建一个VM需要几步
host.img(存储磁盘文件,有一个可以启动的操作系统)
host.xml(配置文件定义内存cpu网络等)
1.创建虚拟交换机网络 /etc/libvirt/qemu/network/xx.xml
2.创建磁盘管理镜像 存放位置/var/lib/libvirt/images/xx.img
基于后端镜像创建qemu-img create -f qcow2 -b cirros.qcow2 vmhost.img 20G
3.创建虚拟机配置文件 /etc/libvirt/qemu/vmhost.xml
4.创建实例
virsh define /etc/libvirt/qemu/vmhost.xml
脚本创建
1 编写一个脚本用来管理虚拟机,可以完成虚拟机的批量创建、批量删除,自定义虚拟机名称等功能,现有的模板虚拟机信息如下:
- 后端盘模板: /var/lib/libvirt/images/.node_base.qcow2
- 配置文件模板:/var/lib/libvirt/images/.node_base.xml
#!/bin/bash function clone_vm(){ cd /var/lib/libvirt/images qemu-img create -f qcow2 -b cirros.qcow2 ${1}.img 10G sed "s,node_base,${1}," node_base.xml >/etc/libvirt/qemu/${1}.xml virsh define /etc/libvirt/qemu/${1}.xml virsh start ${1} } function del_vm(){ virsh destroy $1 virsh domblklist $1 |awk '$1~/vd*/{print "rm -f",$2}' virsh undefine $1 }