当前位置:   article > 正文

云计算底层和虚拟化管理_云服务器底层是怎么实现的

云服务器底层是怎么实现的

1.云计算底层技术

1.1虚拟技术介绍

虚拟化技术是一种资源管理方法,它允许在单一物理硬件平台上运行多个独立的操作系统实例,这些实例被称为虚拟机

1.1.1常见虚拟化技术
系列PC/服务器版代表
VMwareVMware Workstation、vSphere
MicrosoftVirtualPC、Hyper-V
RedHatKVM、RHEV
CitrixXen
OracleOracle VM VirtualBox
1.1.2虚拟化与云计算的关系
  • 虚拟化:虚拟化是一种技术,将不可拆分的实体资源变成可以自由划分的逻辑资源,从而实现资源的整合、隔离、再分配,云计算就是利用虚拟化技术这个特点
  • 云计算:是一种服务模式——基础设施服务(IAAS),将各种资源整合起来,租给用户,如处理器(CPU)、内存、存储、网络和其他基本计算资源。通过虚拟化手段经这些资源分割打包提供给用户使用

1.2虚拟平台安装

真机(windows/linux)

在真机中创建虚拟机,内部虚拟机通过划分可用资源,如设置虚拟网桥,使得内层虚拟机可以访问外网。

在这里插入图片描述

