KVM 和 OpenStack 学习笔记
1. 虚拟化基础概念
虚拟化是指在一台物理服务器上,通过软件技术模拟出多台相互隔离的虚拟机。每台虚拟机都可以安装独立的操作系统,并像真实服务器一样运行应用程序。
传统物理机部署方式:
text
一台物理服务器 -> 一个操作系统 -> 一组业务应用
虚拟化部署方式:
text
一台物理服务器
-> 虚拟化层
-> 多台虚拟机
-> 多个操作系统
-> 多组业务应用
虚拟化的好处:
- 提高服务器资源利用率。
- 降低硬件采购成本。
- 方便创建、删除、迁移虚拟机。
- 便于业务隔离。
- 支持快照、备份、弹性扩容等能力。
2. KVM 是什么
KVM 全称是 Kernel-based Virtual Machine,意思是基于 Linux 内核的虚拟机技术。它是 Linux 内核自带的虚拟化模块,可以把 Linux 系统变成一个虚拟化平台。
简单理解:
text
KVM = Linux 内核中的虚拟化能力
KVM 本身主要负责 CPU 和内存虚拟化,通常还需要配合 QEMU、libvirt 等工具一起使用,才能完整管理虚拟机。
常见组合:
text
KVM + QEMU + libvirt = Linux 下常见的虚拟机管理方案
3. KVM 的核心组件
3.1 KVM 内核模块
KVM 是 Linux 内核模块,主要提供硬件虚拟化能力。
常见模块:
| 模块 | 说明 |
|---|---|
| kvm | KVM 通用模块 |
| kvm_intel | Intel CPU 使用的 KVM 模块 |
| kvm_amd | AMD CPU 使用的 KVM 模块 |
检查 CPU 是否支持虚拟化:
bash
egrep -c '(vmx|svm)' /proc/cpuinfo
如果结果大于 0,说明 CPU 支持硬件虚拟化。
查看 KVM 模块:
bash
lsmod | grep kvm
3.2 QEMU
QEMU 是一个硬件模拟器和虚拟机运行程序。它可以模拟 CPU、磁盘、网卡、显卡等硬件设备。
在 KVM 场景中,QEMU 负责创建虚拟机进程,KVM 负责加速 CPU 虚拟化。
简单理解:
text
QEMU 负责模拟虚拟机硬件,KVM 负责让虚拟机跑得更快。
3.3 libvirt
libvirt 是一个虚拟化管理工具和 API,常用来统一管理 KVM 虚拟机。
常见工具:
| 工具 | 作用 |
|---|---|
| libvirtd / virtqemud | 虚拟化管理服务 |
| virsh | 命令行管理工具 |
| virt-install | 创建虚拟机工具 |
| virt-manager | 图形化虚拟机管理工具 |
常用命令:
bash
virsh list --all
virsh start vm01
virsh shutdown vm01
virsh destroy vm01
virsh undefine vm01
3.4 虚拟机镜像
KVM 常用的虚拟机磁盘镜像格式是 qcow2 和 raw。
| 格式 | 说明 | 特点 |
|---|---|---|
| qcow2 | QEMU 常用镜像格式 | 支持快照、压缩、动态扩容 |
| raw | 原始磁盘格式 | 性能较好,功能简单 |
创建 qcow2 镜像:
bash
qemu-img create -f qcow2 vm01.qcow2 20G
查看镜像信息:
bash
qemu-img info vm01.qcow2
4. KVM 虚拟机网络
KVM 常见网络模式有 NAT、桥接和仅主机模式。
| 网络模式 | 说明 | 适用场景 |
|---|---|---|
| NAT | 虚拟机通过宿主机访问外网 | 本地测试、实验环境 |
| Bridge | 虚拟机像局域网中的独立主机 | 服务器部署、生产环境 |
| Host-only | 虚拟机只能和宿主机通信 | 隔离实验环境 |
桥接网络示意:
text
外部网络
-> 物理网卡
-> Linux Bridge
-> 虚拟机网卡
查看虚拟网络:
bash
virsh net-list --all
virsh net-info default
查看网桥:
bash
ip link show
brctl show
5. KVM 常用操作
5.1 安装常用软件
以 CentOS / Rocky Linux 为例:
bash
yum install -y qemu-kvm libvirt virt-install virt-manager
systemctl enable --now libvirtd
以 Ubuntu 为例:
bash
apt install -y qemu-kvm libvirt-daemon-system libvirt-clients virtinst
systemctl enable --now libvirtd
5.2 创建虚拟机
bash
virt-install \
--name vm01 \
--memory 2048 \
--vcpus 2 \
--disk path=/var/lib/libvirt/images/vm01.qcow2,size=20,format=qcow2 \
--cdrom /iso/CentOS-Stream-8.iso \
--network network=default \
--graphics vnc \
--os-variant centos-stream8
5.3 查看虚拟机
bash
virsh list
virsh list --all
virsh dominfo vm01
5.4 管理虚拟机
bash
virsh start vm01
virsh reboot vm01
virsh shutdown vm01
virsh destroy vm01
shutdown 是正常关机,destroy 是强制断电。
5.5 快照操作
bash
virsh snapshot-create-as vm01 init
virsh snapshot-list vm01
virsh snapshot-revert vm01 init
virsh snapshot-delete vm01 init
快照适合实验环境回滚,生产环境使用前需要考虑磁盘格式、性能和一致性问题。
6. OpenStack 是什么
OpenStack 是一个开源云计算管理平台,用来管理计算、网络、存储、镜像、身份认证等资源。它可以把多台服务器组织成一个私有云平台,让用户像使用公有云一样创建云主机、云硬盘、网络、安全组等资源。
简单理解:
text
OpenStack = 开源私有云管理平台
OpenStack 本身不是虚拟化技术,它通常调用底层虚拟化平台来创建虚拟机。最常见的底层虚拟化技术就是 KVM。
text
用户创建云主机
-> OpenStack 接收请求
-> Nova 调度计算节点
-> libvirt 调用 KVM
-> 创建虚拟机
7. OpenStack 核心组件
OpenStack 由多个服务组成,每个服务负责一种云资源。
| 组件 | 服务名 | 作用 |
|---|---|---|
| Keystone | 身份认证服务 | 管理用户、项目、角色、Token |
| Nova | 计算服务 | 管理云主机生命周期 |
| Glance | 镜像服务 | 管理云主机镜像 |
| Neutron | 网络服务 | 管理虚拟网络、子网、路由、安全组 |
| Cinder | 块存储服务 | 管理云硬盘 |
| Swift | 对象存储服务 | 提供对象存储 |
| Horizon | Web 控制台 | 图形化管理界面 |
| Placement | 资源调度服务 | 管理计算资源库存和分配 |
| Heat | 编排服务 | 使用模板创建云资源 |
| Ceilometer | 计量监控服务 | 采集资源使用数据 |
学习初期重点掌握:
- Keystone
- Nova
- Glance
- Neutron
- Cinder
- Horizon
8. OpenStack 资源概念
8.1 项目、用户、角色
OpenStack 使用 Keystone 管理身份认证。
| 概念 | 说明 |
|---|---|
| User | 用户,例如 admin、demo |
| Project | 项目,也叫租户,用来隔离资源 |
| Role | 角色,用来控制权限 |
| Token | 用户认证后获得的访问凭证 |
用户登录后,只能管理自己项目中的资源。管理员可以管理所有项目资源。
8.2 镜像
镜像由 Glance 管理,是创建云主机的系统模板。
常见镜像格式:
- qcow2
- raw
- vmdk
- iso
上传镜像示例:
bash
openstack image create "CentOS-Stream-8" \
--file CentOS-Stream-8.qcow2 \
--disk-format qcow2 \
--container-format bare \
--public
8.3 规格
规格也叫 flavor,用来定义云主机的 CPU、内存、磁盘大小。
查看规格:
bash
openstack flavor list
创建规格:
bash
openstack flavor create small --vcpus 1 --ram 1024 --disk 20
8.4 网络
Neutron 负责管理 OpenStack 网络。
常见网络类型:
| 网络类型 | 说明 |
|---|---|
| Provider Network | 直接连接物理网络 |
| Self-service Network | 租户自助创建的私有网络 |
| External Network | 外部网络,通常用于浮动 IP |
| Internal Network | 内部网络,云主机之间通信 |
常见网络资源:
- network:网络。
- subnet:子网。
- router:路由器。
- port:端口。
- security group:安全组。
- floating ip:浮动 IP。
8.5 云硬盘
Cinder 负责管理云硬盘。
常见操作:
bash
openstack volume create --size 10 data-disk
openstack server add volume vm01 data-disk
openstack server remove volume vm01 data-disk
Cinder 后端可以使用:
- 本地 LVM。
- Ceph RBD。
- iSCSI 存储。
- 商业存储设备。
8.6 云主机
云主机由 Nova 管理,底层通常是 KVM 虚拟机。
创建云主机示例:
bash
openstack server create vm01 \
--image CentOS-Stream-8 \
--flavor small \
--network private \
--key-name mykey
查看云主机:
bash
openstack server list
openstack server show vm01
9. OpenStack 基本工作流程
以创建一台云主机为例:
text
1. 用户通过 Horizon 或 openstack 命令发起创建请求。
2. Keystone 验证用户身份和权限。
3. Nova 接收创建云主机请求。
4. Nova Scheduler 选择合适的计算节点。
5. Glance 提供系统镜像。
6. Neutron 创建虚拟网卡并分配 IP。
7. Cinder 按需提供云硬盘。
8. Nova Compute 调用 libvirt。
9. libvirt 调用 QEMU/KVM 创建虚拟机。
10. 云主机启动完成。
简化流程图:
text
Horizon / CLI
-> Keystone
-> Nova
-> Glance
-> Neutron
-> Cinder
-> libvirt
-> QEMU/KVM
10. KVM 和 OpenStack 的关系
KVM 和 OpenStack 不是同一层面的东西。
KVM 是底层虚拟化技术,负责真正运行虚拟机。OpenStack 是上层云平台,负责统一管理大量计算、网络、存储资源。
text
OpenStack 管理云资源
-> Nova 管理计算资源
-> libvirt 管理虚拟机
-> QEMU/KVM 运行虚拟机
可以这样理解:
| 对比对象 | 类比 |
|---|---|
| KVM | 发动机 |
| OpenStack | 整套汽车管理系统 |
| libvirt | 控制发动机的接口 |
| Nova | 调度和管理车辆运行的服务 |
如果只有一台服务器,直接使用 KVM 就可以创建和管理虚拟机。
如果有很多台服务器,需要做统一资源池、用户隔离、网络管理、云硬盘、镜像管理、配额管理,就适合使用 OpenStack。
11. KVM 和 OpenStack 对比
| 对比项 | KVM | OpenStack |
|---|---|---|
| 定位 | 虚拟化技术 | 云计算管理平台 |
| 所在层级 | 底层虚拟化层 | 上层资源管理层 |
| 主要作用 | 运行虚拟机 | 管理计算、网络、存储等云资源 |
| 管理范围 | 单机或少量宿主机 | 多节点资源池 |
| 核心对象 | 虚拟机 | 云主机、镜像、网络、云硬盘、项目、用户 |
| 常用工具 | virsh、virt-install、virt-manager | openstack CLI、Horizon |
| 网络能力 | NAT、Bridge 等基础网络 | 租户网络、路由器、安全组、浮动 IP |
| 存储能力 | 本地镜像、挂载磁盘 | 镜像服务、云硬盘、对象存储 |
| 用户权限 | 通常由系统管理员管理 | 支持多租户、项目、角色、配额 |
| 部署复杂度 | 较低 | 较高 |
| 适用场景 | 学习虚拟化、小规模虚拟机 | 私有云、大规模资源管理 |
一句话对比:
text
KVM 负责把虚拟机跑起来,OpenStack 负责把很多 KVM 节点组织成云平台。
12. KVM、OpenStack、Ceph 的常见组合
在私有云环境中,KVM、OpenStack、Ceph 经常一起使用。
text
OpenStack
-> 管理云平台资源
KVM
-> 运行云主机
Ceph
-> 提供后端分布式存储
常见对应关系:
| OpenStack 组件 | 后端技术 | 说明 |
|---|---|---|
| Nova | KVM | 创建和运行云主机 |
| Glance | Ceph RBD / 文件存储 | 保存镜像 |
| Cinder | Ceph RBD | 提供云硬盘 |
| Neutron | Linux Bridge / Open vSwitch | 提供虚拟网络 |
整体架构示意:
text
用户
-> OpenStack Horizon / CLI
-> Nova / Neutron / Glance / Cinder
-> KVM 计算节点
-> Ceph 存储集群
13. 学习路线建议
建议按照下面顺序学习:
- 先理解虚拟化基本概念。
- 学会使用 KVM 创建、启动、停止、删除虚拟机。
- 掌握虚拟机镜像、快照、网络桥接等操作。
- 再学习 OpenStack 的核心组件。
- 理解 Keystone、Nova、Glance、Neutron、Cinder 的协作关系。
- 最后学习 OpenStack 如何调用 KVM 和 Ceph。
学习主线:
text
Linux 基础
-> KVM 虚拟化
-> libvirt 管理
-> OpenStack 云平台
-> Ceph 分布式存储
14. 常用命令汇总
14.1 KVM 常用命令
| 命令 | 作用 |
|---|---|
| `lsmod | grep kvm` |
virsh list --all |
查看所有虚拟机 |
virsh start <vm> |
启动虚拟机 |
virsh shutdown <vm> |
正常关闭虚拟机 |
virsh destroy <vm> |
强制关闭虚拟机 |
virsh undefine <vm> |
删除虚拟机定义 |
virsh dominfo <vm> |
查看虚拟机信息 |
virsh console <vm> |
进入虚拟机控制台 |
virsh net-list --all |
查看虚拟网络 |
qemu-img info <image> |
查看镜像信息 |
qemu-img create -f qcow2 <image> 20G |
创建 qcow2 镜像 |
14.2 OpenStack 常用命令
| 命令 | 作用 |
|---|---|
openstack token issue |
验证认证是否正常 |
openstack service list |
查看服务列表 |
openstack endpoint list |
查看服务端点 |
openstack image list |
查看镜像 |
openstack flavor list |
查看规格 |
openstack network list |
查看网络 |
openstack subnet list |
查看子网 |
openstack server list |
查看云主机 |
openstack volume list |
查看云硬盘 |
openstack hypervisor list |
查看计算节点 |
15. 总结
KVM 和 OpenStack 的关系可以用一句话概括:
text
KVM 是虚拟机运行技术,OpenStack 是云平台管理系统。
学习时不要把两者混在一起:
- KVM 解决的是"如何在一台物理机上运行虚拟机"。
- OpenStack 解决的是"如何把很多计算、网络、存储资源统一管理成云平台"。
- OpenStack 可以使用 KVM 作为底层虚拟化技术。
- 在私有云中,OpenStack 管理资源,KVM 运行云主机,Ceph 提供后端存储。