热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

偶遇KVM,初识虚拟化

  不是科班出身,误打误撞做了程序员,很普通那种,之前多数时候用C,写一些无关痛痒的命令行。虽然行业是网络安全,听起来感觉很厉害,但实际上所掌握的相关内容零零散散的也不成个体系。五

    不是科班出身,误打误撞做了程序员,很普通那种,之前多数时候用C,写一些无关痛痒的命令行。虽然行业是网络安全,听起来感觉很厉害,但实际上所掌握的相关内容零零散散的也不成个体系。五年前入职公司的时候连ip和mask都闹不明白,网络分层也不懂,配个路由加个iptables策略也得到处问同事。人性的懒惰,加上也没有那么上进的性格,领导分配什么就认认真真完成,多一点都不干。仗着智商还在线,也不怎么加班程序员的日子过得还不错。2020年初,大疫。每天憋在家,刷刷知乎,看看网页。到处有人贩卖焦虑,没有35岁的程序员,40岁的人不可能写代码什么的。我一寻思,要淘汰的可不就是我这样的么。

    去年秋天开始,跟我们部门一大师傅做虚拟化项目。本来也轮不上我,因为我会点python语法,偶尔自己写个小脚本啥的省了人工重复操作的事。别人都只是用C嘛,所以这个项目大师傅想用python来做,我就走马上任专职打杂来着。初始虚拟化,一脸懵B。听起来特别高大上,完全不懂啥意思,平时就用个VMware虚拟机,有些配置还用的磕磕巴巴的。我们大师傅嘛喜欢很多东西都把控的紧紧的,我大概只能接触到若干个点。在我的中年危机刺激下,我渐渐的从一个点已经摸到了一条线。反正这个博客呢也没有人看,就是我自己叨叨叨的一个平台吧。后面有时间我就用白话,把我每个小感悟,每一个新的知识点都穿在这。我想把这些点穿成线,再把这些线编织成一个平面。

《==============================================我是中年大妈叨叨叨的分割线==================================================》

    书归正传,因为查了一些资料,这一篇我简单说一下我对虚拟化的理解。

    ① 什么是虚拟化?

    答:白话讲就是把硬件虚拟成多个,可以在一套硬件上面建立多个操作系统,在每个操作系统内都不会感知到它的硬件是与人共享的。

     关键字:宿主机--Host;虚拟机--Guest;中间管理层--Hypervisor; 

    ② 虚拟化的形式有哪些?

    答:我目前得到的知识看分为全虚拟化和半虚拟化。

      其中全虚拟化就是在硬件上面直接运行一套hypervisor(Hypervisor是一个定制的操作系统),然后上面再运行若干个虚拟机;Xen 和 VMWare 的 ESXi 都属于全虚拟化。

   半虚拟化就是硬件要跑宿主机操作系统,而虚拟机管理层Hypervisor作为一个应用程序运行的,每一个运行的虚拟机也是一个进程。KVM、VirtualBox 和 VMWare Workstation则 属于半虚拟化。

   两个形式各有优点。全虚拟化基于硬件优化,性能更高,但是貌似宿主机要修改一些指令以防冲突;半虚拟化比较灵活,虚拟机全程无感操作(怎么写到这里脑海里忽然飘过always水感卫生巾的广告┭┮﹏┭┮),而且半虚拟化可以在虚拟机里再安装虚拟机。这个我周末回家里搞一下,在KVM里面装个KVM,然后我下一篇文章里面可以水一下过程( ̄▽ ̄)"

  ③ 什么是kvm?

  KVM 全称是 Kernel-Based Virtual Machine。也就是说 KVM 是基于 Linux 内核实现的。KVM有一个内核模块叫 kvm.ko,只用于管理虚拟 CPU 和内存。那 IO 的虚拟化,比如存储和网络设备则是由 Linux 内核与Qemu来实现。

  网上看 KVM 相关文章的时候肯定经常会看到 Libvirt 这个东西。Libvirt 就是 KVM 的管理工具。其实,Libvirt 除了能管理 KVM 这种 Hypervisor,还能管理 Xen,VirtualBox 等。

  Libvirt 包含 3 个东西:后台 daemon 程序 libvirtd、API 库和命令行工具 virsh。

    libvirtd是服务程序,接收和处理 API 请求;

    API 库使得其他人可以开发基于 Libvirt 的高级工具,比如 virt-manager,这是个图形化的 KVM 管理工具;

    virsh 是我们经常要用的 KVM 命令行工具

 



推荐阅读
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 本文详细介绍了云服务器API接口的概念和作用,以及如何使用API接口管理云上资源和开发应用程序。通过创建实例API、调整实例配置API、关闭实例API和退还实例API等功能,可以实现云服务器的创建、配置修改和销毁等操作。对于想要学习云服务器API接口的人来说,本文提供了详细的入门指南和使用方法。如果想进一步了解相关知识或阅读更多相关文章,请关注编程笔记行业资讯频道。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 闭包一直是Java社区中争论不断的话题,很多语言都支持闭包这个语言特性,闭包定义了一个依赖于外部环境的自由变量的函数,这个函数能够访问外部环境的变量。本文以JavaScript的一个闭包为例,介绍了闭包的定义和特性。 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • Tomcat/Jetty为何选择扩展线程池而不是使用JDK原生线程池?
    本文探讨了Tomcat和Jetty选择扩展线程池而不是使用JDK原生线程池的原因。通过比较IO密集型任务和CPU密集型任务的特点,解释了为何Tomcat和Jetty需要扩展线程池来提高并发度和任务处理速度。同时,介绍了JDK原生线程池的工作流程。 ... [详细]
  • 本文介绍了作者在开发过程中遇到的问题,即播放框架内容安全策略设置不起作用的错误。作者通过使用编译时依赖注入的方式解决了这个问题,并分享了解决方案。文章详细描述了问题的出现情况、错误输出内容以及解决方案的具体步骤。如果你也遇到了类似的问题,本文可能对你有一定的参考价值。 ... [详细]
  • 有没有一种方法可以在不继承UIAlertController的子类或不涉及UIAlertActions的情况下 ... [详细]
  • Linux环境变量函数getenv、putenv、setenv和unsetenv详解
    本文详细解释了Linux中的环境变量函数getenv、putenv、setenv和unsetenv的用法和功能。通过使用这些函数,可以获取、设置和删除环境变量的值。同时给出了相应的函数原型、参数说明和返回值。通过示例代码演示了如何使用getenv函数获取环境变量的值,并打印出来。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
author-avatar
经来泓
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有