1.2.1验证是否支持虚拟化
  • Linux:创建虚拟机最低配置:2CPU,4G内存

  • Windows:常见错误(VMware CPU 没有启用虚拟化支持

    • windows:右键——任务管理器——CPU——虚拟化(已启用)

      处理器:引擎——虚拟化Intel

//linux虚拟化
grep -Po "vmx | svm" /pro/cpuinfo
-E  支持拓展正则
-P  支持Perl正则
-o  显示行中非空匹配部分
/pro/cpuinfo  cpu详细信息文件

lsmod | grep kvm  查看是否有kvm模块

lsmod      //查看内核模块
modprobe   //装载内核模块,内核模块是高度封装的,只能装载或卸载
rmmod      //卸载内核模块,类似umount
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
1.2.2安装虚拟化平台
  • KVM/qemu/Libvired
    • KVM是linux内核模块,需要CPU指令集(Intel-VT/AMD-V)支持,是一种硬件辅助虚拟化技术
    • QUME 是一种虚拟化仿真工具,通过IOctl(输入输出)与内核模块交互完成对硬件的虚拟化支持
    • Libvirt 是对虚拟化管理的接口的工具,提供客户端程序,virsh,virsh-manager
//虚拟化平台安装
dnf -y install              \
qemu-kvm                    \      //虚拟化仿真程序
libvirt-daemon              \      //核心守护进程
libvirt-client              \      //客户端程序
libvirt-daemon-driver-qemu  \   //QEMU管理模块
libvirt-daemon-driver-netwoek \  //网络管理模块
dnsmasq                        //DHCP、DNS服务

systemctl enable libvirtd  --now  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • virsh
    • 提供管理各虚拟机的命令接口
    • 支持交互/非交互模式,查看/创建/停止/关闭
    • 格式:virsh 控制命令 [资源名] [参数]
virsh version  //查看虚拟化相关版本信息
Compiled against library: libvirt 8.0.0
Using library: libvirt 8.0.0
Using API: QEMU 8.0.0
Running hypervisor: QEMU 6.2.0
  • 1
  • 2
  • 3
  • 4
  • 5

2.虚拟化网络

2.1虚拟网络管理命令

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

2.2创建网桥

  • 问AI(Libvirt XML 配置)
  • 官网复制(https://libvirt.org/docs.html——>networks)
  • 云主机不能nmcli、nmtui ,只能在web页面修改,关机修改,云平台dhcp分配的是永久ip
//网桥配置文件书写,文件名对应创建的网桥名称,根据模板修改
vim /etc/libvirt/qemu/networks/vbr.xml
<network>
  <name>vbr</name>      //显示的virsh net-list 虚拟网络中的名称
  <bridge name="vir" stp='on' delay='0'/>  //显示的ifconfig中的网卡名称
  <forward mode="nat"/>
  <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>
  <ip family="ipv6" address="2001:db8:ca2:2::1" prefix="64"/>
</network>

//stp='on': 这个属性表示生成树协议(Spanning Tree Protocol, STP)是否启用
//delay='0': 这个属性定义了STP重新计算网络拓扑结构前等待的时间(单位为秒)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
//创建配置文件中声明的网桥
virsh net-define /etc/libvirt/qemu/networks/vbr.xml
Network vbr defined from /etc/libvirt/qemu/networks/vbr.xml

//启动网桥
virsh net-start vbr
Network vbr started

//设置开机自启
virsh net-autostart vbr

//查看网桥状态
virsh net-list --all
 Name   State    Autostart   Persistent
-----------------------------------------
 vbr    active   yes         yes
 
 //验证
 ifconfig  vbr
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

3.虚拟机原理

3.1虚拟机的构成

  • 虚拟配置文件(*.xml)
    • 文件默认路径:/etc/libvirt/qemu/
    • 用途:定义了虚拟机的设备,如:CPU、内存、网卡等
  • 存储文件(*.img)
    • 文件默认路径:/var/lib/libvirt/images/
    • 用途:仿真虚拟机磁盘,存储所有数据信息
创建vmhost虚拟机
1.创建虚拟配置文件   /etc/libvirt/qemu/vmhost.xml
2.创建存储文件      /var/lib/libvirt/images/vmhost.xml
  • 1
  • 2
  • 3

3.2虚拟机磁盘

  • 虚拟机磁盘可以使用块设备、逻辑卷设备、文件仿真等。
  • 其中文件仿真模式具有易迁移、易扩展、支持多种磁盘格式、配置方便等特点。广泛应用与云平台
  • 在文件仿真中采用COW格式具有:
    • 支持弹性空间
    • 支持后端盘复用
    • 支持快照
    • 支持压缩

3.3COW写时拷贝技术

  • 在COW机制中,写操作会导致数据从后端盘复制到前端盘,然后在前端盘上进行修改,而不是从前端盘复制到后端盘。这样可以避免不必要的数据移动,同时保持原始数据的完整性。
  • 只有在数据真正被修改时才进行复制
  • cow技术使用指针指向原始盘所有块,若一个块要被改写,首先将数据从原始盘拷贝到前端盘,在前端盘改写,最后将数据指针指向改写过的数据。此时数据存储在前端盘的新副本中,而不是后端盘的原始数据块
  • 原始盘始终是只读的

在这里插入图片描述

3.3虚拟机配置管理

3.3.1虚拟机磁盘管理
  • qemu-img 是虚拟机的磁盘管理命令,磁盘格式:raw、qcow2、vdi、vmdk等
  • qemu-img命令格式
    • qemu-img 子命令 子命令参数 块文件名称 大小
  • 常用子命令
    • create 创建一个磁盘
    • info 查看磁盘信息
//上传cirros.qcow2到虚拟机
cp cirros.qcow2 /var/lib/libvirt/images/
cd cirros.qcow2 /var/lib/libvirt/images/

//创建磁盘
qemu-img create -F qcow2 -f qcow2 -b cirros.qcow2 vmhost.img 20G
Formatting 'vmhost.img', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=21474836480 backing_file=cirros.qcow2 backing_fmt=qcow2 lazy_refcounts=off refcount_bits=16



//查看信息,实际大小不会是20G,因为弹性空间
qemu-img info vmhost.img
image: vmhost.img
file format: qcow2
virtual size: 20 GiB (21474836480 bytes)
disk size: 196 KiB
cluster_size: 65536
backing file: cirros.qcow2
backing file format: qcow2
Format specific information:
    compat: 1.1
    compression type: zlib
    lazy refcounts: false
    refcount bits: 16
    corrupt: false
    extended l2: false



//读取操作会先查找前端盘的差分映像vmhost.img , 如果未找到才会找后端盘的cirros.qcow2,此时
写入操作只会写入vmhost.img
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
3.3.2虚拟机配置文件
  • 官网复制(https://libvirt.org/docs.html——>node devices)
cp node_base.xml /etc/libvirt/qemu/vmhost.xml
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>  //CPU数量
25: <source file='/var/lib/libvirt/images/vmhost.img'/> //磁盘文件路径
29: <source bridge='vbr'/>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
3.3.3创建虚拟机
管理内层虚拟机命令说明
virsh list [–all]列出所有虚拟机
virsh start/shutdown启动/关闭虚拟机
virsh destory强制停止虚拟机
virsh define/undefine创建/删除虚拟机
virsh console连接虚拟机的console
virsh edit修改虚拟机的配置
virsh autostart设置虚拟机自启动
virsh domiflist查看虚拟机网卡信息
virsh dominfo查看虚拟机摘要信息
virsh domblklist查看虚拟机硬盘信息
virsh define /etc/libvirt/qemu/vmhost.xml  //创建虚拟机
Domain 'vmhost' defined from /etc/libvirt/qemu/vmhost.xml

virsh start vmhost      //启动虚拟机,状态由shut off变为running
Domain 'vmhost' started

virsh console vmhost     //两次回车
Connected to domain 'vmhost'
Escape character is ^] (Ctrl + ])

login as 'cirros' user. default password: 'gocubsgo'. use 'sudo' for root.
cirros login: cirros
Password: gocubsgo
$    
PS1='[\u\h \W]\$'
[rootcirros ~]#
shift + ] 退出登陆填写密码状态栏

