虚拟化

什么是KVM?

又称: Kernel-based Virtual Machine
定义

KVM is full hardware virtualisation built into the Linux kernel, giving each guest its own kernel and hardware-enforced isolation from other tenants. Because a KVM guest runs its own kernel, it can load kernel modules, run non-Linux operating systems, use real swap and support nested virtualisation.

为什么KVM很重要

由于 KVM 客户机运行自己的内核,它可以加载内核模块、运行非 Linux 操作系统、使用真正的交换空间并支持嵌套虚拟化。分配给 KVM 客户机的内存确实被保留,这是与基于容器的虚拟化的实际区别。

KVM的实际应用

运行 KVM 服务器时,第一件事是查看客户机里的 /proc/cpuinfo——如果和宿主机的不一致,你看到的很可能是半虚拟化的捷径,而不是完整的 KVM。你用真实预留来设置内存分配:超额分配会让客户机的 OOM killer 在宿主机看起来很空闲时触发。如果嵌套虚拟化配置错误,你会失去硬件辅助分页,客户机会以十分之一的速度运行。搞砸了,不重启就无法挽回性能损失。

人们对KVM常见的误解

人们以为 KVM 和 OpenVZ 或 LXC 一样,因为它们都用 Linux 内核。纠正一下:KVM 给每个客户机自己的内核,而容器共享宿主内核。只有 KVM 上才能加载内核模块、运行非 Linux 操作系统。共享命名空间的隔离不是硬件强制的。

KVM —— 常见问题

KVM 对性能意味着什么?

KVM 的硬件虚拟化意味着每个客户机有自己的内核,所以 CPU 和内存性能接近原生。内存是真正的预留,不是共享的。与容器相比,你可以期待可预测、隔离的吞吐量。

可以在 KVM 上跑 Windows 吗?

可以,KVM 客户机运行自己的内核,所以可以运行诸如 Windows 之类的非 Linux 操作系统。你需要上传 ISO 并挂接 VNC 控制台。在某些地区,Windows Server 许可作为可选项提供。

KVM在哪些地方出现

更多来自虚拟化

OpenVZ
OpenVZ 是基于容器的虚拟化技术,每个实例共享主机内核,因此客户机无法加载内核模块或运行不同的操作系统。
LXC
LXC 是 Linux 原生的容器化技术,通过命名空间和 cgroups 隔离进程,同时共享主机内核。
虚拟机监控程序
虚拟机监控程序是创建和运行虚拟机的软件层,在它们之间分配物理 CPU、内存和 I/O。
嵌套虚拟化
嵌套虚拟化允许虚拟机自身运行虚拟机,通过将处理器虚拟化扩展暴露给客户机来实现。
vCPU
vCPU是呈现给客户机的虚拟处理器,由物理核心或线程上的调度时间提供支持。
cloud-init
cloud-init是使用平台提供的元数据在首次启动时配置虚拟机的标准机制。