kvm与openstack

KVM 和 OpenStack 学习笔记

1. 虚拟化基础概念

虚拟化是指在一台物理服务器上,通过软件技术模拟出多台相互隔离的虚拟机。每台虚拟机都可以安装独立的操作系统,并像真实服务器一样运行应用程序。

传统物理机部署方式:

text 复制代码
一台物理服务器 -> 一个操作系统 -> 一组业务应用

虚拟化部署方式:

text 复制代码
一台物理服务器
    -> 虚拟化层
        -> 多台虚拟机
            -> 多个操作系统
                -> 多组业务应用

虚拟化的好处:

  1. 提高服务器资源利用率。
  2. 降低硬件采购成本。
  3. 方便创建、删除、迁移虚拟机。
  4. 便于业务隔离。
  5. 支持快照、备份、弹性扩容等能力。

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 常用的虚拟机磁盘镜像格式是 qcow2raw

格式 说明 特点
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 计量监控服务 采集资源使用数据

学习初期重点掌握:

  1. Keystone
  2. Nova
  3. Glance
  4. Neutron
  5. Cinder
  6. Horizon

8. OpenStack 资源概念

8.1 项目、用户、角色

OpenStack 使用 Keystone 管理身份认证。

概念 说明
User 用户,例如 admin、demo
Project 项目,也叫租户,用来隔离资源
Role 角色,用来控制权限
Token 用户认证后获得的访问凭证

用户登录后,只能管理自己项目中的资源。管理员可以管理所有项目资源。

8.2 镜像

镜像由 Glance 管理,是创建云主机的系统模板。

常见镜像格式:

  1. qcow2
  2. raw
  3. vmdk
  4. 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 内部网络,云主机之间通信

常见网络资源:

  1. network:网络。
  2. subnet:子网。
  3. router:路由器。
  4. port:端口。
  5. security group:安全组。
  6. 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 后端可以使用:

  1. 本地 LVM。
  2. Ceph RBD。
  3. iSCSI 存储。
  4. 商业存储设备。

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. 学习路线建议

建议按照下面顺序学习:

  1. 先理解虚拟化基本概念。
  2. 学会使用 KVM 创建、启动、停止、删除虚拟机。
  3. 掌握虚拟机镜像、快照、网络桥接等操作。
  4. 再学习 OpenStack 的核心组件。
  5. 理解 Keystone、Nova、Glance、Neutron、Cinder 的协作关系。
  6. 最后学习 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 是云平台管理系统。

学习时不要把两者混在一起:

  1. KVM 解决的是"如何在一台物理机上运行虚拟机"。
  2. OpenStack 解决的是"如何把很多计算、网络、存储资源统一管理成云平台"。
  3. OpenStack 可以使用 KVM 作为底层虚拟化技术。
  4. 在私有云中,OpenStack 管理资源,KVM 运行云主机,Ceph 提供后端存储。
相关推荐
Harvy_没救了2 天前
【云服务管理】OpenStack 十大组件浅谈
openstack
Harvy_没救了3 天前
【容器技术】OpenStack 概览
openstack
做咩啊~9 天前
10.openstack创建虚拟机的流程
openstack
360智汇云9 天前
OpenStack Nova 虚拟机网卡挂卸载性能优化实践
性能优化·openstack
eucalyptus-DE12 天前
Nova 计算节点故障排查指南
服务器·openstack
做咩啊~1 个月前
7.cinder对接nfs后端存储
openstack
isyangli_blog1 个月前
openstack 下载打包整套环境
服务器·网络·openstack
isyangli_blog1 个月前
openstack 界面发放一台云主机
openstack
isyangli_blog1 个月前
Openstack V 版搭建
openstack