//默认进去是$普通用户,需要sudo -i 变为#,可以修改$PS1系统变量调整样式
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
3.3.4创建虚拟机脚本
vim /usr/local/bin/vm
#!/bin/bash
cd /var/lib/libvirt/images/
qemu-img create -F qcow2 -f qcow2 -b cirros.qcow2 ${1}.img 20G
sed "s,#####,${1}," /root/node_base.xml > /etc/libvirt/qemu/${1}.xml
virsh define /etc/libvirt/qemu/${1}.xml


chmod 0755 /usr/local/bin/vm
vm vmhost.xml

virsh list --all
 Id   Name     State
-------------------------
 -    vmhost   shut off

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

4.公有云概述

4.1云服务类型

模式说明
IaaS基础设施服务
PaaS平台服务
SaaS软件服务

4.2三大服务模式

4.2.1 IaaS——基础设施即服务

IaaS提供计算资源的基础设施,如虚拟机、存储空间、网络和操作系统,以及一些基本的网络组件如虚拟路由器和firewalld。用户可以根据需要租用这些资源,并自行安装操作系统、中间件、运行时、数据管理软件和其他所需的软件。

4.2.2 PaaS——平台即服务

PaaS提供了一个完整的开发和部署环境,包括操作系统、数据库、开发工具和运行时环境。开发人员可以利用 PaaS 来构建、测试和部署应用程序,而无需关心底层的基础设施。PaaS 解决方案通常包括应用程序服务器、数据库服务、开发框架和 API

4.2.3 SaaS——软件即服务

SaaS 是通过互联网提供的软件应用程序,用户无需安装和维护软件,只需订阅即可使用。SaaS 供应商负责管理应用程序的可用性、安全性、可扩展性和维护。

4.3三大使用场景

介绍
公有云是第三方的云供应商,通过互联网为广大用户提供的一种按需使用的服务器资源,是一种云基础设施。
私有云是一个企业或组织的专用云环境。一般在企业内部使用,不对外提供服务,因此它也被视为一种企业云。
混合云是在私有云的基础上,组合其他公有云资源,从而允许在不同云环境之间共享应用和数据的使用方式。

5.能力提升

