首页 > 技术文章 > kvm 虚拟化

Mercury-linux 2020-04-27 19:35 原文

云计算的服务类型

 

  1. IAAS 基础设施即服务(infrastructure as an service) 虚拟机 ecs openstack

  2. PAAS 平台即服务(platform as an service ) php,java docker容器 +k8s

  3. SAAS 软件即服务(software as an service ) 企业邮箱服务 cdn服务 rds数据库 开发+运维

云计算的分类:

  • 公有云(Public Cloud)

  • 私有云(Private Cloud)

  • 混合云(Hybrid Cloud)

云计算基础kvm虚拟化

什么是虚拟化

虚拟化,通过模拟计算机的硬件,来实现在同一台计算机上同时运行多个不同的操作系统的技术。

 

虚拟化产品的差别

Linux 虚拟化软件:

  • 仿真虚拟化:qemu 软件纯模拟全虚拟化软件,特别慢!兼容性好!

  • 半虚拟化:xen(半) 性能特别好,需要使用专门修改之后的内核,兼容性差!

  • 全虚拟化:redhat 5.5 xen kvm KVM(linux) 全虚拟机,它有硬件支持cpu,基于内核,而且不需要使用专门的内核 centos6 kvm 性能较好,兼容较好

  1. 了解:KVM,即 kernel-based Virtual Machine 基于内核的虚拟机

    KVM,是一个开源的系统虚拟化模块,自Linux 2.6.20 之后集成集成在 Linux 的各个主要发行版本中。它使用 Linux 自身的调度器进行管理,所以相当于 Xen,其核心代码很少。KVM 目前已成为学术界的主流 VMM (虚拟机监控器)之一。KVM 的虚拟需要硬件支持(如 Intel VT 技术 或者 AMD V 技术)。是基于硬件的完全虚拟化。而Xen 早期则是基于软件模拟的 Para-Virtualization

注:虚拟设置一定要勾选上√,否则创建虚拟机时会出现不支持KVM的报错

安装kvm虚拟化管理工具

主机名 ip地址 内存 虚拟机
kvm01 10.0.0.11 4G(后期调整到2G) cpu开启vt虚拟化
kvm02 10.0.0.12 2G

cpu开启vt虚拟化

确定cpu已经支持虚拟化,intel的cpu虚拟化技术叫 vmx,AMD的cpu叫svm

[root@kvm02 ~]# cat /proc/cpuinfo | grep --color vmx
[root@kvm02 ~]# lscpu | egerp Virtualization
Virtualization:        VT-x
Virtualization type:   full

#添加网卡转换功能
vim  /etc/sysctl.conf
net.ipv4.ip_forward=1 #添加这行代码

1. 安装软件:

yum install libvirt virt-install qemu-kvm -y

qemu-kvm:kvm主程序,kvm虚拟化模块

libvirt:虚拟化服务

virt-install:安装虚拟机的使用工具。比如 virt-clone克隆工具就是这个包安装的

2. 查看安装完KVM后的服务:

[root@kvm01 ~]# systemctl start libvirtd 
[root@kvm01 ~]# systemctl enable libvirtd
[root@kvm01 ~]# systemctl is-enabled libvirtd 
enabled

#查看网卡
[root@kvm01 ~]# ifconfig virbr0
virbr0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255
        ether 52:54:00:1e:7c:53  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

安装一台kvm虚拟机

这里我们先安装vnc,后期使用vnc操作kvm虚拟机。

vnc官方下载地址:点击这里

注:建议虚拟机内存不能低于1024M,否则安装系统特别慢

virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name centos7 --memory 1024 --vcpus 1 --disk /opt/centos2.raw,format=raw,size=10 --cdrom /opt/CentOS-7-x86_64-Minimal-1908.iso  --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole

vnc 登录:10.0.0.11:5900 使用命令virsh vncdisplay 主机名查看端口

  • --virt-type kvm 虚拟化的类型(qemu)

  • --os-type=linux 系统类型

  • --os-variant rhel7 系统版本 与centos同源

  • --name centos7 虚拟机的名字

  • --memory 1024 虚拟机的内存

  • --vcpus 1 虚拟cpu的核数

  • --disk /opt/centos2.raw,format=raw,size=10

  • --cdrom /opt/CentOS-7-x86_64-DVD-1708.iso 镜像位置

  • --network network=default 使用默认NAT的网络

  • --graphics vnc,listen=0.0.0.0

  • --noautoconsole

登录视图:

注意事项:

kvm虚拟机virsh日常管理和配置

常用命令:

命令 作用
list 或 list -all 查看列表
start 主机开机 + 虚拟机主机名
shutdown 关闭主机
destroy 拔电源强制关机
reboot 重启
dumpxml 导出虚拟机 virsh dumpxml centos7 >centos7-off.xml
undefine 删除主机--推荐先 destroy 在删除
define 导入配置
domrename 重命名 先关机在修改名字
suspend 挂起
resume 恢复
vncdisplay 查询vnc端口号 virsh vncdisplay web02
autostart 随物理机启动而启动(开机启动)前提:systemctl enable libvirtd

console登录控制台:

#先使用xshell连接虚拟机在粘贴命令
centos7的kvm虚拟机:
grubby --update-kernel=ALL --args="console=ttyS0,115200n8"
reboot

