设为首页 收藏本站
云服务器等爆品抢先购,低至4.2元/月
查看: 2304|回复: 0

[经验分享] kvm虚拟化框架结构层次梳理及图形化的使用

[复制链接]

尚未签到

发表于 2017-11-3 13:18:03 | 显示全部楼层 |阅读模式
关于kvm知识做一次简单梳理回顾,首先了解kvm是什么?

    kvm的全称是Kernel-based Virtual Machine,从字面意思理解是基于kernel内核的虚拟机,其实是Linux内核模块,此模块在系统中的表现为虚拟字符设备/dev/kvm,使得Linux kener工作表现为hypervisor一个管理程序,在用户空间可通过系统调用API,与内核中的kvm模块交互,,从而完成虚拟机的创建,启动,停止,删除等各种管理功能,我们通常不能直接利用API做管理,于是工作在用户空间的qume-kvm进程担负了与用户交互的职责,由她来负责与内核模块交互。

值得注意的是,此模块从 Linux 2.6.20 版本作为模块被包含在 Linux 内核中,且需要支持虚拟化扩展的 CPU。
kvm是redhat公司完全开源的虚拟化技术,官网(http://www.linux-kvm.org)中这样描述:

Here is the setup which is used with kvm and qemu. Qemu can run as standalone,
with kqemu module or with kvm module. In normal mode,
only the user code is executed directly and the kernel code is still dynamically translated by QEMU.When KQEMU runs in full virtualization mode,
both guest kernel and user code are executed directly on the host CPU.
When run with kvm module, the CPU extensions (svm or vmx) are used.

    意思说这是与kvm和qemu一起使用。 Qemu可以独立运行,使用kqemu模块或kvm模块。 在正常模式下,仅直接执行用户指令,内核指令仍然由QEMU动态翻译。 当KQEMU以完全虚拟化模式运行时,客户端内核和用户代码都将直接在主机CPU上执行。 当使用kvm模块运行时,将使用CPU扩展(svm或vmx)。

接下来看,如何快速简单使用kvm?

    查看内核中是否支持官方所要求的cpu虚拟化:

    # grep -E -i "(svm|vmx)" /proc/cpuinfo 只要出现svm或vmx字样即可
        flags        : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36
        clflush dts mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon
        pebs bts nopl xtopology tsc_reliable nonstop_tsc aperfmperf eagerfpu pni pclmulqdq
        vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave a
        vx f16c rdrand hypervisor lahf_lm abm ida arat epb pln pts dtherm tpr_shadow vnmi ept
        vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 invpcid xsaveopt

    查看模块信息:

    # modinfo kvm 查看是否存在
        license:        GPL
        author:         Qumranet
        rhelversion:    7.3
        srcversion:     F0E855E5535DA469A9D8C37
        depends:        irqbypass
        intree:         Y
        vermagic:       3.10.0-514.el7.x86_64 SMP mod_unload modversions
        signer:         CentOS Linux kernel signing key

    加载模块:

    # modprobe kvm

    查看模块:

    # lsmod |grep kvm 可看到如下模块则已经加载成功
        kvm_intel             170181  0
        kvm                   554609  1 kvm_intel
        irqbypass              13503  1 kvm

    查看是否输出为设备接口:

    # ls /dev/kvm 查看是否是将内核模块输出为一个字符设备,彻底沦为hypervisor管理接口

    内核模块准备就绪,安装用户空间所需的交互管理组件?

# yum info qemu-kvm

# yum install kvm libvirt python-virtinst qemu-kvm virt-viewer bridge-utils

kvm虚拟机图形化的使用,看下效果?

    安装图形化管理组件virt-manager

#yum install libvirt libvirt-daemon-kvm virt-manager 会自动依赖qemu-kvm,第一步启动deamon

    查看是否安装libvirt-daemon:

# rpm -ql libvirt-daemon  存在如下输出即为安装成功
    /etc/libvirt
    /etc/libvirt/libvirtd.conf
    /etc/libvirt/virtlockd.conf
    /etc/libvirt/virtlogd.conf
    /etc/logrotate.d/libvirtd
    /etc/sysconfig/libvirtd
    /etc/sysconfig/virtlockd
    /etc/sysconfig/virtlogd
    /usr/lib/sysctl.d/60-libvirtd.conf
    /usr/lib/systemd/system/libvirtd.service

    启动libvirt-daemon进程:

    # systemctl restart libvirtd.service

    查看ifconfig信息生成一个桥,nat功能桥:

    # ifconfig 查看是否存在virbr0
        virbr0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255
        ether 52:54:00:9f:ca: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

    查看iptables规则会生成一些nat规则MASQUERADE地址伪装

    # iptables -vnL 查看关于virbr0的一些自动生成的规则
        Chain INPUT (policy ACCEPT 1029 packets, 73235 bytes)
         pkts bytes target     prot opt in     out     source               destination         
            0     0 ACCEPT     udp  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            udp dpt:53
            0     0 ACCEPT     tcp  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            tcp dpt:53
            0     0 ACCEPT     udp  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            udp dpt:67
            0     0 ACCEPT     tcp  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            tcp dpt:67

        Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
         pkts bytes target     prot opt in     out     source               destination         
            0     0 ACCEPT     all  --  *      virbr0  0.0.0.0/0            192.168.122.0/24     ctstate RELATED,ESTABLISHED
            0     0 ACCEPT     all  --  virbr0 *       192.168.122.0/24     0.0.0.0/0           
            0     0 ACCEPT     all  --  virbr0 virbr0  0.0.0.0/0            0.0.0.0/0           
            0     0 REJECT     all  --  *      virbr0  0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable
            0     0 REJECT     all  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable

    如果是您安装的是图形化界面,则执行如下命令即可打开图形化

    # virt-manager

虚拟化技术的几种分类:

    1.模拟:Emulation模拟器

    qemu,pearpc,bochs

    2.完全虚拟化:full virtualization

    bt/kvm

    3.半虚拟化:para-virtualization

    特点:guestos明确知道运行于虚拟环境
    xen,接近于硬件性能

    4.库级别虚拟化

    wine

    5.程序级虚拟化

    jvm,pvm,...

类似openstack云虚拟:通俗的可以理解为一组主机运行虚拟化,监控管理一组主机的虚拟机实例的接口:cloudOs无需关心底层的硬件设施

    云虚拟化的一些分类:

IaaS,PaaS,SaaS...

简单了解kvm虚拟cpu架构:

------------------------------
|Guest Memory | \            |
--------------|  |Hyper-visor|
|VCPU  |VCPU  |  |Process    |
|Thread|thread| / (thread)   |
----↓------↓---------↓-------|
|     KVM     | Linux Kernel |
----↓------↓---------↓--------
| CPU | | CPU |     |  CPU   |
------- -------     ----------

虚拟cpu的表现形式:虚拟机的每个虚拟cpu核心表现为物理机的一个thread线程,配置虚拟机CPU核心应与物理机相同最佳,如若多出反而性能下降

    kvm详细架构:

____________________________________     ______________________
|User mode                           |   |Guest mode            |
| _______  __________________________|  /| ____________________ |
||Linux  ||Linux Process(VM launcher)| / ||Virtual Machine     ||
||Process||        ____________   _/——   || __________________ ||
||       ||       |Guest memory|→|_      |||Guest memory      |||
||       ||       |______↓_____|   \——   |||______user mode___|||
||       ||       |   I/O Ops  |     | \ |||       kernel     |||
||       ||       |__↓_____↓___|     |  \|||________↓_________|||
||_______||  ←-------/     ↓         |   ||_________↓__________||
———————————↓——————————————↓—————————|   |          ↓           |
| __________↓______________↓________ |   |          ↓           |
||Linux Kernel       ______↓___     ||   |          ↓           |
||                  |KVM Dirver|←--------←----------/           |
||__________________________________||   |                      |
|Kernel mode_________________________|   |______________________|

由图中可看kvm内核模块与用户空间是如何协同工作的,在原有用户空间概念的基础上新增了访客模式,在访客模式内存在独立的用户及内核空间(为节省存储架构图为字符手打,可能显示稍怪异)。

    还有一种半虚拟化解决方案?

virtio:redhat主导开源半虚拟化解决框架

virtio-blk(块虚拟) virtio-net(网络) virtio-pci virtio-ballon(容量) virtio-console(控制台半虚拟化)
   \____________________↓______________/_______________/____________________________/
                      virtio
                        ↓
                     transport
                         ↓
                virtio backend drivers

    KVM管理工具架构:在用户空间也用于与内核kvm模块交互的工具不仅只有qemu工具,存在一众其他组件,比如图形化的virt-manager。

________________________________________________________________________________  _____    _________
|Virtual Machine            ____________________________________________________ ||virsh|  |Qume     |
|   Manager                |virtinst                                            |||     |  | _  _  _ |
| ____________  __________ | ____________  __________  __________  ____________ |||     |  ||Q||Q||Q||
||virt-manager||virt-viwer|||virt-install||virt-clone||virt-image||virt-convert||||__↓__|_ ||u||u||u|| ———————————
| ——libvirt———  —libvirt—— | ——libvirt———  ——libvirt—  —libvirt——  ——libvirt——— |||libvirt|||m||m||m|||Guest|Guest|
—————↓————————————↓——————————————↓————————————↓———————————↓———————————↓——————————————↓———|||e||e||e|| ——↓—— ——↓——
|                              libvirtd                                                   |||k||i||i|||qume |qume |
—————————————————————————————————↓———————————————————————————————————————————————————————|||v||m||o|| ——↓—————↓——
|                              libvirt                                                    |||m||g| — |   ↓     ↓  |
————————————————————————————————————————————————————————————————————————————————————————————↓——↓——↓—————↓—————↓——
|                                                 KVM                                                             |
—————————————————————————————————————————————————————————————————————————————————————————————————————————————————

最近遇到kvm相关的问题,便将一些虚拟化相关的结构层次的东西梳理回顾一下,主要是思路上的理解。架构图片为字符在不同的设备可能出现怪异的景象。好记性不如烂笔头,遇到问题不要怕理性对待,多多总结,理清关系,愿普天之下的各位Linuxer工作顺利,永不宕机!





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-406508-1-1.html 上篇帖子: kvm制作Centos7.4镜像 下篇帖子: kvm安装windows卡在start windows 界面
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表