编写一个脚本用来管理虚拟机,可以完成虚拟机的批量创建、批量删除,自定义虚拟机名称等功能,现有的模板虚拟机信息如下:

配置文件模板:/var/lib/libvirt/images/node_base.xml
后端盘模板: /var/lib/libvirt/images/node_base.qcow2
  • 1
  • 2
[root@localhost ~]# vim /usr/local/bin/clone-vm
#!/bin/bash
CONF_DIR="/etc/libvirt/qemu"
IMG_DIR="/var/lib/libvirt/images"
CONF_FILE="/var/lib/libvirt/images/node_base.xml"
IMG_FILE="/var/lib/libvirt/images/node_base.qcow2"
export LANG=C
. /etc/init.d/functions
function create_vm(){
        if  [ -e ${IMG_DIR}/${1}.img ];then
            echo_warning
            echo "vm ${1}.img is exists"
            return 1
        else
           qemu-img create -b ${IMG_FILE} -F qcow2 -f qcow2
           ${IMG_DIR}/${1}.img 20G &>/dev/nl

            sed -re "s,#{5},${1}," ${CONF_FILE}                         >${CONF_DIR}/${1}.xml

           sudo virsh define ${CONF_DIR}/${1}.xml &>/dev/null
          echo_success
           echo "vm ${1} create"
        fi
    }
 function remove_vm(){
        read _ img <<<$(sudo virsh domblklist $1 2>/dev/null |awk 'NR==3{print}')
        if [ -e "${img}" ];then
            sudo virsh destroy  $1 &>/dev/null
            sudo virsh undefine $1 &>/dev/null
            rm -f ${img}
            echo_success
            echo "vm ${1} delete"
        fi
    }
    # main 
    case "$1" in
        create|remove)
        CMD=${1}
        while ((${#} > 1));do
            shift
            ${CMD}_vm ${1}
        done
        ;;
        *)
        echo "${0##*/} {create|remove} vm1 vm2 vm3 ... ..."
        ;;
    esac
    exit $?

验证

    [root@localhost ~]# chmod 755 /usr/local/bin/clone-vm
    [root@localhost ~]# virsh list --all
     Id    Name                           State
    ----------------------------------------------------
    [root@localhost ~]# clone-vm 
    clone-vm {create|remove} vm1 vm2 vm3 ... ...
    [root@localhost ~]# clone-vm create web db
    vm web create                                      [  OK  ]
    vm db create                                       [  OK  ]
    [root@localhost ~]# virsh list --all
     Id    Name                           State
    ----------------------------------------------------
     -     web                            shut off
     -     db                             shut off
    [root@localhost ~]# virsh start web
    Domain web started
    [root@localhost ~]# virsh start db
    Domain db started
    [root@localhost ~]# virsh list --all
     Id    Name                           State
    ----------------------------------------------------
     1     web                            running
     2     db                             running
    [root@localhost ~]# virsh console web
    Connected to domain 'web'
    Escape character is ^] (Ctrl + ])
    login as 'cirros' user. default password: 'gocubsgo'. use 'sudo' for root.
    cirros login:
    [root@localhost ~]# clone-vm remove web db
    vm web delete                                             [  OK  ]
    vm db delete                                              [  OK  ]
    [root@localhost ~]# virsh list --all
     Id    Name                           State
    ----------------------------------------------------
    [root@localhost ~]#
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86

磁盘读取/写入,在写入时拷贝数据

速度快前端盘使用了指针(快捷方式),只能读,不能写

读操作只是创建指针,指向原始盘的数据

弹性空间:根据数据的增加,改变大小,节约资源

原始盘类型 原始盘名称 克隆

内层虚拟机网卡eth0链接真机的vnet0,然后通过vnet0链接vbr

cow链接克隆,快速,相较于原虚拟机,占用内存空间大大缩小

cp 完整克隆

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/1005968
推荐阅读
相关标签
  

闽ICP备14008679号