#console登录
virsh console web02
#退出操作
ctrl + ]

1. 修改主机名

当我们修改主机名时也要修改一下磁盘的名字和主机名一致,然后将磁盘文件的名字给修改一下,这里以web01为例子

[root@kvm01 opt]# virsh  list
 Id    Name                           State
----------------------------------------------------
 3     web01                          running

# 关机
[root@kvm01 opt]# virsh destroy web01
Domain web01 destroyed
# 修改主机名
[root@kvm01 opt]# vrish domrename web01 web02
Domain successfully renamed

#修改磁盘名
[root@kvm01 opt]# mv web01.raw web02.raw

#修改配置文件将名字改为web02.raw
[root@kvm01 opt]# virsh edit web02
/disk
      <source file='/opt/web02.raw'/>
[root@kvm01 opt]# virsh dumpxml web02 | grep raw
      <driver name='qemu' type='raw'/>
      <source file='/opt/web02.raw'/>
      <driver name='qemu' type='raw'/>

2. 虚拟机挂起时间同步问题

#挂起命令
virsh suspend web02

#时间同步 是一点一点追回来的
systemctl restart chronyd.service

3. 虚拟机配置文件

虚拟机一共有两个配置文件,一个配置文件CentOS7.6.xml 保存虚拟机的详细信息,一个磁盘文件是虚拟机操作系统,格式为 rawqcow2

配置文件默认位置是/etc/libvirt/qemu/

 

[root@kvm01 ~]# cat /etc/libvirt/qemu/CentOS7.6.xml 
<!--
WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ARE LIKELY TO BE
OVERWRITTEN AND LOST. Changes to this xml configuration should be made using:
  virsh edit node1
or other application using the libvirt API.
-->

<!--
以下两项可有可无,所以在此注释。
-->

<!--
#驱动安全标签,可删除
<seclabel>......</seclabel>
#资源设置,可删除
<resource>......</resource>                                                   
-->

<domain type='kvm'>
  #<!--虚拟机名称-->
  <name>node1</name>
  #<!--个性化设置,也可以自行修改,做虚拟机模板时可以删除-->
  <uuid>8908d03b-0329-4105-851f-c93fd091e9e9</uuid>
  #<!--虚拟机能使用的最大内存,此处为2G,即:2*1024*1024-->
  <memory unit='KiB'>2097152</memory>
  #<!--在虚拟机中用 free -m 命令可以看见的内存大小,一般与上面的最大内存值设为一样-->
  <currentMemory unit='KiB'>2097152</currentMemory>
  #<!--CPU的数量-->
  <vcpu placement='static'>2</vcpu>                                            
  <os>
    #<!--系统引导设备配置,无需手动修改-->
    <type arch='x86_64' machine='pc-i440fx-rhel7.0.0'>hvm</type>
    <boot dev='hd'/>
  </os>
  #<!--高级电源管理,无需手动修改-->
  <features>                                                        
    <acpi/>
    <apic/>
  </features>
  #<!--CUP配置,cpu mode可以写成'host-passthrough',意思是使用真机的CPU-->
  <cpu mode='custom' match='exact' check='partial'>    
    <model fallback='allow'>Westmere</model>
  </cpu>
  <clock offset='utc'>
    #<!--时钟设置,可以设置为localtime-->
    <timer name='rtc' tickpolicy='catchup'/>
    <timer name='pit' tickpolicy='delay'/>
    <timer name='hpet' present='no'/>
  </clock>
  #<!--虚拟机关机命令-->
  <on_poweroff>destroy</on_poweroff>
  #<!--虚拟机重启命令-->
  <on_reboot>restart</on_reboot>
  #<!--虚拟机强制重启命令-->
  <on_crash>destroy</on_crash>                                       
  <pm>
    #<!--内存及硬盘休眠设置,可删除-->
    <suspend-to-mem enabled='no'/>
    <suspend-to-disk enabled='no'/>
  </pm>
  #<!--系统仿真设备,主板驱动类-->
  <devices>
    #<!--仿真设备使用哪个程序来仿真,这里使用qemu-kvm来仿真-->
    <emulator>/usr/libexec/qemu-kvm</emulator>                       
    #<!--硬盘配置,需要手动修改,可以通过复制本段来创建新的磁盘-->
    <disk type='file' device='disk'>
      #<!--磁盘驱动类型-->
      <driver name='qemu' type='qcow2'/>
      #<!--磁盘路径设置-->
      <source file='/var/lib/libvirt/images/node1.img'/>
      #<!--磁盘盘符设置-->
      <target dev='vda' bus='virtio'/>
      #<!--总线地址,下同,可删除-->
      <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>         
    </disk>
    #<!--USB相关配置,可删除,下同-->
    <controller type='usb' index='0' model='ich9-ehci1'>             
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x7'/>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci1'>
      <master startport='0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0' multifunction='on'/>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci2'>
      <master startport='2'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x1'/>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci3'>
      <master startport='4'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x2'/>
    </controller>
    #<!--PCI设备配置,可删除-->
    <controller type='pci' index='0' model='pci-root'/>                 
    <controller type='virtio-serial' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
    </controller>
    #<!--网卡设置,可复制本段来添加新的网卡-->
    <interface type='network'>
      #<!--网卡MAC地址,可删除-->
      <mac address='52:54:00:74:1c:9e'/> 
      #<!--指定网卡连接的交换机-->
      <source network='default'/>                            
      <model type='virtio'/>
      #<!--总线地址,可删除-->
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>    
    </interface>
    #<!--串口终端,需要保留,下同-->
    <serial type='pty'>                                               
      <target type='isa-serial' port='0'>
        <model name='isa-serial'/>
      </target>
    </serial>
    <console type='pty'>
      <target type='serial' port='0'/>
    </console>
    #<!--虚拟机通讯控制接口-->
    <channel type='unix'>                                           
      <target type='virtio' name='org.qemu.guest_agent.0'/>
      <address type='virtio-serial' controller='0' bus='0' port='1'/>
    </channel>
    #<!--图形图像相关配置,可以删除-->
    <channel type='spicevmc'>                                        
      <target type='virtio' name='com.redhat.spice.0'/>
      #<!--串口设备,需要保留串口终端-->
      <address type='virtio-serial' controller='0' bus='0' port='2'/>  
    </channel>
    #<!--数位板,如笔记本电脑的触摸板等,可删除-->
    <input type='tablet' bus='usb'>                    
      <address type='usb' bus='0' port='1'/>
    </input>
    <input type='mouse' bus='ps2'/>                               <!--鼠标-->
    <input type='keyboard' bus='ps2'/>                            <!--键盘-->
    <graphics type='spice' autoport='yes'>                     <!--图形图像显卡相关配置,可以删除-->
      <listen type='address'/>
      <image compression='off'/>
    </graphics>
    <sound model='ich6'>                                        <!--声卡相关设置,可以删除-->
      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
    </sound>
    <video>                                                      <!--图形图像显卡相关配置,可以删除-->
      <model type='qxl' ram='65536' vram='65536' vgamem='16384' heads='1' primary='yes'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
    </video>
    <redirdev bus='usb' type='spicevmc'>                          <!--设备重定向,可以删除,下同-->
      <address type='usb' bus='0' port='2'/>
    </redirdev>
    <redirdev bus='usb' type='spicevmc'>
      <address type='usb' bus='0' port='3'/>
    </redirdev>
    <memballoon model='virtio'>                                 <!--内存气泡,可以动态调整内存-->
      <address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/>
    </memballoon>
  </devices>
