虚拟化技术的概述及使用

目录

云计算基础

一.虚拟化技术

1.虚拟化与云技算的概述

2.虚拟化的开启

3.虚拟化的架构

4.linux虚拟化平台安装

5.虚拟机的构成

二.虚拟化管理

1.虚拟化网络管理

2.虚拟机配置管理

3.写一个脚本以后就可以直接创建

4.安装会总:

一.虚拟化技术

1.虚拟化与云技算的概述

1)虚拟化:

虚拟化是一种技术,顾名思义,就是将不可拆分的实体资源变成可以自由划分的逻辑资源,从而实现资源的整合、隔离、在分配, 云计算就是利用了虚拟化技术的这个特点。

2)云计算:

云计算是一种服务模式(IAAS) , 其思想就是把各种资源整合起 来, 然后租给有需要的用户, 其中的资源包括处理器(CPU) 、内 存、存储、网络和其它基本的计算资源。通常我们通过虚拟化手 段把这些资源分割打包提供给用户使用。

2.虚拟化的开启

1)虚拟化主要厂商

系列pc/服务器版代表
VMwareVMware Workstation,vSphere
MicrosoftVirtual PC,Hyper-V
RedHatKVM,RHEV
CitrixXen
OracleOracle VM VirtualBox

2)开启虚拟化

当在windows平台的VMware中安装系统时,如果电脑没有开启虚拟化,在安装过程中,会发生错误。

查看电脑是否开启虚拟化,【任务管理器】

windows如未开启则:

intel CPU开启虚拟化

开机进入BIOS,在coufiguration选项中,将【 Intel Virtual Technology】选项由【disable】调整为【enable】。

AMD CPU开启虚拟化

img

开机进入BIOS,在coufiguration选项中,将【 AMD SVM Technology】选项由【disable】调整为【enable】。

linux查看支持虚拟化

# 查看CPU是否支持虚拟化
~]# grep -P "vmx|svm" /proc/cpuinfo
    flags : ... ... vmx
# 查看kernel(内核)是否有虚拟化内核
~]# lsmod |grep kvm
kvm_intel 294912 8
kvm       786432 1 kvm_intel
irqbypass  16384 7 kvm
​
#如没有模块则添加
~]# modprobe kvm
~]# modprobe kvm-intel

3.虚拟化的架构

虚拟层,仿真层,管理层

-KVM是linux内核模块, 它需要CPU指令集(Intel-VT/AMD-V) 的支持,是一种硬件辅助虚拟化技术

-QEMU是一个虚拟化的仿真工具, 通过ioctI与内核模块交互 完成对硬件的虚拟化支持

-Libvirt是一个对虚拟化管理的接口和工具, 提供客户端程 序,例如: virsh,virt-manager

img

4.linux虚拟化平台安装

虚拟化平台必须的四个软件包

qemu-kvm -为kvm提供底层系统设备仿真支撑

libvirt-daemon -libvirtd守护进程,管理虚拟机

libvirt-client -客户端软件,提供客户端管理命令

libvirt-daemon-driver-qemu -libvirtd连接qemu的驱动

1)安装软件

~]# yum -y install qemu-kvm libvirt-daemon libvirt-client libvirt-daemon-driver-qemu
~]# systemctl enable --now libvirtd
~]# virsh version
Compiled against library: libvirt 4.5.0
Using library: libvirt 4.5.0
Using API: QEMU 4.5.0

5.虚拟机的构成

1)配置文件与储存文件

虚拟配置文件(*.xml)(扩展标记语言)

      -文件默认路径:/etc/libvirt/qemu

      -用途:配置虚拟机资源参数

存储文件(*.img)

       -文件默认路径:/var/lib/libvirt/images/

       -用途:仿真虚拟磁盘,储存所有数据信息

2)cow技术的原理

Copy On Write 写实复制技术

        -直接映射原始盘的数据内容

        -当数据有写入需求时,在写入之前自动将数据块拷贝存入前端盘后,对前端盘进行修改

        -原始盘始终是只读的

3)linux使用后端磁盘的命令

注:每一个虚拟机应该有单独的磁盘

