虚拟化技术(KVM)
一、KVM网络虚拟化技术
学习目标
-
能够了解半虚拟化驱动工作原理 -
能够下载半虚拟化驱动 -
能够查看主机是否支持半虚拟化驱动 -
能够安装半虚拟化驱动 -
能够通过virt-manager为虚拟机添加网卡 -
能够通过virsh命令为虚拟机添加网卡 -
能够添加四种虚拟网络交换机
1. 为什么使用半虚拟化驱动?
虚拟化层完全模拟出来的网卡
全虚拟化网卡环境中,一个完整的数据包从虚拟机到物理机网卡的路径是:
通过驱动对操作系统进行了修改,即Virtio技术
半虚拟化网卡环境中,虚拟机直接访问虚拟化层,步骤减少:
2.使用半虚拟化驱动方法
http://www.linux-kvm.org/page/WindowsGuestDrivers/Download_Drivers
[root@localhost ~]
[root@localhost ~]
3.查看是否支持半虚拟化驱动
宿主机查看方法
1 [root@localhost ~]
虚拟机查看方法
[root@localhost ~]
[root@localhost ~]
4.设置半虚拟化驱动方法
-
使用virt-manager添加 -
修改域的配置文件
5.添加网卡
1.virt-manager
选择虚拟机直接执行添加网卡操作
2.virsh命令
[root@localhost ~]
[root@localhost ~]
[root@localhost ~]
--type network \
--source default \
--model virtio \
--config
虚拟机查看网卡添加情况
[root@smartgo_01 ~]
6.虚拟网络交换机
1. NAT mode (Network Address Translation)
Host configuration
1.1 查看虚拟网络
[root@localhost ~]
[root@localhost ~]
[root@localhost ~]
[root@localhost ~]
[root@localhost ~]
[root@localhost ~]
1.2 查看防火墙状态
1.3创建虚拟网络(虚拟网络交换机)
1.4 查看虚拟网络(虚拟网络交换机或虚拟网桥)
1 [root@localhost ~]
Guest virtual machine configuration
1.1 virt-manager
1.2 virsh命令行修改配置文件
[root@localhost ~]
<interface type='network'>
<mac address='52:54:00:xx:xx:xx'/>
<source network='smartgonet1'/>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
1.3 通过配置文件创建网络
[root@localhost ~]
/etc/libvirt/qemu/networks/smartgonet2.xml
[root@localhost ~]
[root@localhost ~]
[root@localhost ~]
[root@localhost ~]
[root@localhost ~]
[root@localhost ~]
[root@localhost ~]
[root@localhost ~]
2.Bridged mode
所有的虚拟机和宿主机在同一个子网内,桥工作在OSI的 2 层,不需要ip_forward Host configuration
1. 停用NetworkManager
[root@localhost ~]
[root@localhost ~]
2. 创建桥
方法一:virt-manager
方法二:配置文件
方法三:virsh
[root@localhost ~]
方法四:brctl (临时)
[root@localhost ~]
[root@localhost ~]
[root@localhost ~]
[root@localhost ~]
[root@localhost ~]
方法一具体步骤:
Guest virtual machine configuration
1. 客户机配置文件 <offline>
[root@localhost ~]
<interface type='bridge'>
<source bridge='br1'/>
</interface>
2. 查看是否生效
[root@localhost ~]
参考:手动配置bridge
[root@localhost ~]
DEVICE=br0
TYPE=Bridge
BOOTPROTO=none
IPADDR= 192.168.0.230
PREFIX= 24
GATEWAY= 192.168.1.254
DNS1= 8.8.8.8
ONBOOT=yes
DELAY=0
STP=on
DHCP:
DEVICE=br0
ONBOOT=yes
TYPE=Bridge
BOOTPROTO=dhcp
STP=on
DELAY= 0
将物理接口桥接到br0
[root@localhost ~]
DEVICE=eth0
ONBOOT=yes
BRIDGE=br0
3.Routed mode
当使用路由模式时,所有的虚拟机在他们自己的子网中,通过虚拟交换机路由。路由模式在OSI网络模型中的第三层运行。
4.Isolated mode
二、KVM存储虚拟化配置
学习目标
-
能够通过virt-manager添加硬盘 -
能够通过virsh添加硬盘 -
能够通过XML文件添加硬盘 -
能够了解本地存储的作用 -
能够设置本地存储 -
能够了解网络存储的作用 -
能够设置网络存储
1.热添加硬盘
方法一:
[root@localhost ~]
[root@localhost ~]
[root@localhost ~]
[root@localhost ~]
[root@localhost ~]
[root@localhost ~]
[root@localhost ~]
[root@localhost ~]
方法二:基于xml文件
[root@localhost ~]
[root@localhost ~]
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2' cache='writeback'/>
<source file='/disk3.img'/>
<target dev='vdc' bus='virtio'/>
</disk>
[root@localhost ~]
[root@localhost ~]
强制删除:
[root@localhost ~]
[root@localhost ~]
2.存储池管理
2.1 本地存储
Directory-based Disk-based
Partition-based LVM-based
2.2 本地存储查看方法
[root@localhost ~]
[root@localhost ~]
[root@localhost ~]
[root@localhost ~]
[root@localhost ~]
2.3 本地存储添加方法
方法一
选择文件时,文件所有的目录会被自动添加为存储池
方法二
1 [root@localhost ~]
2.4网络存储池
NFS-based GlusterFS-based Ceph-based iSCSI-based GFS-based SAN-based
方法一
使用NFS-based实现存储池
存储端:192.168.1.1
[root@install ~]
[root@install ~]
/home/nfs-storage 192.168.1.0/24(rw,sync,no_root_squash)
KVM主机端: 192 .168.1.2
[root@localhost ~]
Export list for 192.168.1.1:
/home/nfs-storage 192.168.1.0/24
[root@localhost ~]
验证:
[root@localhost ~]
[root@localhost ~]
方法二
virsh pool-define-as
pool-create-as name --print-xml type [source-host] [source-path] [source-dev] [source-name] [<target>] [--source-format format]
[root@localhost ~]
[root@localhost ~]
[root@localhost ~]
[root@localhost ~]
my-pool 本地存储池名称
–target 本地挂载目录
安装虚拟机到存储池my-pool:
[root@localhost ~]
--vnc \
--name=smartgohost \
--ram=512 \
--arch=x86_64 \
--vcpus=1 \
--os-type=linux \
--os-variant=rhel7 \
--hvm \
--accelerate \
--disk path=/home/remote_nfs_192_168_1_1/smartgohost.img,size=8 ,format=qcow2 \
--bridge=virbr0 \
--cdrom=/root/centos7.5.iso
验证
[root@localhost ~]
[root@localhost ~]
方法三
基于XML添加存储池
virsh pool-define *.xml
三、镜像管理
学习目标
-
能够了解KVM虚拟机支持的镜像格式 -
能够使用qemu-img实现镜像创建 -
能够使用qemu-img实现镜像查看 -
能够使用qemu-img实现镜像格式转换 -
能够了解后备镜像作用 -
能够了解差量镜像作用 -
能够基于后备镜像制作差量镜像 -
能够使用差量镜像创建KVM虚拟机 -
能够使用guestfish实现镜像管理
1) QEMU支持的镜像格式
[root@localhost ~]
vmdk VMware镜像格式 vdi VirtualBox镜像格式 raw 简单的二进制镜像文件,一次性占用分配的磁盘空间,支持稀疏文件。 qcow2 copy on write 写时复制技术 第二代的QEMU写时复制格式,QEMU推荐的镜像格式,
支持稀疏文件,支持AES加密,支持基于zlib的压缩,支持snapshot,支持后备镜像稀疏文件就是在文件中留有很多空余空间,留备将来插入数据使用。如果这些空余空间被ASCII码的NULL字符 占据,并且这些空间相当大,那么,这个文件就被称为稀疏文件,而且,并不分配相应的磁盘块。 这样,会产 生一个问题,文件已被创建了,但相应的磁盘空间并未被分配,只有在有真正的数据插入进来时,才会被分配 磁盘块,如果这时文件系统被占满了,那么对该文件的写操作就会失败。为防止这种情况,有两种办法:不产生稀疏文件或为稀疏文件留够空间。 在计算机科学方面,稀疏文件是文件系统中的一种文件存储方式,在创建一个文件的时候,就预先分配了文件需要的连续存储空间,其空间内部大多都还未被数据填充现在有很多文件系统都支持稀疏文件,包括大部分的Unix和NTFS 。 稀疏文件被普遍用来磁盘镜像,数据库快照,日志文件,还有其他科学运用上。
2)QEMU磁盘镜像管理
2.1 创建磁盘镜像
[root@localhost ~]
[root@localhost ~]
2.2 查看磁盘镜像
[root@localhost ~]
[root@localhost ~]
[root@localhost ~]
[root@localhost ~]
2.3 磁盘镜像格式转换
[root@localhost ~]
[root@localhost ~]
[root@localhost ~]
[root@localhost ~]
2.4 磁盘镜像快照管理(qcow2)
[root@localhost ~]
[root@localhost ~]
[root@localhost ~]
[root@localhost ~]
2.5 基于后备镜像转换为差量镜像
多个虚拟机使用的差量镜像(前端镜像)都指向同一个后备镜像,默认从后备镜像读,写则到自己的差量镜像。
后备镜像可以是raw或qcow2,差量镜像只能是qcow2
使用差量镜像的优势:
[root@localhost ~]
[root@localhost ~]
2.6 转换差量镜像为普通镜像
[root@localhost ~]
[root@localhost ~]
作业:利用后备镜像完成多虚拟机创建
3)guestfish磁盘镜像管理
[root@localhost ~]
[root@localhost ~]
[root@localhost ~]
[root@localhost ~]
[root@localhost ~]
[root@localhost ~]
[root@localhost ~]
[root@localhost ~]
四、KVM虚拟机管理
学习目标
-
能够启动KVM虚拟机 -
能够暂停KVM虚拟机 -
能够关闭KVM虚拟机
[root@localhost ~]
[root@localhost ~]
[root@localhost ~]
-o为原始客户机名称
-n 新客户机名称
-f 新客户机的磁盘像文件
1 [root@localhost ~]
1 [root@localhost ~]
1 [root@localhost ~]
1 [root@localhost ~]
[root@localhost ~]
[root@localhost ~]
[root@localhost ~]
[root@localhost ~]
[root@localhost ~]
snapshotname为快照名
五、批量管理虚拟机
学习目标
-
能够为批量管理KVM虚拟机创建虚拟机模板 -
能够编写KVM虚拟机批量管理脚本 -
能够通过虚拟机批量管理脚本实现虚拟机创建等
1.Linux主机模板
-
安装系统 镜像格式: qcow2 磁盘size: 20G 磁盘bus: virtio 网卡model: virtio -
yum install bash-completion -
yum update -
ntp -
yum configure -
firewalld/iptables/selinux systemctl disable firewalld iptables sed -ri ‘/^SELINUX=/cSELINUX=disabled’ /etc/selinux/config -
配置本地console连接 vim /etc/sysconfig/grub GRUB_CMDLINE_LINUX="… console=ttyS0" grub2-mkconfig -o /boot/grub2/grub.cfg -
ssh连接慢的问题 vim /etc/ssh/sshd_config UseDNS no GSSAPIAuthentication no
1 [root@localhost ~]
不要使用该镜像启动系统
2.windows主机模板
-
安装系统 镜像格式: qcow2 磁盘size: 50G 磁盘bus: virtio 网卡model: virtio -
防火墙 3389/tcp icmp -
远程桌面配置 -
取消登录任务配置向导 -
添加SNMP服务 服务器管理器 ——> 功能 ——> 添加功能 ——> SNMP服务 -
配置允许系统在未登录情况下关闭 -
通过系统准备工具移除Windows个性化信息 完成初始化封装后,通过该镜像部署的虚拟机在首次启动时将自动更新SID、主机名及配置。 C:/windows/system32/sysprep/
1 [root@localhost ~]
不要使用该镜像启动系统
3.编写虚拟机批量管理脚本(shell)
步骤 1.准备后端镜像模板 centos7.img 2.创建虚拟机配置文件(name,uuid,disk,mac) 3.创建虚拟机的磁盘文件(差量镜像)
[root@localhost ~]
2 .创建虚拟机的配置文件
[root@localhost ~]
<name>域名称</name>
<uuid>域UUID</uuid>
<source file='域磁盘镜像文件'/>
<mac address='域网卡MAC地址'/>
3 .define虚拟机&&启动虚拟机
[root@localhost ~]
[root@localhost ~]
[root@localhost ~]
[root@localhost ~]
sed -r 's/^(..)(..)(..)(..).*$/\1:\2:\3:\4/')"; echo $vm_mac
以下脚本示例
[root@localhost ~]
workdir=/home
xml=/etc/libvirt/qemu
img=/var/lib/libvirt/images
vmxmlroot=$workdir/vmm
vmdiskroot=$workdir/vmm
menu() {
cat <<- EOF
------------------------------------------
A.部署CentOS7u6系统
B.部署Win2k8r2系统
------------------------------------------
EOF
}
menu
read -p "请选择需要安装的操作系统:" choose
case $choose in
A|a)
read -p "请输入您想使用的域名称:" name
vmname=${name}
vmuuid=$(uuidgen)
vmdisk=${name}.qcow2
vmmac="52:54:$(dd if=/dev/urandom count=1 2>/dev/null | md5sum | sed -r 's/^(..)(..)(..)(..).*$/\1:\2:\3:\4/')"
cp $vmxmlroot/centos7u6/centos7u6.xml $xml/${vmname}.xml
qemu-img create -f qcow2 -b $vmdiskroot/centos7u6/centos7.6.qcow2 $img/${vmdisk} &> /dev/null
sed -ri "s#vmname#${vmname}#" $xml/${vmname}.xml
sed -ri "s#vmuuid#${vmuuid}#" $xml/${vmname}.xml
sed -ri "s#vmdisk#$img/${vmdisk}#" $xml/${vmname}.xml
sed -ri "s#vmmac#$vmmac#" $xml/${vmname}.xml
virsh define $xml/${vmname}.xml
;;
B|b)
echo "win2k8r2已安装完成"
;;
*)
echo "请按菜单选择(A|B)"
esac
virt-manager
只有linux安装,win安装请参考linux安装
1 .创建虚拟机的磁盘文件
六、KVM虚拟化管理平台
学习目标
-
能够了解批量管理虚拟机平台
-
公有云 AWS、Aliyun等等 -
私有云 OpenStack、VM EXSi等
七、扩展阅读
1.X86特权级
https://blog.csdn.net/farmwang/article/details/50094959
|