学习笔记8.16
openstack建立在虚拟机上,无法支持kvm,换成qemu
- 【cpu虚拟化】
内核要和用户程序分开,内核一定要安全,不能被用户程序干涉,但是有时候用户程序也需要读取内核的某些数据,怎么办呢?x86就引入了访问特权等级(0-3)的机制,
x86 cpu共有4个特权级 level0 到 level3 其中level0特权级最高,level3特权级最高。处理器通过识别CPL、DPL、RPL这3中种特权级进行特权级检验。
需直接访问内存和硬件的操作系统特权代码必须在Ring 0执行
1.全虚拟化:主要是在客户操作系统和硬件之间捕捉和处理那些对虚拟化敏感的特权指令,操作系统则被调降到 Ring 1
继续运行。整个过程其实就是vmm优先级压缩和二进制代码翻译的体现。
2.半虚拟化:需要对Guest OS进行修改,不用被调降到 Ring 1,
特级指令自动发给 VMM 的 Hypercall(超级调用)
3.CPU 硬件辅助虚拟化:root模式和非root模式 通常情况下,Guest OS 的核心指令可以直接下达到计算机系统硬件执行,而不需要经过 VMM,
特权敏感指令切换模式VM-exit
- 【kvm】
作为一个 Hypervisor,KVM 本身只关注虚拟机调度和内存管理这两个方面。IO 外设的任务交给 Linux 内核和 Qemu。
挂载vlomue
物理卷,卷组,逻辑卷
pv->vg->lv
storage pool->vloume
- 【filter】
1.retryfilter 重新选择时过滤调度过节点
2.availabilityzonefilter 机架过滤
3.ramfilter 内存要求(内存超配比ram_alloction_ratio=1.5)
4.diskfilter 硬盘要求 (硬盘超配比disk_alloction_ratio=1.0)即不超配
5.corefilter vcpu要求 (虚拟cpu_alloction_ratio=16.0)
6.computerfilter要求nova-computer 服务正常(废话)
7.computercapabilitiesfilter 根据flavor元数据 architecture 部署节点cpu架构
8.imagepropertiesfilter image的元数据 hypervisor 选择虚拟化技术
9.servergroupantiaffinityfilter 分散规则 servergroupaffinityfilter 集中规则
- 【weight】
空闲的内存量
- 【虚拟驱动】
cat /etc/nova/nova.conf | grep "compute_driver"
- 【instance操作】
nova-api=====>nova-schedule 调度====》computer flavor (其中network设备也会准备) image下载转换成raw qemu-img
/etc/libvirt/qemu libvirt.xml 创建虚拟网络
根据日志reqID跟踪操作
确定流程
界面的网络更像网桥
- 【libvirt】
libvirt 提供虚拟驱动层
libvirt学习中比较好的的网站
https://blog.csdn.net/weixin_34354173/article/details/90132267
- 【cpu】
https://cloud.tencent.com/developer/article/1452106
numactl --hardware cpu硬件
虚拟机里面看到和物理CPU一模一样的CPU品牌型号
CPU热添加的技术:
virsh setvcpus centos7 5 --live
openstack server create --flavor 42 --image 66baed9d-1c7d-457c-a422-5117da1caa0d --nic net-id=1269e08e-fc00-4004-b536-adc906facc22 --security-group 0b30e075-50bb-4d57-b7ba-ae2202c5f89e provider-instance
单核vcpu
<domain type="qemu"> //使用技术
<uuid>b0c3626c-5e01-46bf-9146-93134d9d766d</uuid> //虚拟机的id
<name>instance-0000000b</name> //内部名称 virsh list
<memory>65536</memory> //内存最大数
<vcpu>1</vcpu> //cpu核数
<metadata> //用户自己定义元数据,整体信息
<nova:instance xmlns:nova="http://openstack.org/xmlns/libvirt/nova/1.0">
<nova:package version="19.1.0"/>
<nova:name>provider-instance</nova:name>
<nova:creationTime>2019-08-09 04:25:24</nova:creationTime>
<nova:flavor name="m1.nano"> //flavor
<nova:memory>64</nova:memory>
<nova:disk>1</nova:disk>
<nova:swap>0</nova:swap>
<nova:ephemeral>0</nova:ephemeral> //?
<nova:vcpus>1</nova:vcpus>
</nova:flavor>
<nova:owner>
<nova:user uuid="55ba335d265c4e348f76c33043ccb4d2">admin</nova:user> //拥有者
<nova:project uuid="088a9a9b35c34e64831465ada4ce3b3e">admin</nova:project>
</nova:owner>
<nova:root type="image" uuid="66baed9d-1c7d-457c-a422-5117da1caa0d"/> //镜像文件
</nova:instance>
</metadata>
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
上面基本虚拟机信息,下面实现细节
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
0.主板信息
<sysinfo type="smbios"> //主板或系统制造者以标准格式显示产品管理信息所需遵循的统一规范
<system> //对应SMBIOS标准中的 System Information
<entry name="manufacturer">OpenStack Foundation</entry>
<entry name="product">OpenStack Nova</entry>
<entry name="version">19.1.0</entry>
<entry name="serial">b0c3626c-5e01-46bf-9146-93134d9d766d</entry>
<entry name="uuid">b0c3626c-5e01-46bf-9146-93134d9d766d</entry>
<entry name="family">Virtual Machine</entry>
</system>
</sysinfo>
1.准备启动盘
<os>
<type>hvm</type> //表示 Guest OS 需要 full virtualiaiton 支持
<boot dev="hd"/> //表示默认从硬盘启动
<smbios mode="sysinfo"/> #使用sysinfo单元中指定的值,"emulate":让qemu自动产生"host":从宿主机上拷贝SMBIOS的 Block 0和Block 1(UUID除外)
</os>
2.用于BIOS中激活或关闭主板APIC
<features>
<acpi/> Soft Reboot 需要 ACPI 的支持,否则只能使用 Hard reboot。
<apic/> 没 APIC 的话,Windows Guest 会在 Xen 或者 KVM 上崩溃。
</features>
3.精细的vcpu绑定物理核设定
<cputune>
<shares>1024</shares> //进程调度程序所处理的进程组设置CPU时间分配的比重
</cputune>
4.时区
<clock offset="utc"/> //时区
5.KVM关于CPU型号的定义
<cpu match="exact"> //custom 自己定义(默认)
<topology sockets="1" cores="1" threads="1"/>
</cpu>
<devices>
6.硬盘信息
<disk type="file" device="disk">
<driver name="qemu" type="qcow2" cache="none"/>
# 从 image 启动时候的启动盘(flavor.root_disk)
<source file="/opt/stack/data/nova/instances/b0c3626c-5e01-46bf-9146-93134d9d766d/disk"/>
<target bus="virtio" dev="vda"/>
</disk>
7.网络类型
<interface type="bridge">
<mac address="fa:16:3e:bc:c9:fc"/>
<model type="virtio"/> //虚拟设备
<driver name="qemu"/> //虚拟化工具
<source bridge="br-int"/> //二层设备
<mtu size="1450"/> //报文长度
<target dev="tap73be114a-4b"/> //网卡
<virtualport type="openvswitch"> //ovs
<parameters interfaceid="73be114a-4ba8-4a61-99c1-9fd532697dcb"/> // 连接的端口
</virtualport>
</interface>
8.console设备 连接设备
<serial type="pty">
<log file="/opt/stack/data/nova/instances/b0c3626c-5e01-46bf-9146-93134d9d766d/console.log" append="off"/> //log日志
</serial>
<graphics type="vnc" autoport="yes" listen="127.0.0.1"/> vnc
<video>
<model type="cirrus"/> //设备在虚拟机内部对应设备文件/dev/ttyS*
</video>
<memballoon model="virtio">
<stats period="10"/> //每十秒收集虚拟内存
</memballoon>
</devices>
</domain>