</domain>
View Code

注:磁盘文件raw qcow2 不可以打开

kvm磁盘管理

kvm虚拟磁盘类型raw、qcow2

  • raw磁盘格式介绍

原始格式是磁盘映像的纯二进制映像,非常便于移植。在支持稀疏文件的文件系统上,这种格式的图像只使用其中记录的数据实际使用的空间。随便dd一个file就模拟了一个raw格式的镜像。由于裸的彻底,性能上来说的话还是不错的。目前来看,KVM和XEN默认的格式好像还是这个格式。因为其原始,有很多原生的特性,例如直接挂载就是一件很简单的事情。

  1. 格式简单支持镜像格式的转换,平时也会被用在中间格式转换

  2. 支持磁盘容量的扩容和缩容

  3. 不支持创建snapshot(虚拟机快照),它并不存储数据,因此可以作为保证虚拟机兼容性的候选方案。然而,也正因为它不存储元数据,因此不支持某某些高级特性,比如快照和压缩等。

  • qcow2磁盘快照介绍

现在比较主流的一种虚拟化镜像格式,经过一代的优化,目前qcow2的性能上接近raw裸格式的性能,对于qcow2的格式,有几点还是非常突出的,qcow2的snapshot,可以在镜像上做N多个快照

  1. 按需进行分配磁盘空间,不管文件系统是否支持

  2. 支持快照

  3. 支持zlib的磁盘压缩

  4. 支持AES的加密

介绍以下vmdk磁盘格式:

  • vmdk磁盘格式介绍

vmdk是虚拟机VMware创建的虚拟硬盘格式,文件存在于VMware文件系统中,被称之为VMFS(虚拟机文件系统)。一个VMDK文件代表VMFS在虚拟机上的一个物理硬盘驱动。所有用户数据和有关虚拟服务器的配置信息都存储在VMDK文件中,VMware环境当中默认使用的磁盘格式。

创建raw磁盘格式虚拟机:

virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name centos7 --memory 1024 --vcpus 1 --disk /opt/centos2.raw,format=raw,size=10 --cdrom /opt/CentOS-7-x86_64-DVD-1708.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole

创建qcow2磁盘格式虚拟机:

virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name centos7 --memory 1024 --vcpus 1 --disk /data/oldboy.qcow2,format=qcow2,size=10 --cdrom /data/CentOS-7.2-x86_64-DVD-1511.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole

 

磁盘工具的常用命令

qemu-img命令:

qemu-img info /opt/web02.raw       #查看虚拟磁盘信息
qemu-img create -f qcow2 test.qcow2    2G     #创建一块qcow2格式的虚拟磁盘
qemu-img resize test.qcow2 +20G    #磁盘加20G
qemu-img resize test.qcow2  20G    #磁盘加到20G

