不是科班出身,误打误撞做了程序员,很普通那种,之前多数时候用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 命令行工具