qemu-img 是虚拟机的磁盘管理命令,支持非常多的磁盘

格式,例如 raw, qcow2,vdi,vmdk等等

qemu-img命令格式

-qemu-img子命令 子命令参数 块文件名称 大小
    -常用子命令有:
 -create 创建一个磁盘
 -convert 专换磁盘格式
 -info 查看磁盘信息
 -f 磁盘格式
 -b 原始盘
#创建后端盘
~]# cd /var/lib/libvirt/images
~]# qemu-img create -f qcow2 master.img 10G
Formatting 'master.img', fmt=qcow2 size=10737418240 encryption=off cluster_size=65536 lazy_refcounts=off
~]# ls
node.img
~]# qemu-img info master.img 
image: master.img
file format: qcow2
virtual size: 10G (10737418240 bytes)
disk size: 196K
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: false
​
# 创建链接盘
~]# qemu-img create -f qcow2 -b master.img node.img 30G

二.虚拟化管理

1.虚拟化网络管理

1)网桥的概述

早期的网桥就是将两个计算机连接起来的网络通信设备,但是在现在很多虚拟化技术,无论是虚拟机还是容器技术想要进行网络通信所以提出了个虚拟网桥的概念。虚拟网桥的概念的提出含义就是使用网桥搭建一个局域网而虚拟机和容器和宿主机是局域网内同等级别节点。用一句话总结就是现在虚拟化技术就是通过网桥技术将宿主机和虚拟机和容器搭建成局域网,是虚拟机和宿主机之间可以通信。

所以一般创建虚拟机想要上外网一般有两种方式一种是通过桥接借助宿主机的物理连接,然后和宿主机配上相同的上网环境的就可以上网,还有一种是用桥接的方式是虚拟机和宿主机之间能够通信,然后借助NAT(网络地址转换)使用宿主机代理上网。而docker就是使用的这种技术。

2)网络管理命令

命令说明
virsh tnet-list [--all]列出虚拟网络
virsh net-start启动虚拟交换机
virsh net -destroy强制停止虚拟交换机
virsh net-define根据xml文件创建虚拟网络
virsh net- rundefine删除一个虚拟网络设备
virsh net-edit修改虚拟交换机的配置
virsh net-autostart设置开机自启动

3)虚拟网桥创建(xml扩展标记语言)

注:官网手册 https://libvirt.org/format.html

直接看network中的nat就行,其他先用直接套用

~]# cd /etc/libvirt/qemu/networks
~]# vim 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.100' end='192.168.100.200'/>
 </dhcp>
</ip>
</network>
# vbr设备名
# 网桥的模式 mode='nat'可以上网
# bridge name='vbr':ifconfig可以看到的名字
# address,netmask:网桥的IP地址与子网掩码
# range start=开始ip,end=结束ip
​
## 创建网桥设备
~]# virsh net-define /etc/libvirt/qemu/networks/vbr.xml 
Network vbr defined from /etc/libvirt/qemu/networks/vbr.xml
​
# 查看网桥设备
~]# virsh net-list  --all
Name                 State      Autostart     Persistent
----------------------------------------------------------
vbr                  inactive   no            yes
​
--all   显示所有网桥因为没有设置开启
# Name 网桥名;State 启动状态(inactive【没有启动】);Autostart 是否开机自启
## 设置开启自启
~]# virsh net-autostart vbr
Network vbr marked as autostarted
​
~]# virsh net-list --all
Name                 State      Autostart     Persistent
----------------------------------------------------------
vbr                  inactive   yes           yes
## 启动网桥
~]# virsh net-start vbr
Network vbr started
​
## 查看是否启动
~]# virsh net-list 
Name                 State      Autostart     Persistent
----------------------------------------------------------
vbr                  active     yes           yes
~]# ifconfig
vbr: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
     inet 192.168.100.254  netmask 255.255.255.0  broadcast 192.168.100.255
     ether 52:54:00:a8:36:ce  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
#  active  启动
## 修改网桥设备
~]# virsh net-edit vbr
Network vbr XML configuration not changed.
​
## 重启生效
~]# virsh net-destroy vbr
Network vbr destroyed
~]# virsh net-start vbr
Network vbr started