注:这里不建议进行缩容,因为数据会丢失

raw转换为qcow2格式:

注: -f 源镜像的格式 -O 目标镜像的格式

#将web02.raw转换为web02.qcow2格式
qemu-img convert -f raw -O qcow2 /opt/web02.raw /opt/web02.qcow2
#统计需要多少时间
time qemu-img convert -f raw -O qcow2 /opt/web02.raw /opt/web02.qcow2

#修改文件内容
virsh edit web02
      <driver name='qemu' type='qcow2'/>
      <source file='/opt/web02.qcow2'/>
#关机在重启
virsh destroy web02 virsh start web02

 

快照管理

注:这里只有qcow2格式虚拟磁盘可以创建快照raw磁盘不支持,如果虚拟机要创建需要转换以下磁盘格式

使用qcow2磁盘格式创建快照:

需要注意的是,做快照后,磁盘空间会变大,因为快照会被占用磁盘空间,所以说是内部快照,创建完成后会生成一个快照名称,这个快照名称是根据Unix时间戳来生成的

#创建快照--name加上快照名字
virsh  snapshot-create-as web02 --name install_ok
#查看快照
virsh snapshot-list web02
 Name                 Creation Time             State
------------------------------------------------------------
install_ok           2020-04-23 10:37:43 +0800 running

#还原快照
virsh snapshot-revert web02 --snapshotname install_ok

#删除快照
virsh snapshot-delete web02 --snapshotname install_ok

 

克隆管理

注:在克隆之前我们需要先把虚拟机挂起

  • 完整克隆:

    完整克隆是原始虚拟机当前状态的完整副本。此副本虚拟机完全独立,但需要较多的存储磁盘空间

    自动完整克隆:

virt-clone --auto-clone -o web01 -n web02 (完整克隆) 

         手动完整克隆:

qemu-img convert -f qcow2 -O  qcow2 -c web02.qcow2  web04.qcow2
virsh dumpxml web02 >web04.xml
vim web04.xml
#修改虚拟机的名字
#删除虚拟机uuid
#删除mac地址
#修改磁盘路径
virsh define web04.xml  <--导入配置文件
virsh start web04
  • 链接克隆:

链接克隆是对原始虚拟机的引用,所需的存储磁盘空间较少。但是,必须能够访问原始虚拟机才能运行。

#生成虚拟机磁盘文件
 qemu-img create -f qcow2 -b web03.qcow2 web05.qcow2
 
#生成虚拟机的配置文件
virsh dumpxml web03 >web05.xml
vim web05.xml
#修改虚拟机的名字
<name>web05</name>
#删除虚拟机uuid
<uuid>8e505e25-5175-46ab-a9f6-feaa096daaa4</uuid>
#删除mac地址
<mac address='52:54:00:4e:5b:89'/>
#修改磁盘路径
<source file='/opt/web05.qcow2'/>

#导入虚拟机及进行启动测试
virsh define web05.xml
virsh start web05

全自动链接克隆脚本:

[root@kvm01 scripts]# cat link_clone.sh 
#!/bin/bash
old_vm=$1
new_vm=$2
#a:生成虚拟机磁盘文件
old_disk=`virsh dumpxml $old_vm|grep "<source file"|awk -F"'" '{print $2}'`
disk_tmp=`dirname $old_disk`
qemu-img create -f qcow2 -b $old_disk  ${disk_tmp}/${new_vm}.qcow2
#b:生成虚拟机的配置文件
virsh dumpxml $old_vm >/tmp/${new_vm}.xml
#修改虚拟机的名字
sed -ri "s#(<name>)(.*)(</name>)#\1${new_vm}\3#g" /tmp/${new_vm}.xml
#删除虚拟机uuid
sed -i '/<uuid>/d' /tmp/${new_vm}.xml
#删除mac地址
sed -i '/<mac address/d' /tmp/${new_vm}.xml
#修改磁盘路径
sed -ri "s#(<source file=')(.*)('/>)#\1${disk_tmp}/${new_vm}.qcow2\3#g" /tmp/${new_vm}.xml
#c:导入虚拟机并进行启动测试
virsh define /tmp/${new_vm}.xml
virsh start ${new_vm}
View Code

创建链接克隆的虚拟机:

#创建链接磁盘
qemu-img create -f qcow2 -b 49-web03.qcow2 49-web04.qcow2
#创建虚拟机
virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web04 --memory 1024 --vcpus 1 --disk /opt/web04.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole

kvm虚网络管理

虚拟机网络无法连接外网解决办法:

vim  /etc/sysctl.conf
net.ipv4.ip_forward=1 #添加这行代码

#重启network服务
systemctl  restart network

#查看是否修改成功返回1就是成功
sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1

文章摘自:https://blog.csdn.net/gsl371/article/details/78662258

前言

Libvirt虚拟网络使用虚拟网络交换机的概念。虚拟网络交换机是在主机物理机器服务器上运行的软件结构,虚拟机(客户机)通过它连接到该物理主机服务器。客户机的网络流量通过这个交换机被引导:

 

 Linux主机物理机服务器将虚拟网络交换机表示为网络接口。当libvirtd守护进程(libvirtd)首次安装并启动时,表示虚拟网络交换机的默认网络接口是virbr0。

 

 这个virbr0接口可以通过ip命令,像其他任何接口一样用命令查看:

[root@kvm01 ~]# ifconfig  virbr0
virbr0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255
        ether 52:54:00:1e:7c:53  txqueuelen 1000  (Ethernet)
        RX packets 12242  bytes 677436 (661.5 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 12630  bytes 28332608 (27.0 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

 

桥接(Bridge)模式

在使用桥接模式时,所有虚拟机都好像与主机机器在同一个子网内。同一个物理网络中的所有其他物理机器都知道这些虚拟机,并可以访问这些虚拟机。桥接操作在OSI网络模型的第2层。

在中间件(hypervisor)中可以使用多个物理接口,通过绑定把他们连接在一起,然后把它添加的网络,同时虚拟机也被添加到这个网桥,绑定操作有多种模式,只有少数这些模式可以与虚拟机正在使用的桥接器配合使用。

 网桥连接方式:

开启DHCP或者添加静态ip地址

  1. 新虚拟机使用桥接模式

    创建桥接网卡:

virsh iface-bridge eth0 br0 #创建桥接网卡命令,执行这条命令eth0会桥接到br0
virsh iface-unbridge br0    #取消桥接网卡
brctl show  #查看kvm网卡

            使用NAT模式:

virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name centos8 --memory 1024 --vcpus 1 --disk /opt/centos8.raw,format=raw,size=10 --cdrom /opt/CentOS-7-x86_64-Minimal-1908.iso  --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole

           使用桥接模式:

virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name centos8 --memory 1024 --vcpus 1 --disk /opt/centos8.raw,format=raw,size=10 --cdrom /opt/CentOS-7-x86_64-Minimal-1908.iso  --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole

如果获取不到ip地址:

2. 将已有虚拟机网络修改为桥接模式

a:关机状态下修改虚拟机配置文件

#例如:virsh edit centos7
74<interface type='bridge'>
76  <source bridge='br0'/>

b:启动虚拟机,测试虚拟机网络

如果上层没有开启dhcp,需要手动配置ip地址,IPADDR,NATMASK,GATEWAY,DNS1=180.76.76.76

kvm虚拟机的网络:

NAT模式
桥接模式:使用宿主机网络,使用eth0桥接,虚拟机将会和eth0处于同一网段
dhclient:手动获取dhcp地址

使用静态ip地址变成桥接模式:

echo ' TYPE="Ethernet"
BOOTPROTO="static"
NAME="eth0"
DEVICE="eth0"
ONBOOT="yes"
DNS1=223.5.5.5
IPADDR=10.0.0.99
NETMASK=255.255.255.0
GATEWAY=10.0.0.254 ' > /etc/sysconfig/network-scripts/ifcfg-eth0

systemctl restart network
systemctl stop  NetworkManager
systemctl  disable  NetworkManager

#使用xshell连接虚拟机
ssh 10.0.0.99
ping baidu.com <--验证连接外网

 

NAT模式

默认情况下,虚拟网络交换机以NAT模式运行。他们使用IP伪装而不是SNAT(Source-NAT)或DNAT(Destination-NAT)。IP伪装使得连接的guest虚拟机可以使用主机物理服务器ip地址与任何外部网络进行通信。默认情况下,虚拟网络交换机在NAT模式下运行时,放置在主机物理机外部的计算机无法与其中的guest虚拟机进行通信。如下图所示:

 

 

 DNS和DHCP

ip地址可以通过DHCP分配给客户机。为此,可以将地址池分配给虚拟交换机。Libvirt使用这个dnsmasq程序。dnsmasq的一个实例是由libvirt为每个需要它的虚拟网络交换机自动分配和启动的。

 

路由模式

当使用路由模式时,虚拟交换机连接到主机物理服务器的物理LAN,在不使用NAT的情况下来回传输流量。虚拟交换机可以检查所有流量,并使用网络数据包种包含的信息来做出路由决策。使用此模式时,所有虚拟机都位于其自己的子网中,通过虚拟交换机进行路由。这种情况并不总是理想的,因为物理网络上的其他主机物理服务器不通过手工配置的路由信息是没办法发现这些虚拟机,并且不能访问虚拟机。路由模式在OSI网络模型的第三层运行。

  

隔离模式

使用隔离模式时,连接到虚拟交换机的虚拟机可以相互通信,也可以与主机物理机通信,但其通信不会传到主机物理机时,也不能从主机物理机外部连接通信。在这种模式下使用dnsmasq对于诸如DHCP的基本功能是必需的。但是,即使该网络与任何物理网络隔离,DNS名称仍然被解析的。因此,DNS名称能解析但ICMP回应请求(ping)命令失败这种情况可能会出现。

 

默认配置

libvirtd守护进程(libvirtd)第一次被安装时,它将包含配置在NAT模式下的初始虚拟网络交换机。使用此配置,以便安装的guest虚拟机可以通过主机物理机与外部网络进行通信。图示:

 

热添加技术

kvm虚拟机可以在线添加CPU、磁盘、内存、网卡等资源,也可以在线迁移虚拟机

kvm热添加硬盘

注:这里凡是加--config的选项需要重启才可以生效。 命令:virsh destroy centos7 && virsh start centos7.

临时生效:

注:不指定格式默认是raw格式硬盘 --subdriver指定磁盘格式

virsh attach-disk web01 /data/web01-add.qcow2 vdb --subdriver qcow2

永久生效:

virsh attach-disk web01 /data/web01-add.qcow2 vdb --subdriver qcow2 --config

临时剥离:

virsh detach-disk web01 vdb

永久剥离:

virsh detach-disk web01 vdb --config

实例一 给虚拟机添加新硬盘:

#创建一个硬盘
qemu-img create -f qcow2 /opt/web01_add.qcow2 5G
#添加硬盘到centos7虚拟机上
virsh  attach-disk centos7 /opt/web01_add.qcow2 vdb --subdriver  qcow2

#进入虚拟机进行格式化+挂载
mkfs.xfs /dev/vdb
mount  /dev/vdb /mnt

注:这里要添加--subdriver参数,否则磁盘显示为0。

实例二 给在虚拟机上的硬盘进行扩容:

#磁盘卸载+硬盘剥离
mount /dev/vdb  <--虚拟机操作
virsh detach-disk centos7 vdb
或者
virsh detach-disk centos7 /opt/web01_add.qcow2

#磁盘扩容
qemu-img resize /opt/web01_add.qcow2 20G
qemu-img  info web-blog-add.qcow2

#将磁盘重新添加
virsh attach-disk centos7 /opt/web01_add.qcow2 vdb --subdriver  qcow2
mount /dev/vdb /mnt/
xfs_growfs  /dev/vdb

注:xfs_growfs命令是同步文件系统的意思,resize2fs 针对文件系统ext2 ext3 ext4

实例三 根分区扩容:

注:做完快照的硬盘不可以扩容

#剥离根分区磁盘
virsh detach-disk centos7 vda --config
qemu-img resize /opt/centos2.qcow2 40G
qemu-img info /opt/centos2.qcow2
virsh  attach-disk centos7  /opt/centos2.qcow2 vda --subdriver  qcow2 --config

#进行重启
virsh destroy centos7
virsh start centos7

如果这里磁盘需要分区:

## 分区
fdisk /dev/vdb
    n  添加一新分区
    p  添加主分区 (看需求)
    w  保存
## 格式化
mkfs.xfs /dev/vdb1

 

kvm热添加网卡

默认添加和删除:

#临时添加默认网卡
virsh attach-interface centos7 network default --model virtio
#永久添加默认网卡
virsh attach-interface centos7 network default --model virtio --config  <--需要重启
#删除默认网卡
virsh detach-interface centos7 network --mac 52:54:00:09:88:03
#永久删除
virsh detach-interface centos7 network --mac 52:54:00:91:de:cc --config  <--需要重启

选择添加网卡类型和删除:

#临时添加
virsh attach-interface centos7  --type bridge --source br0 --model virtio
#永久添加
virsh attach-interface centos7  --type bridge --source br0 --model virtio --config
#删除
virsh detach-interface centos7 --type bridge --mac 52:54:00:35:d3:71

 

kvm热添加内存

  创建虚拟机调整内存:

virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web04 --memory 512,maxmemory=2048 --vcpus 1 --disk /opt/web04.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole

注:这里对于内存的解释是使用的内存是512M,最大内存为2018M

内存调整:

#先关闭虚拟机
virsh destroy centos7 

#调整虚拟机内存最大值
virsh setmaxmem web04 4G
#临时热添加内存
virsh setmem web04 1024M
#永久添加内存
virsh setmem web04 1024M --config <--重启

注:这里的内存是宿主机将自己的内存分给虚拟机的,虚拟机内存不要给太小,否则内核会崩溃

 

kvm热添加cpu核数

创建虚拟机设置cpu数量:

virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web04 --memory 512,maxmemory=2048 --vcpus 1,maxvcpus=10 --disk /data/web04.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole 

注:这里cpu使用1个,但是可以加到10个cpu。

cpu核数调整:

#调整虚拟机cpu的最大值
virsh setvcpus centos7  --maximum  4 --config  <--重启虚拟机
#热添加cpu核数 
virsh setvcpus centos7 4
#永久添加cpu核数
virsh setvcpus centos7 4 --config

注:这里cpu调整只支持热添加不支持热减少,如果想减少cpu核数请关机重启一次

 

kvm迁移

kvm冷迁移操作

kvm虚拟机冷迁移:配置文件,磁盘文件

这里我们开启两台宿主机 kvm01、kvm02,都要开启虚拟化。

迁移思路:

  1. 迁移磁盘文件

  2. 迁移xml配置文件

kvm01操作:

#kvm01查看磁盘文件
virsh dumpxml centos7 | grep qcow2
      <driver name='qemu' type='qcow2'/>
      <source file='/opt/centos2.qcow2'/>
      <driver name='qemu' type='qcow2'/>
      <source file='/opt/web-blog-add.qcow2'/>

#迁移磁盘文件
scp /opt/centos2.qcow2 10.0.0.12:/opt    <--系统盘
scp /opt/web-blog-add.qcow2 10.0.0.12:/opt  <--第二块硬盘

#迁移xml配置文件
virsh dumpxml centos7 > centos7.xml
scp centos7.xml 10.0.0.12:/opt

 kvm02操作:

#kvm02开启网桥模式,因为迁移过来的虚拟机使用网桥模式
virsh iface-bridge eth0 br0

#导入配置文件
virsh  define --file centos7.xml

#开启虚拟机
virsh start centos7

注:这里kvm虚拟机如果是软连接制成的需要把链接的磁盘迁移过来。

#查看配置文件有几块磁盘
[root@kvm01 opt]# virsh  dumpxml  centos8 | grep qcow2
      <driver name='qemu' type='qcow2'/>
      <source file='/opt/centos8.qcow2'/>
        <source file='/opt/centos2.qcow2'/>        <--系统磁盘
      <driver name='qemu' type='qcow2'/>
      <source file='/opt/vm_web-blog-add.qcow2'/>
        <source file='/opt/web-blog-add.qcow2'/>  <---第二块添加的磁盘


[root@kvm01 opt]# qemu-img info centos8.qcow2
image: centos8.qcow2
file format: qcow2
virtual size: 10G (10737418240 bytes)
disk size: 14M
cluster_size: 65536
backing file: centos2.qcow2   <--链接到的磁盘
Format specific information:
    compat: 1.1
    lazy refcounts: false

#这里我们相当于需要把4快磁盘迁移过去,否则无法创建出来一个完整的链接虚拟机

 

kvm热迁移操作

地址规划:

主机名 IP 内存 网络 软件需求 虚拟化
kvm01 10.0.0.11 2G 创建br0桥接网卡 kvm和nfs 开启
kvm02 10.0.0.12 2G 创建br0桥接网卡 kvm和nfs 开启
nfs 10.0.0.31 1G nfs

kvm02迁移kvm01思路:

  1. 搭建nfs,配置文件让kvm主机能够挂载

  2. kvm挂载nfs的目录,kvm01在目录下得到kvm02的磁盘文件

  3. kvm02迁移xml配置文件修改磁盘文件位置

  4. 导入xml文件开启虚拟机

nfs主机操作:

yum  install nfs-utils rpcbind  -y

vim /etc/exports
/data  10.0.0.0/24(rw,async,no_root_squash,no_all_squash

systemctl start rpcbind  nfs

#kvm01和kvm02
mount -t nfs 10.0.0.31:/data /data
df -h

以下是kvm宿主机操作:

#kvm02将/data下的磁盘文件移动到/data目录下
[root@kvm02 opt]# mv /opt/* /data
[root@kvm02 opt]# mount -t nfs 10.0.0.31:/data /data
[root@kvm02 opt]# mv /opt/* /data

#kvm01将目录挂载到/opt
[root@kvm01 opt]# rm -rf /opt
[root@kvm01 opt]# mount -t nfs 10.0.0.31:/data /opt
[root@kvm01 ~]# cd /opt/
[root@kvm01 opt]# ls
centos2.qcow2  centos7.xml  web-blog-add.qcow2

#导入xml文件
[root@kvm01 opt]# virsh define centos7.xml
[root@kvm01 opt]# virsh start centos7

 

 

ESXI虚拟化系统

简介

ESXi是vmware推出的一款优秀的服务器级别的虚拟机。它与我们常用的虚拟机不同的是,日常使用的虚拟机是需要依赖于一个操作系统的,比如在window上使用vmware,或者linux上使用virtualbox。而ESXi不依赖于任何操作系统,它本身就可以看作一个操作系统,然后可以在它上面安装系统。

官方地址:点击这里 下载地址:点击这里

 

安装ESXI系统

注:这里安装内存不能低于4G,磁盘不可以低于40G

前面找镜像的过程就略过,我使用的镜像是VMware-VMvisor-Installer-6.7.0-8169922.x86_64版本

输入密码的前面几项我们一直按回车,如果遇到输入F11我的笔记本要加上Fn键和F11才可以使用,这里我们直接输入密码:test@123.com

按F11+Fn确定安装:

DHCP获取ip地址:

修改ip地址,网卡使用NAT模式,我们可以将ip地址改为10网段:

修改好的ip地址:

登录系统网页输入:10.0.0.40

激活系统,添加激活码:HV4WC-01087-1ZJ48-031XP-9A843

 

创建虚拟机

点击创建/注册虚拟机

选择创建类型

选择放在那里

自定义配置,后期我们需要把Linux镜像在虚拟机上挂载上或者上传

安装虚拟机:

 

导入一台esxi虚拟机并添加网段

导入文件,这里我们可以在VMware里面制作

添加一个网段

  1. 网络里面添加一个标准交换机

  2. 添加一个端口组

给虚拟机更换网卡

 

安装客户端

客户端下载:https://kb.vmware.com/s/article/2089791

1. 双击“VMware-viclient.exe”安装程序

 

 

 

 2. 选择语言

 3. 根据安装向导进行操作

 4. 接收“许可协议

 5. 选择安装路径

 

 6. 完整安装

 

 

 

 

将kvm虚拟机迁移到esxi上

1. 首先ESXI系统开启ssh服务,后期远程连接和传输文件会用到

2. 将kvm虚拟机磁盘格式转化为ESXI使用的vmdk

[root@kvm01 opt]# ll
total 1795720
-rw-r--r-- 1 qemu qemu 1822621696 Apr 25 22:07 centos2.qcow2
-rw-r--r-- 1 root root       5605 Apr 25 15:07 centos7.xml
-rw-r--r-- 1 qemu qemu   16187392 Apr 25 08:14 web-blog-add.qcow2

#转化为vmdk格式
[root@kvm01 opt]# qemu-img convert -f qcow2 centos2.qcow2  -O vmdk centos7.vmdk
[root@kvm01 opt]# ll centos7.vmdk 
-rw-r--r-- 1 root root 1611005952 Apr 25 22:11 centos7.vmdk

convert:格式转化
-f qcow2:源格式
-O vmdk:转化后的格式
centos7.qcow2 centos7.vmdk 源文件与转化后的文件

3. 传输vmdk文件到ESXI系统

[root@kvm01 opt]# scp  centos7.vmdk 10.0.0.40:/
The authenticity of host '10.0.0.40 (10.0.0.40)' can't be established.
RSA key fingerprint is SHA256:LzGyAI//WyoXTe0bX+JsBOSLK+UVodfTb9OIvMpZgr0.
RSA key fingerprint is MD5:cc:e7:7f:7a:78:12:ff:bf:30:dc:98:f4:b3:63:7b:a5.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '10.0.0.40' (RSA) to the list of known hosts.
Password: 
centos7.vmdk                                                                                                                96% 1476MB  68.4MB/s   00:00 ETAscp: /centos7.vmdk: No space left on device
centos7.vmdk   

4. 移动vmdk文件到指定目录(ESXI系统操作)

#创建一个目录存放磁盘
mkdir /vmfs/volumes/datastore1/centos7
mv centos7.vmdk /vmfs/volumes/datastore1/centos7/

5. 在ESXI虚拟机上使用此文件

 

 

 

 

 

 

 

将ESXI虚拟机迁移到kvm

注:这里我们虚拟机需要先关机

 

 

 把文件导入kvm中

 

 解压文件

[root@vm-kvm01 /kvm/raw_qcow2]# tar xf ESXI-centos7.ova
[root@vm-kvm01 /kvm/raw_qcow2]# ll -h
total 8.7G
省略部分文件……
-rw-r--r-- 1   64   64 647M Jul 17 14:47 ESXI-centos7-disk1.vmdk
-rw-r--r-- 1   64   64  139 Jul 17 14:47 ESXI-centos7.mf
-rw-r--r-- 1 root root 647M Jul 17 14:47 ESXI-centos7.ova
-rw-r--r-- 1   64   64 8.0K Jul 17 14:47 ESXI-centos7.ovf

磁盘文件格式转化

方法1:
[root@vm-kvm01 /kvm/raw_qcow2]# qemu-img convert -f vmdk -O qcow2 ESXI-centos7-disk1.vmdk ESXI-centos7.qcow2

[root@vm-kvm01 /kvm/raw_qcow2]# ll -h | grep ESXI
省略部分文件……
-rw-r--r-- 1   64   64 647M Jul 17 14:47 ESXI-centos7-disk1.vmdk
-rw-r--r-- 1 root root 1.3G Jul 17 15:01 ESXI-centos7.qcow2
方法2:用专门的工具将vmdk格式文件转换成qcow2与xml格式文件
[root@vm-kvm01 /kvm/raw_qcow2]# yum -y install virt-v2v
[root@vm-kvm01 /kvm/raw_qcow2]# virt-v2v -i ova ESXI-centos7.ova -o local -os /opt -of qcow2  #格式转换需要一点时间

[root@vm-kvm01 /kvm/raw_qcow2]# ll /opt
total 1358728
-rw-r--r-- 1 root root 1391394816 Jul 18 07:10 ESXI-centos7-sda #这就是qcow2格式的文件
-rw-r--r-- 1 root root       1470 Jul 18 07:10 ESXI-centos7.xml

[root@vm-kvm01 /opt]# qemu-img info ESXI-centos7-sda 
image: ESXI-centos7-sda
file format: qcow2   实际上这个文件就是qcow2文件
virtual size: 10G (10737418240 bytes)
disk size: 1.3G
cluster_size: 65536
Format specific information:
    compat: 1.1
    lazy refcounts: false

实用时需要重命名:
[root@vm-kvm01 /opt]# mv ESXI-centos7-sda ESXI-centos7.qcow2

参数详解:
 virt-v2v:将客户端转换为使用KVM
-i ova ESXI-centos7.ova:指定转换的文件格式为ova及ova文件名
-o local:转换到本地
-os /opt -of qcow2:转换到本地具体的路径

基于现有的磁盘文件创建KVM虚拟机

[root@vm-kvm01 /kvm/raw_qcow2]# virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name openstatck --memory 1024 --vcpus 1,maxvcpus=10 --disk /kvm/raw_qcow2/ESXI-centos7.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole

Starting install...
Domain creation completed.

[root@vm-kvm01 /kvm/raw_qcow2]# virsh list 
 Id    Name                           State
----------------------------------------------------
 1     openstatck                     running

使用VNC客户端工具进行连接

 

推荐阅读