2.虚拟机配置管理

1)创建虚拟机配置文件

官网文件参拷 https://libvirt.org/format.html

~]# vim node_bash.xml
  <name>node_base</name>
  <memory unit='KB'>2248000</memory>
  <currentMemory unit='KB'>2248000</currentMemory>
  <vcpu placement='static'>2</vcpu>
  <os>
    <type arch='x86_64' machine='pc'>hvm</type>
    <boot dev='hd'/>
    <bootmenu enable='yes'/>
    <bios useserial='yes'/>
  </os>
  <features>
    <acpi/>
    <apic/>
  </features>
  <cpu mode='host-passthrough'>
  </cpu>
  <clock offset='localtime'/>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>restart</on_crash>
  <devices>
    <emulator>/usr/libexec/qemu-kvm</emulator>
    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2'/>
      <source file='/var/lib/libvirt/images/node_base.img'/>
      <target dev='vda' bus='virtio'/>
    </disk>
    <interface type='bridge'>
      <source bridge='vbr'/>
      <model type='virtio'/>
    </interface>
    <channel type='unix'>
      <target type='virtio' name='org.qemu.guest_agent.0'/>
    </channel>
    <serial type='pty'></serial>
    <console type='pty'>
      <target type='serial'/>
    </console>
    <memballoon model='virtio'></memballoon>
  </devices>
</domain>
​
​
# <domain ...>证明是一个kvm的虚拟机
# <name....>虚拟机的名字
# <memory..>虚拟最大内存;<currentMemory...>虚拟机有效内存;一般生产环境当两个内存相同时最合适(测试环境可不同;如该服务最少几个G能起来【8:2】)
# <vcpu...> 几CPU
# <os...> 系统启动引导配置;32位的64位的系统的区别;32位代表2的32次幂的字长(4G),最大只能识别4G;64位就是2的64次幂的字长(16E);所以arch='x86_64';machine=类型;boot dev=硬盘驱动(hd)【cdrom光驱启动{可装windows}】,<bootmenu 菜单管理;<bios bios管理;
# <features> 电源(配置休眠策略);
# <cpu mode=cpu类型(host-passthrough表示使用真机的cpu)
# <clock offset='localtime'>使用本机的时间
# <on_poweroff...><on_reboot...><on_crash..>重置,重启,电源(相当于服务器上的电源)
​
##<devices>定义硬件设备
#<emulator>仿真程序的路径;
# <disk...>定义虚拟机硬盘路径<source...>;<target...> 设备的识别名,设备的种线与驱动;
#<interface ..>网卡配置;<source bridge=默认vbr可写多个不同的设备
#  <channel..>虚拟机的管理程序
# <console>;<memballoon>连接设备

2)创建虚拟机

~]# cp node_bash.xml /etc/libvirt/qemu/vmhost.xml
~]# virsh define /etc/libvirt/qemu/node_base.xml
Domain vmhost defined from /etc/libvirt/qemu/node_base.xml
​
~]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 -     vmhost                         shut off
# 开启虚拟机
~]# virsh start vmhost
Domain vmhost started
~]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 -     vmhost                         running
 
 # 进入虚拟机
 ~]# virsh console vmhost
 注:多拍几次回车密码与用户会显示在屏幕上

3)虚拟机管理命令

命令说明
virsh list --all列出虚拟机
virsh start/shutdown启动/关闭虚拟机
virsh destroy强制停止虚拟机
virsh define/undefine创建/删除虚拟机
virsh ttyconsole显示终端设备
virsh console连接虚拟机console
virsh edit修改虚拟机配置
virsh autostart设置虚拟机自启动
virsh dominfo查看虚拟机摘要信息
virsh domiflist查看虚拟机网卡信息
virsh domblklist查看虚拟机硬盘信息

# 查看虚拟机网卡信息
~]# virsh domiflist vmhost
Interface  Type       Source     Model       MAC
-------------------------------------------------------
vnet0          bridge     vbr        virtio      52:54:00:2e:bc:20
~]# ifconfig
vnet: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        ether 52:54:00:a8:36:ce  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
​
# 查看虚拟机硬盘信息
~]# virsh domblklist vmhost
Target     Source
------------------------------------------------
vda        /var/lib/libvirt/images/node.img
​
# 修改虚拟机配置
~]# virsh edit vmhost
Domain vmhost XML configuration not changed.
​
# 删除虚拟机
 ~]# virsh undefine vmhost
Domain vmhost has been undefined
~]# virsh list --all
 Id    Name                           State
----------------------------------------------------

3.写一个脚本以后就可以直接创建

~]# vim clone.sh 
#!/bin/bash
cd /var/lib/libvirt/images
qemu-img create -f qcow2 -b master.qcow2 ${1}.img 30G
sed "s,node_base,${1}," node_bash.xml > /etc/libvirt/qemu/${1}.xml
virsh define /etc/libvirt/qemu/${1}.xml
# 执行测试
~]# mv node_bash.xml /var/lib/libvirt/images
~]# ./clone.sh keke
Formatting 'keke.img', fmt=qcow2 size=32212254720 backing_file='cirros.qcow2' encryption=off cluster_size=65536 lazy_refcounts=off 
Domain keke defined from /etc/libvirt/qemu/keke.xml
​
~]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 -     keke                           shut off

修改脚本1

~]# vim clone.sh
#!/bin/bash
if (( $# == 1 ));then
  cd /var/lib/libvirt/images
  qemu-img create -f qcow2 -b master.qcow2 ${1}.img 30G
  sed "s,node_base,${1}," node_base.xml >/etc/libvirt/qemu/${1}.xml
  virsh define /etc/libvirt/qemu/${1}.xml
else
  echo $0 vmname
fi

修改脚本2

~]# vim clone.sh 
#!/bin/bash
read -p "请输入要创建的名字:" keke
if (( $? == 0 ));then
   for i in $(echo $keke)
   do  
     cd /var/lib/libvirt/images
     qemu-img create -f qcow2 -b master.qcow2 ${i}.img 30G
     sed "s,node_base,${i}," node_bash.xml > /etc/libvirt/qemu/${i}.xml
     virsh define /etc/libvirt/qemu/${i}.xml
   done
else
   echo $0 输入错误 
fi
~]# mv clone.sh /usr/sbin/clone
​
## 测试
~]# clone 
请输入要创建的名字:node1 node2 node3 node4
Formatting 'node1.img', fmt=qcow2 size=32212254720 backing_file='cirros.qcow2' encryption=off cluster_size=65536 lazy_refcounts=off 
Domain node1 defined from /etc/libvirt/qemu/node1.xml
​
Formatting 'node2.img', fmt=qcow2 size=32212254720 backing_file='cirros.qcow2' encryption=off cluster_size=65536 lazy_refcounts=off 
Domain node2 defined from /etc/libvirt/qemu/node2.xml
​
Formatting 'node3.img', fmt=qcow2 size=32212254720 backing_file='cirros.qcow2' encryption=off cluster_size=65536 lazy_refcounts=off 
Domain node3 defined from /etc/libvirt/qemu/node3.xml
​
Formatting 'node4.img', fmt=qcow2 size=32212254720 backing_file='cirros.qcow2' encryption=off cluster_size=65536 lazy_refcounts=off 
Domain node4 defined from /etc/libvirt/qemu/node4.xml
​
~]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 -     node1                          shut off
 -     node2                          shut off
 -     node3                          shut off
 -     node4                          shut off

批量删除

 ~]# vim remove.sh 
#!/bin/bash
virsh list --all |  awk 'NR>2{print $2}' | xargs -i  virsh undefine {}
~]# chmod +x remove.sh
~]# ./remove.sh
​
Domain node1 has been undefined
​
Domain node2 has been undefined
​
Domain node3 has been undefined
​
Domain node4 has been undefined
​
Domain node_base has been undefined
​
[root@VM-0-98-centos ~]# virsh list --all
 Id    Name                           State
----------------------------------------------------

4.安装会总:

1)装包,与测试是否支持虚拟化

2)创建后端盘并连接一个

文件位置 :/var/lib/libvirt/images

3)创建虚拟机配置文件

文件位置 :/etc/libvirt/qemu/

4)使用方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值