欢迎光临
我们一直在努力

00 · OpenStack 总纲——从云计算到 OpenStack 全景

00 · OpenStack 总纲——从云计算到 OpenStack 全景

本篇是整个系列的"地图"。读完本篇,你应当能回答:OpenStack 是什么、由哪些组件构成、它们如何协作、一台虚拟机是怎样被创建出来的。
本篇重"广"(建立整体认知),各分篇重"深"(原理与实操)。建议先通读本篇,再带着全局视角进入各分篇。


本篇导读 / 学习目标

学完本篇,你将能够:

  • 说清云计算的服务模型(IaaS/PaaS/SaaS)与部署模型(公有/私有/混合/社区云);
  • 说清 OpenStack 的定位、发展历史、设计哲学与版本规则;
  • 画出 OpenStack 的总体逻辑架构,区分控制、计算、存储、网络四类节点;
  • 记住 7 大核心服务(Keystone / Glance / Nova / Neutron / Cinder / Swift / Heat)+ Horizon 的职责与协作关系;
  • 完整描述创建一台虚拟机的端到端流程(认证 → 调度 → 取镜像/网络/存储 → Hypervisor 建机);
  • 了解 OpenStack 的部署方式、生态与云原生关系,并获得一条清晰的学习路线。

  • 一、先理解云计算:OpenStack 所处的位置

    1.1 什么是云计算

    云计算(Cloud Computing):一种按网络、按需、可计量地访问共享计算资源池(网络、服务器、存储、应用、服务)的模式,资源可以被快速供给和释放,而无需大量人工管理。

    五个本质特征(记忆口诀:“按需自助、广泛接入、资源池化、快速弹性、可计量服务”):

    特征含义
    按需自助服务 On-demand self-service 消费者可单方面自动获取计算资源,无需与服务商人工交互
    广泛网络访问 Broad network access 资源通过网络获取,标准客户端(手机/电脑/API)均可使用
    资源池化 Resource pooling 提供商的资源被池化,多租户共享,物理位置对用户透明
    快速弹性 Rapid elasticity 资源可被快速、弹性地分配与释放,看起来"无限可用"
    可计量服务 Measured service 资源使用被计量、监控与计费(按用量付费)

    1.2 服务模型:SPI 三层(IaaS / PaaS / SaaS)

    SPI 模型:按"云厂商管到哪一层、用户管到哪一层",把云服务分为三层,越往上用户越省心、灵活性越低。

    #mermaid-svg-hZkETWyUNPNJVbHw{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-hZkETWyUNPNJVbHw .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-hZkETWyUNPNJVbHw .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-hZkETWyUNPNJVbHw .error-icon{fill:#552222;}#mermaid-svg-hZkETWyUNPNJVbHw .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-hZkETWyUNPNJVbHw .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-hZkETWyUNPNJVbHw .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-hZkETWyUNPNJVbHw .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-hZkETWyUNPNJVbHw .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-hZkETWyUNPNJVbHw .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-hZkETWyUNPNJVbHw .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-hZkETWyUNPNJVbHw .marker{fill:#333333;stroke:#333333;}#mermaid-svg-hZkETWyUNPNJVbHw .marker.cross{stroke:#333333;}#mermaid-svg-hZkETWyUNPNJVbHw svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-hZkETWyUNPNJVbHw p{margin:0;}#mermaid-svg-hZkETWyUNPNJVbHw .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-hZkETWyUNPNJVbHw .cluster-label text{fill:#333;}#mermaid-svg-hZkETWyUNPNJVbHw .cluster-label span{color:#333;}#mermaid-svg-hZkETWyUNPNJVbHw .cluster-label span p{background-color:transparent;}#mermaid-svg-hZkETWyUNPNJVbHw .label text,#mermaid-svg-hZkETWyUNPNJVbHw span{fill:#333;color:#333;}#mermaid-svg-hZkETWyUNPNJVbHw .node rect,#mermaid-svg-hZkETWyUNPNJVbHw .node circle,#mermaid-svg-hZkETWyUNPNJVbHw .node ellipse,#mermaid-svg-hZkETWyUNPNJVbHw .node polygon,#mermaid-svg-hZkETWyUNPNJVbHw .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-hZkETWyUNPNJVbHw .rough-node .label text,#mermaid-svg-hZkETWyUNPNJVbHw .node .label text,#mermaid-svg-hZkETWyUNPNJVbHw .image-shape .label,#mermaid-svg-hZkETWyUNPNJVbHw .icon-shape .label{text-anchor:middle;}#mermaid-svg-hZkETWyUNPNJVbHw .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-hZkETWyUNPNJVbHw .rough-node .label,#mermaid-svg-hZkETWyUNPNJVbHw .node .label,#mermaid-svg-hZkETWyUNPNJVbHw .image-shape .label,#mermaid-svg-hZkETWyUNPNJVbHw .icon-shape .label{text-align:center;}#mermaid-svg-hZkETWyUNPNJVbHw .node.clickable{cursor:pointer;}#mermaid-svg-hZkETWyUNPNJVbHw .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-hZkETWyUNPNJVbHw .arrowheadPath{fill:#333333;}#mermaid-svg-hZkETWyUNPNJVbHw .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-hZkETWyUNPNJVbHw .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-hZkETWyUNPNJVbHw .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-hZkETWyUNPNJVbHw .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-hZkETWyUNPNJVbHw .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-hZkETWyUNPNJVbHw .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-hZkETWyUNPNJVbHw .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-hZkETWyUNPNJVbHw .cluster text{fill:#333;}#mermaid-svg-hZkETWyUNPNJVbHw .cluster span{color:#333;}#mermaid-svg-hZkETWyUNPNJVbHw div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-hZkETWyUNPNJVbHw .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-hZkETWyUNPNJVbHw rect.text{fill:none;stroke-width:0;}#mermaid-svg-hZkETWyUNPNJVbHw .icon-shape,#mermaid-svg-hZkETWyUNPNJVbHw .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-hZkETWyUNPNJVbHw .icon-shape p,#mermaid-svg-hZkETWyUNPNJVbHw .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-hZkETWyUNPNJVbHw .icon-shape .label rect,#mermaid-svg-hZkETWyUNPNJVbHw .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-hZkETWyUNPNJVbHw .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-hZkETWyUNPNJVbHw .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-hZkETWyUNPNJVbHw :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

    SaaS:管到应用(开箱即用)

    用户管:使用

    厂商管:应用及以下全部

    PaaS:管到平台

    用户管:应用 / 数据

    厂商管:运行时 / 中间件 / OS / 基础设施

    IaaS:管到基础设施

    用户管:OS / 中间件 / 应用 / 数据

    厂商管:虚拟化 / 服务器 / 存储 / 网络

    传统自建 On-Premise

    用户管:应用到硬件全部

    模型全称厂商提供用户管理典型例子
    IaaS Infrastructure as a Service(基础设施即服务) 虚拟机、网络、存储、负载均衡等基础资源 OS、中间件、应用、数据 OpenStack、AWS EC2、阿里云 ECS、华为云 ECS
    PaaS Platform as a Service(平台即服务) 运行时、数据库、中间件、开发平台 应用与数据 数据库 RDS、应用引擎、K8s 托管服务
    SaaS Software as a Service(软件即服务) 完整可用的软件 直接使用 网页邮箱、在线文档、钉钉/飞书

    记忆要点:OpenStack 是一个开源的 IaaS 平台——它把"数据中心的计算、存储、网络资源"池化,通过 API 对外提供虚拟机等基础设施服务。

    1.3 部署模型:四类云

    部署模型一句话定义特点
    公有云 Public Cloud 云资源由服务商运营,向公众开放 多租户、按需付费、规模大;如 AWS、阿里云、华为云
    私有云 Private Cloud 云资源专供一个组织使用(可自建或托管) 安全可控、可定制;OpenStack 是私有云事实标准之一
    混合云 Hybrid Cloud 公有云 + 私有云通过技术打通、协同使用 敏感数据放私有、弹性峰值放公有
    社区云 Community Cloud 多个有共同诉求的组织共享的云 如政府云、行业云

    1.4 虚拟化:云计算的地基

    虚拟化(Virtualization):在一台物理机上抽象出多个相互隔离的虚拟计算机(虚拟机 VM),每台 VM 拥有独立的虚拟 CPU、内存、磁盘、网卡,运行各自的操作系统。

    • Hypervisor(虚拟机监控器/VMM):负责虚拟化的软件层,分为:
      • Type-1(裸金属型):直接装在硬件上,如 KVM、ESXi、Xen;
      • Type-2(宿主型):作为应用装在普通 OS 上,如 VMware Workstation、VirtualBox。
    • KVM(Kernel-based Virtual Machine):Linux 内核内置的开源虚拟化模块,把 Linux 变成 Type-1 Hypervisor;配合用户态的 QEMU 完成设备模拟。OpenStack Nova 默认使用 KVM/QEMU 作为底层虚拟化驱动。
    • 除了计算虚拟化,还有存储虚拟化(如 LVM、Ceph)和网络虚拟化(如 Linux Bridge、OVS、SDN)——它们共同构成 OpenStack 的地基。

    关系链:物理资源 → 虚拟化(KVM/LVM/OVS)→ 资源池化 → OpenStack 编排管理 → 以 API 对外提供云服务。


    二、OpenStack 是什么

    2.1 一句话定义

    OpenStack 是一个开源的云计算管理平台(IaaS),通过一组相互协作的服务(组件),对数据中心的计算、存储、网络资源进行统一的池化、编排与自动化管理,并通过 REST API 与 Web 界面对外提供服务。

    可以把它理解为:“云数据中心的操作系统”——它不直接生产资源,而是把底层虚拟化/存储/网络资源管理起来,让用户像用电一样自助申请虚拟机、网络、存储。

    2.2 发展简史

    • 2010 年 7 月,由 Rackspace(托管服务商)和 NASA(美国宇航局) 联合发起、开源:
      • NASA 贡献了计算组件 Nova(前身 Nebula);
      • Rackspace 贡献了对象存储组件 Swift。
    • 此后由社区驱动,约每 6 个月发布一个正式版本,版本按字母顺序用城市/地区命名(A→B→C…)。
    • 2012 年成立独立的 OpenStack 基金会;2020 年更名为 OpenInfra 基金会,统筹 OpenStack 及 Kata Containers、Zuul 等基础设施项目。
    • 如今 OpenStack 是全球部署最广的开源私有云/混合云平台之一,与 Kubernetes 共同构成现代云基础设施的两大支柱。

    2.3 版本规则(重要:本实验环境是 Victoria)

    • 早期版本按字母顺序命名,每年两个版本(约 4 月、10 月)。部分关键版本:
    版本发布时间记忆点
    Austin 2010.10 第 1 个版本,只有 Nova + Swift
    Bexar / Cactus / Diablo 2011 早期迭代
    Essex 2012.04 Keystone、Horizon 正式加入
    Folsom 2012.09 Quantum(网络,后改名 Neutron)、Cinder 加入
    Grizzly 2013.04 首次引入 LBaaS
    Havana 2013.10 Heat(编排)、Ceilometer(遥测) 加入
    Icehouse / Juno / Kilo 2014–2015 成熟与扩展
    Liberty / Mitaka / Newton 2015–2016 功能大发展
    Ocata / Pike / Queens / Rocky / Stein 2017–2019 Cells v2、Placement 演进
    Train / Ussuri 2019–2020 —
    Victoria 2020.10 ★ 本课程实验环境使用的版本
    Wallaby / Xena / Yoga / Zed 2021–2022 字母命名到 Z 结束
    2023.1 Antelope 起 2023 至今 改为"年份.序号"命名(仍保留代号),如 2024.1 Caracal、2024.2 Dalmatian、2025.1 Epoxy、2025.2 Fenix,保持每年两版

    记忆要点:本实验 = CentOS-Stream-8 + OpenStack Victoria(第 22 个版本),用 Packstack 部署。

    2.4 OpenStack 的设计哲学

    设计原则说明
    微服务 / 松耦合 每个功能是一个独立服务(组件),可单独部署、升级、扩展,互不绑定
    一切皆 API(API 驱动) 所有服务都通过 REST API 暴露能力;Horizon、CLI 本质都只是 API 的封装
    共享无(Shared-Nothing) 各组件不共享内部状态,状态统一存放在数据库;组件可水平扩展、多实例运行
    消息驱动(异步通信) 同一服务内部各进程(如 nova-api→scheduler→compute)通过消息队列 RabbitMQ 异步通信(RPC)
    可插拔 / 可扩展 后端技术以**驱动(Driver)/插件(Plugin)**形式接入:Hypervisor 可换 KVM/VMware,存储可换 LVM/Ceph,网络可换 OVS/OVN
    面向多租户 原生支持多租户隔离(Project/租户、配额、权限、网络隔离)

    三、OpenStack 总体架构

    3.1 逻辑架构:三个平面 + 一条总线 + 一个数据库

    OpenStack 在逻辑上可以看作:大量服务进程(API/调度/执行)+ 一条消息总线(RabbitMQ)+ 一个数据库(MariaDB)+ 各类后端(Hypervisor/存储/网络设备)。

    #mermaid-svg-rNr52l4RnywQdf6r{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-rNr52l4RnywQdf6r .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-rNr52l4RnywQdf6r .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-rNr52l4RnywQdf6r .error-icon{fill:#552222;}#mermaid-svg-rNr52l4RnywQdf6r .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-rNr52l4RnywQdf6r .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-rNr52l4RnywQdf6r .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-rNr52l4RnywQdf6r .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-rNr52l4RnywQdf6r .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-rNr52l4RnywQdf6r .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-rNr52l4RnywQdf6r .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-rNr52l4RnywQdf6r .marker{fill:#333333;stroke:#333333;}#mermaid-svg-rNr52l4RnywQdf6r .marker.cross{stroke:#333333;}#mermaid-svg-rNr52l4RnywQdf6r svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-rNr52l4RnywQdf6r p{margin:0;}#mermaid-svg-rNr52l4RnywQdf6r .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-rNr52l4RnywQdf6r .cluster-label text{fill:#333;}#mermaid-svg-rNr52l4RnywQdf6r .cluster-label span{color:#333;}#mermaid-svg-rNr52l4RnywQdf6r .cluster-label span p{background-color:transparent;}#mermaid-svg-rNr52l4RnywQdf6r .label text,#mermaid-svg-rNr52l4RnywQdf6r span{fill:#333;color:#333;}#mermaid-svg-rNr52l4RnywQdf6r .node rect,#mermaid-svg-rNr52l4RnywQdf6r .node circle,#mermaid-svg-rNr52l4RnywQdf6r .node ellipse,#mermaid-svg-rNr52l4RnywQdf6r .node polygon,#mermaid-svg-rNr52l4RnywQdf6r .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-rNr52l4RnywQdf6r .rough-node .label text,#mermaid-svg-rNr52l4RnywQdf6r .node .label text,#mermaid-svg-rNr52l4RnywQdf6r .image-shape .label,#mermaid-svg-rNr52l4RnywQdf6r .icon-shape .label{text-anchor:middle;}#mermaid-svg-rNr52l4RnywQdf6r .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-rNr52l4RnywQdf6r .rough-node .label,#mermaid-svg-rNr52l4RnywQdf6r .node .label,#mermaid-svg-rNr52l4RnywQdf6r .image-shape .label,#mermaid-svg-rNr52l4RnywQdf6r .icon-shape .label{text-align:center;}#mermaid-svg-rNr52l4RnywQdf6r .node.clickable{cursor:pointer;}#mermaid-svg-rNr52l4RnywQdf6r .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-rNr52l4RnywQdf6r .arrowheadPath{fill:#333333;}#mermaid-svg-rNr52l4RnywQdf6r .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-rNr52l4RnywQdf6r .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-rNr52l4RnywQdf6r .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-rNr52l4RnywQdf6r .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-rNr52l4RnywQdf6r .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-rNr52l4RnywQdf6r .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-rNr52l4RnywQdf6r .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-rNr52l4RnywQdf6r .cluster text{fill:#333;}#mermaid-svg-rNr52l4RnywQdf6r .cluster span{color:#333;}#mermaid-svg-rNr52l4RnywQdf6r div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-rNr52l4RnywQdf6r .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-rNr52l4RnywQdf6r rect.text{fill:none;stroke-width:0;}#mermaid-svg-rNr52l4RnywQdf6r .icon-shape,#mermaid-svg-rNr52l4RnywQdf6r .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-rNr52l4RnywQdf6r .icon-shape p,#mermaid-svg-rNr52l4RnywQdf6r .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-rNr52l4RnywQdf6r .icon-shape .label rect,#mermaid-svg-rNr52l4RnywQdf6r .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-rNr52l4RnywQdf6r .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-rNr52l4RnywQdf6r .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-rNr52l4RnywQdf6r :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

    数据平面(计算/存储/网络节点)

    消息与数据

    控制平面(控制节点)

    接入层

    HTTP

    用户/管理员

    Horizon(Web 界面)

    OpenStack CLI / SDK

    Keystone 认证

    glance-api

    nova-api / placement

    nova-scheduler / conductor

    neutron-server

    cinder-api / scheduler

    heat-api / engine

    RabbitMQ 消息队列

    MariaDB 数据库

    Memcached 缓存

    nova-compute + KVM

    cinder-volume(LVM 等)

    Swift 存储

    Neutron Agent / OVN

    • 控制平面(Control Plane):接收请求、做认证/调度/编排,决定"做什么、在哪做",但不直接承载业务负载。
    • 数据平面(Data Plane):真正运行虚拟机、存放数据、转发流量的地方。
    • 消息总线:服务内部进程通过 RabbitMQ 做 RPC(rpc.call 同步等待、rpc.cast 单向通知)。
    • 数据库:所有服务的状态、元数据统一存放在 MariaDB(MySQL),每个服务有自己的库(nova、glance、cinder、neutron、keystone…)。

    3.2 四类节点(物理部署视角)

    节点(Node):运行 OpenStack 一组服务的物理机(或虚拟机)。生产环境通常按职责拆分,实验环境为节省资源会合并。

    节点类型主要运行的服务职责
    控制节点 Controller Keystone、Glance、Horizon、nova-api/scheduler/conductor、placement、neutron-server、cinder-api/scheduler、heat-api/engine、MariaDB、RabbitMQ、Memcached 管理、调度、认证、API 入口(“大脑”)
    计算节点 Compute nova-compute、KVM/QEMU、Neutron 二层 Agent(OVN/OVS/Linux Bridge) 真正运行虚拟机、提供计算资源(“干活的肌肉”)
    存储节点 Storage cinder-volume(+ 存储后端)、Swift 的 account/container/object 服务 提供块存储卷与对象存储(“仓库”)
    网络节点 Network neutron L3/DHCP/metadata Agent、虚拟路由器 提供 DHCP、三层路由、NAT、浮动 IP(“门卫”)

    说明:

    • All-in-One(一体化):把所有服务装在一台机器上,适合学习/测试(DevStack 常用)。
    • 本课程实验环境:两节点——controller = 192.168.108.10、compute = 192.168.108.11。
      • 控制节点同时承担了存储(Cinder 用 LVM、Swift 用 loopback)与网络管理功能;
      • 网络后端为 OVN,租户网络用 Geneve 封装,传统独立网络节点的 L3/DHCP 功能由 OVN 集中式组件承担。

    3.3 实验环境拓扑(贯穿全套笔记)

    #mermaid-svg-jdEtTwovxZ7bKuTM{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-jdEtTwovxZ7bKuTM .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-jdEtTwovxZ7bKuTM .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-jdEtTwovxZ7bKuTM .error-icon{fill:#552222;}#mermaid-svg-jdEtTwovxZ7bKuTM .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-jdEtTwovxZ7bKuTM .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-jdEtTwovxZ7bKuTM .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-jdEtTwovxZ7bKuTM .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-jdEtTwovxZ7bKuTM .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-jdEtTwovxZ7bKuTM .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-jdEtTwovxZ7bKuTM .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-jdEtTwovxZ7bKuTM .marker{fill:#333333;stroke:#333333;}#mermaid-svg-jdEtTwovxZ7bKuTM .marker.cross{stroke:#333333;}#mermaid-svg-jdEtTwovxZ7bKuTM svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-jdEtTwovxZ7bKuTM p{margin:0;}#mermaid-svg-jdEtTwovxZ7bKuTM .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-jdEtTwovxZ7bKuTM .cluster-label text{fill:#333;}#mermaid-svg-jdEtTwovxZ7bKuTM .cluster-label span{color:#333;}#mermaid-svg-jdEtTwovxZ7bKuTM .cluster-label span p{background-color:transparent;}#mermaid-svg-jdEtTwovxZ7bKuTM .label text,#mermaid-svg-jdEtTwovxZ7bKuTM span{fill:#333;color:#333;}#mermaid-svg-jdEtTwovxZ7bKuTM .node rect,#mermaid-svg-jdEtTwovxZ7bKuTM .node circle,#mermaid-svg-jdEtTwovxZ7bKuTM .node ellipse,#mermaid-svg-jdEtTwovxZ7bKuTM .node polygon,#mermaid-svg-jdEtTwovxZ7bKuTM .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-jdEtTwovxZ7bKuTM .rough-node .label text,#mermaid-svg-jdEtTwovxZ7bKuTM .node .label text,#mermaid-svg-jdEtTwovxZ7bKuTM .image-shape .label,#mermaid-svg-jdEtTwovxZ7bKuTM .icon-shape .label{text-anchor:middle;}#mermaid-svg-jdEtTwovxZ7bKuTM .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-jdEtTwovxZ7bKuTM .rough-node .label,#mermaid-svg-jdEtTwovxZ7bKuTM .node .label,#mermaid-svg-jdEtTwovxZ7bKuTM .image-shape .label,#mermaid-svg-jdEtTwovxZ7bKuTM .icon-shape .label{text-align:center;}#mermaid-svg-jdEtTwovxZ7bKuTM .node.clickable{cursor:pointer;}#mermaid-svg-jdEtTwovxZ7bKuTM .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-jdEtTwovxZ7bKuTM .arrowheadPath{fill:#333333;}#mermaid-svg-jdEtTwovxZ7bKuTM .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-jdEtTwovxZ7bKuTM .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-jdEtTwovxZ7bKuTM .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-jdEtTwovxZ7bKuTM .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-jdEtTwovxZ7bKuTM .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-jdEtTwovxZ7bKuTM .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-jdEtTwovxZ7bKuTM .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-jdEtTwovxZ7bKuTM .cluster text{fill:#333;}#mermaid-svg-jdEtTwovxZ7bKuTM .cluster span{color:#333;}#mermaid-svg-jdEtTwovxZ7bKuTM div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-jdEtTwovxZ7bKuTM .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-jdEtTwovxZ7bKuTM rect.text{fill:none;stroke-width:0;}#mermaid-svg-jdEtTwovxZ7bKuTM .icon-shape,#mermaid-svg-jdEtTwovxZ7bKuTM .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-jdEtTwovxZ7bKuTM .icon-shape p,#mermaid-svg-jdEtTwovxZ7bKuTM .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-jdEtTwovxZ7bKuTM .icon-shape .label rect,#mermaid-svg-jdEtTwovxZ7bKuTM .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-jdEtTwovxZ7bKuTM .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-jdEtTwovxZ7bKuTM .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-jdEtTwovxZ7bKuTM :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

    VMware Workstation(NAT 网络 192.168.108.0/24,网关 192.168.108.2)

    NAT

    NAT

    controller192.168.108.10控制/存储/网络管理

    compute192.168.108.11nova-compute + KVM

    外部网络 / 互联网

    项目值
    操作系统 CentOS-Stream-8(minimal)
    OpenStack 版本 Victoria
    部署工具 Packstack(底层用 Puppet)
    控制节点 controller / 192.168.108.10
    计算节点 compute / 192.168.108.11
    默认区域 RegionOne
    默认域 Default(另有 heat 域)
    管理员 admin(密码统一设为 huawei)
    网络后端 OVN,租户网络 Geneve 封装
    块存储后端 LVM(卷组 cinder-volumes)
    数据库/消息队列 MariaDB / RabbitMQ

    四、核心组件全景(OpenStack 服务地图)

    4.1 七大核心服务 + 一个控制台

    #mermaid-svg-Lpul3vFbG1KxqpSl{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-Lpul3vFbG1KxqpSl .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-Lpul3vFbG1KxqpSl .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-Lpul3vFbG1KxqpSl .error-icon{fill:#552222;}#mermaid-svg-Lpul3vFbG1KxqpSl .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-Lpul3vFbG1KxqpSl .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-Lpul3vFbG1KxqpSl .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-Lpul3vFbG1KxqpSl .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-Lpul3vFbG1KxqpSl .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-Lpul3vFbG1KxqpSl .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-Lpul3vFbG1KxqpSl .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-Lpul3vFbG1KxqpSl .marker{fill:#333333;stroke:#333333;}#mermaid-svg-Lpul3vFbG1KxqpSl .marker.cross{stroke:#333333;}#mermaid-svg-Lpul3vFbG1KxqpSl svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-Lpul3vFbG1KxqpSl p{margin:0;}#mermaid-svg-Lpul3vFbG1KxqpSl .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-Lpul3vFbG1KxqpSl .cluster-label text{fill:#333;}#mermaid-svg-Lpul3vFbG1KxqpSl .cluster-label span{color:#333;}#mermaid-svg-Lpul3vFbG1KxqpSl .cluster-label span p{background-color:transparent;}#mermaid-svg-Lpul3vFbG1KxqpSl .label text,#mermaid-svg-Lpul3vFbG1KxqpSl span{fill:#333;color:#333;}#mermaid-svg-Lpul3vFbG1KxqpSl .node rect,#mermaid-svg-Lpul3vFbG1KxqpSl .node circle,#mermaid-svg-Lpul3vFbG1KxqpSl .node ellipse,#mermaid-svg-Lpul3vFbG1KxqpSl .node polygon,#mermaid-svg-Lpul3vFbG1KxqpSl .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-Lpul3vFbG1KxqpSl .rough-node .label text,#mermaid-svg-Lpul3vFbG1KxqpSl .node .label text,#mermaid-svg-Lpul3vFbG1KxqpSl .image-shape .label,#mermaid-svg-Lpul3vFbG1KxqpSl .icon-shape .label{text-anchor:middle;}#mermaid-svg-Lpul3vFbG1KxqpSl .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-Lpul3vFbG1KxqpSl .rough-node .label,#mermaid-svg-Lpul3vFbG1KxqpSl .node .label,#mermaid-svg-Lpul3vFbG1KxqpSl .image-shape .label,#mermaid-svg-Lpul3vFbG1KxqpSl .icon-shape .label{text-align:center;}#mermaid-svg-Lpul3vFbG1KxqpSl .node.clickable{cursor:pointer;}#mermaid-svg-Lpul3vFbG1KxqpSl .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-Lpul3vFbG1KxqpSl .arrowheadPath{fill:#333333;}#mermaid-svg-Lpul3vFbG1KxqpSl .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-Lpul3vFbG1KxqpSl .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-Lpul3vFbG1KxqpSl .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-Lpul3vFbG1KxqpSl .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-Lpul3vFbG1KxqpSl .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-Lpul3vFbG1KxqpSl .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-Lpul3vFbG1KxqpSl .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-Lpul3vFbG1KxqpSl .cluster text{fill:#333;}#mermaid-svg-Lpul3vFbG1KxqpSl .cluster span{color:#333;}#mermaid-svg-Lpul3vFbG1KxqpSl div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-Lpul3vFbG1KxqpSl .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-Lpul3vFbG1KxqpSl rect.text{fill:none;stroke-width:0;}#mermaid-svg-Lpul3vFbG1KxqpSl .icon-shape,#mermaid-svg-Lpul3vFbG1KxqpSl .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-Lpul3vFbG1KxqpSl .icon-shape p,#mermaid-svg-Lpul3vFbG1KxqpSl .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-Lpul3vFbG1KxqpSl .icon-shape .label rect,#mermaid-svg-Lpul3vFbG1KxqpSl .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-Lpul3vFbG1KxqpSl .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-Lpul3vFbG1KxqpSl .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-Lpul3vFbG1KxqpSl :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

    所有服务都向 Keystone 认证

    OpenStack 业务服务(按调用方向自上而下分层)

    HorizonWeb 控制台(用户入口)

    Heat编排(自动化)

    Nova计算(生命周期核心)

    Neutron网络

    Cinder块存储

    Glance镜像

    Swift对象存储

    Keystone认证 + 服务目录(横切)

    服务代号含义类别一句话职责主要组件(进程)典型部署
    Horizon 地平线 控制台 提供基于 Web 的图形化管理界面 horizon(Apache + mod_wsgi) 控制节点
    Keystone 钥匙石 身份认证 认证、鉴权、服务目录、令牌管理 keystone(httpd/uwsgi) 控制节点
    Glance 一瞥 镜像 镜像的注册、检索、元数据与存储管理 glance-api(registry 已整合) 控制节点
    Nova 新星(超新星) 计算 虚拟机全生命周期管理(核心) nova-api、nova-scheduler、nova-conductor、nova-compute、placement 控制 + 计算
    Neutron 中子 网络 网络即服务(NaaS):二层/三层/负载均衡/防火墙/VPN neutron-server、ML2 插件、各类 Agent、OVN 控制 + 网络 + 计算
    Cinder 煤渣(块) 块存储 为 VM 提供持久化逻辑卷(类似云硬盘) cinder-api、cinder-scheduler、cinder-volume、cinder-backup 控制 + 存储
    Swift 雨燕 对象存储 海量、高可用、分布式的静态对象存储 proxy-server、account/container/object-server 存储节点
    Heat 热 编排 基于声明式模板(HOT)自动化编排整套资源 heat-api、heat-api-cfn、heat-engine 控制节点

    4.2 更多常见服务(了解即可,按需学习)

    服务职责
    Ceilometer / Aodh / Gnocchi 遥测计量、告警、时序指标存储(Telemetry)
    Octavia 负载均衡即服务(LBaaS 的新一代实现,替代旧的 neutron-lbaas)
    Designate DNS 即服务(域名管理)
    Ironic 裸金属(物理机)即服务
    Manila 共享文件系统即服务(NFS/CIFS 等)
    Trove 数据库即服务
    Sahara 大数据(Hadoop/Spark)即服务
    Barbican 密钥管理即服务
    Magnum 容器编排引擎(K8s)即服务
    Zun 容器服务
    Kuryr 容器与 Neutron 网络的桥接
    Placement 资源提供者库存与用量统计(Nova 拆分出的独立服务)

    4.3 基础设施(支撑组件)

    组件作用
    MariaDB / MySQL 关系型数据库,存放各服务的状态与元数据
    RabbitMQ AMQP 消息队列,服务内部进程间 RPC 通信
    Memcached 分布式内存缓存(Keystone 缓存 Token 等)
    etcd 分布式键值库(部分场景做协调/锁,如 OVN、部分网络后端)
    HAProxy + Keepalived 控制节点高可用(VIP、负载分发、故障切换)

    五、组件协作关系

    5.1 服务间的依赖与认证

    • Keystone 是所有服务的"门卫":任何服务收到请求,都会先向 Keystone 校验请求携带的 Token 是否有效、角色是否足够;各服务内部再用 policy(policy.json / policy.yaml) 做基于角色的细粒度授权。
    • 各服务启动时,会用自己的服务账号(nova、glance、cinder、neutron 等)向 Keystone 认证,并在**服务目录(Service Catalog)**中注册自己的 Endpoint(端点 URL)。
    • 用户拿到 Token 后,也就从 Keystone 拿到了"所有服务的地址簿"。

    #mermaid-svg-IV9Hp0S99WodncRX{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-IV9Hp0S99WodncRX .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-IV9Hp0S99WodncRX .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-IV9Hp0S99WodncRX .error-icon{fill:#552222;}#mermaid-svg-IV9Hp0S99WodncRX .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-IV9Hp0S99WodncRX .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-IV9Hp0S99WodncRX .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-IV9Hp0S99WodncRX .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-IV9Hp0S99WodncRX .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-IV9Hp0S99WodncRX .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-IV9Hp0S99WodncRX .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-IV9Hp0S99WodncRX .marker{fill:#333333;stroke:#333333;}#mermaid-svg-IV9Hp0S99WodncRX .marker.cross{stroke:#333333;}#mermaid-svg-IV9Hp0S99WodncRX svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-IV9Hp0S99WodncRX p{margin:0;}#mermaid-svg-IV9Hp0S99WodncRX .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-IV9Hp0S99WodncRX .cluster-label text{fill:#333;}#mermaid-svg-IV9Hp0S99WodncRX .cluster-label span{color:#333;}#mermaid-svg-IV9Hp0S99WodncRX .cluster-label span p{background-color:transparent;}#mermaid-svg-IV9Hp0S99WodncRX .label text,#mermaid-svg-IV9Hp0S99WodncRX span{fill:#333;color:#333;}#mermaid-svg-IV9Hp0S99WodncRX .node rect,#mermaid-svg-IV9Hp0S99WodncRX .node circle,#mermaid-svg-IV9Hp0S99WodncRX .node ellipse,#mermaid-svg-IV9Hp0S99WodncRX .node polygon,#mermaid-svg-IV9Hp0S99WodncRX .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-IV9Hp0S99WodncRX .rough-node .label text,#mermaid-svg-IV9Hp0S99WodncRX .node .label text,#mermaid-svg-IV9Hp0S99WodncRX .image-shape .label,#mermaid-svg-IV9Hp0S99WodncRX .icon-shape .label{text-anchor:middle;}#mermaid-svg-IV9Hp0S99WodncRX .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-IV9Hp0S99WodncRX .rough-node .label,#mermaid-svg-IV9Hp0S99WodncRX .node .label,#mermaid-svg-IV9Hp0S99WodncRX .image-shape .label,#mermaid-svg-IV9Hp0S99WodncRX .icon-shape .label{text-align:center;}#mermaid-svg-IV9Hp0S99WodncRX .node.clickable{cursor:pointer;}#mermaid-svg-IV9Hp0S99WodncRX .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-IV9Hp0S99WodncRX .arrowheadPath{fill:#333333;}#mermaid-svg-IV9Hp0S99WodncRX .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-IV9Hp0S99WodncRX .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-IV9Hp0S99WodncRX .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-IV9Hp0S99WodncRX .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-IV9Hp0S99WodncRX .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-IV9Hp0S99WodncRX .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-IV9Hp0S99WodncRX .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-IV9Hp0S99WodncRX .cluster text{fill:#333;}#mermaid-svg-IV9Hp0S99WodncRX .cluster span{color:#333;}#mermaid-svg-IV9Hp0S99WodncRX div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-IV9Hp0S99WodncRX .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-IV9Hp0S99WodncRX rect.text{fill:none;stroke-width:0;}#mermaid-svg-IV9Hp0S99WodncRX .icon-shape,#mermaid-svg-IV9Hp0S99WodncRX .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-IV9Hp0S99WodncRX .icon-shape p,#mermaid-svg-IV9Hp0S99WodncRX .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-IV9Hp0S99WodncRX .icon-shape .label rect,#mermaid-svg-IV9Hp0S99WodncRX .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-IV9Hp0S99WodncRX .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-IV9Hp0S99WodncRX .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-IV9Hp0S99WodncRX :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

    1. 认证(用户名/密码)

    2. 返回 Token + 服务目录 Endpoints

    3. 携带 Token 请求

    4. 校验 Token / 查角色

    5. 相互调用(HTTP)

    用户

    Keystone

    Nova / Glance / Neutron / Cinder …

    Glance 取镜像 / Neutron 配网络 / Cinder 挂卷

    5.2 资源之间的关系(记忆模型)

    • 镜像 Image:装好了操作系统的"模板";规格 Flavor:CPU/内存/磁盘的"尺码";实例 Instance:用镜像 + 规格创建出来、正在运行的"虚拟机"。
    • Project(租户) 拥有:若干实例、网络、卷、镜像……
    • Neutron:Project 1 : m Network(网络)1 : m Subnet(子网)1 : m Port(端口)1 : 1 VIF(虚拟网卡),多个 VIF 属于 1 个 Instance。
    • Cinder:卷(Volume)可挂载到实例,可由快照创建;Swift:账户 → 容器 → 对象三级。

    六、一台虚拟机是如何诞生的(端到端流程概览)

    这是 OpenStack 最核心的"主线剧情",务必建立整体印象。

    6.1 简单流程(6 步)

    #mermaid-svg-OMrZjCVdIrBb58e7{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-OMrZjCVdIrBb58e7 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-OMrZjCVdIrBb58e7 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-OMrZjCVdIrBb58e7 .error-icon{fill:#552222;}#mermaid-svg-OMrZjCVdIrBb58e7 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-OMrZjCVdIrBb58e7 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-OMrZjCVdIrBb58e7 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-OMrZjCVdIrBb58e7 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-OMrZjCVdIrBb58e7 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-OMrZjCVdIrBb58e7 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-OMrZjCVdIrBb58e7 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-OMrZjCVdIrBb58e7 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-OMrZjCVdIrBb58e7 .marker.cross{stroke:#333333;}#mermaid-svg-OMrZjCVdIrBb58e7 svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-OMrZjCVdIrBb58e7 p{margin:0;}#mermaid-svg-OMrZjCVdIrBb58e7 .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-OMrZjCVdIrBb58e7 .cluster-label text{fill:#333;}#mermaid-svg-OMrZjCVdIrBb58e7 .cluster-label span{color:#333;}#mermaid-svg-OMrZjCVdIrBb58e7 .cluster-label span p{background-color:transparent;}#mermaid-svg-OMrZjCVdIrBb58e7 .label text,#mermaid-svg-OMrZjCVdIrBb58e7 span{fill:#333;color:#333;}#mermaid-svg-OMrZjCVdIrBb58e7 .node rect,#mermaid-svg-OMrZjCVdIrBb58e7 .node circle,#mermaid-svg-OMrZjCVdIrBb58e7 .node ellipse,#mermaid-svg-OMrZjCVdIrBb58e7 .node polygon,#mermaid-svg-OMrZjCVdIrBb58e7 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-OMrZjCVdIrBb58e7 .rough-node .label text,#mermaid-svg-OMrZjCVdIrBb58e7 .node .label text,#mermaid-svg-OMrZjCVdIrBb58e7 .image-shape .label,#mermaid-svg-OMrZjCVdIrBb58e7 .icon-shape .label{text-anchor:middle;}#mermaid-svg-OMrZjCVdIrBb58e7 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-OMrZjCVdIrBb58e7 .rough-node .label,#mermaid-svg-OMrZjCVdIrBb58e7 .node .label,#mermaid-svg-OMrZjCVdIrBb58e7 .image-shape .label,#mermaid-svg-OMrZjCVdIrBb58e7 .icon-shape .label{text-align:center;}#mermaid-svg-OMrZjCVdIrBb58e7 .node.clickable{cursor:pointer;}#mermaid-svg-OMrZjCVdIrBb58e7 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-OMrZjCVdIrBb58e7 .arrowheadPath{fill:#333333;}#mermaid-svg-OMrZjCVdIrBb58e7 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-OMrZjCVdIrBb58e7 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-OMrZjCVdIrBb58e7 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-OMrZjCVdIrBb58e7 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-OMrZjCVdIrBb58e7 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-OMrZjCVdIrBb58e7 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-OMrZjCVdIrBb58e7 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-OMrZjCVdIrBb58e7 .cluster text{fill:#333;}#mermaid-svg-OMrZjCVdIrBb58e7 .cluster span{color:#333;}#mermaid-svg-OMrZjCVdIrBb58e7 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-OMrZjCVdIrBb58e7 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-OMrZjCVdIrBb58e7 rect.text{fill:none;stroke-width:0;}#mermaid-svg-OMrZjCVdIrBb58e7 .icon-shape,#mermaid-svg-OMrZjCVdIrBb58e7 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-OMrZjCVdIrBb58e7 .icon-shape p,#mermaid-svg-OMrZjCVdIrBb58e7 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-OMrZjCVdIrBb58e7 .icon-shape .label rect,#mermaid-svg-OMrZjCVdIrBb58e7 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-OMrZjCVdIrBb58e7 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-OMrZjCVdIrBb58e7 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-OMrZjCVdIrBb58e7 :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

    1. 请求创建 VM

    2. 发消息

    3. 取消息、调度选主机

    4. 发消息:在节点 A 建机

    5. 取消息

    6. 经 KVM Driver 创建 VM

    查询/更新 DB

    用户

    nova-api

    RabbitMQ

    nova-scheduler

    nova-compute(节点 A)

    Instance

    nova-conductor

  • 客户向 nova-api 发请求:“创建一个 Instance”;
  • nova-api 处理后,向 RabbitMQ 发消息:“让 Scheduler 创建”;
  • nova-scheduler 取到消息,执行调度算法,从若干计算节点选出节点 A;
  • nova-scheduler 发消息:“在节点 A 上创建”;
  • 节点 A 的 nova-compute 取到消息,通过本节点的 Hypervisor Driver(KVM) 创建 Instance;
  • 创建过程中需要查/改数据库时,nova-compute 通过消息队列找 nova-conductor,由它访问数据库。
  • 6.2 详细流程(认证 + 资源准备 + 建机,概览)

    CinderNeutronGlancenova-computenova-conductornova-schedulernova-apiKeystone用户CinderNeutronGlancenova-computenova-conductornova-schedulernova-apiKeystone用户#mermaid-svg-7XufTwJkwFS00xSm{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-7XufTwJkwFS00xSm .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-7XufTwJkwFS00xSm .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-7XufTwJkwFS00xSm .error-icon{fill:#552222;}#mermaid-svg-7XufTwJkwFS00xSm .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-7XufTwJkwFS00xSm .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-7XufTwJkwFS00xSm .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-7XufTwJkwFS00xSm .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-7XufTwJkwFS00xSm .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-7XufTwJkwFS00xSm .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-7XufTwJkwFS00xSm .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-7XufTwJkwFS00xSm .marker{fill:#333333;stroke:#333333;}#mermaid-svg-7XufTwJkwFS00xSm .marker.cross{stroke:#333333;}#mermaid-svg-7XufTwJkwFS00xSm svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-7XufTwJkwFS00xSm p{margin:0;}#mermaid-svg-7XufTwJkwFS00xSm .actor{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-7XufTwJkwFS00xSm text.actor>tspan{fill:black;stroke:none;}#mermaid-svg-7XufTwJkwFS00xSm .actor-line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-7XufTwJkwFS00xSm .innerArc{stroke-width:1.5;stroke-dasharray:none;}#mermaid-svg-7XufTwJkwFS00xSm .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-svg-7XufTwJkwFS00xSm .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-svg-7XufTwJkwFS00xSm #arrowhead path{fill:#333;stroke:#333;}#mermaid-svg-7XufTwJkwFS00xSm .sequenceNumber{fill:white;}#mermaid-svg-7XufTwJkwFS00xSm #sequencenumber{fill:#333;}#mermaid-svg-7XufTwJkwFS00xSm #crosshead path{fill:#333;stroke:#333;}#mermaid-svg-7XufTwJkwFS00xSm .messageText{fill:#333;stroke:none;}#mermaid-svg-7XufTwJkwFS00xSm .labelBox{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-7XufTwJkwFS00xSm .labelText,#mermaid-svg-7XufTwJkwFS00xSm .labelText>tspan{fill:black;stroke:none;}#mermaid-svg-7XufTwJkwFS00xSm .loopText,#mermaid-svg-7XufTwJkwFS00xSm .loopText>tspan{fill:black;stroke:none;}#mermaid-svg-7XufTwJkwFS00xSm .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-7XufTwJkwFS00xSm .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-7XufTwJkwFS00xSm .noteText,#mermaid-svg-7XufTwJkwFS00xSm .noteText>tspan{fill:black;stroke:none;}#mermaid-svg-7XufTwJkwFS00xSm .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-svg-7XufTwJkwFS00xSm .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-svg-7XufTwJkwFS00xSm .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-svg-7XufTwJkwFS00xSm .actorPopupMenu{position:absolute;}#mermaid-svg-7XufTwJkwFS00xSm .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#mermaid-svg-7XufTwJkwFS00xSm .actor-man line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-7XufTwJkwFS00xSm .actor-man circle,#mermaid-svg-7XufTwJkwFS00xSm line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;stroke-width:2px;}#mermaid-svg-7XufTwJkwFS00xSm :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}1. 提交认证信息2. 返回 Token3. 携带 Token 请求 boot4-5. 校验 Token / 角色6-7. 初始化 VM 数据库记录8. rpc.call 请求选主机9-11. 查资源、过滤+权重、选定主机12-13. rpc.cast 下发建机14-19. 经 conductor 取 VM 信息20-22. 认证并获取镜像23-25. 认证并获取网络信息26-28. 认证并获取存储信息29. 调用 KVM 驱动创建虚拟机

    四阶段记忆法:

  • 认证(Authentication):用户先向 Keystone 认证拿 Token;nova-api 收到请求后再向 Keystone 校验 Token。
  • 调度(Scheduling):nova-scheduler 通过"过滤 Filter + 权重 Weight"两步,选出最合适的计算节点。
  • 资源准备(Resource Preparation):nova-compute 分别向 Glance 取镜像、Neutron 取网络、Cinder 取持久化存储,每一步都要先过 Keystone 认证。
  • 建机(Spawn):nova-compute 调用 KVM/QEMU 驱动,最终创建并启动虚拟机。

  • 七、OpenStack 怎么部署

    部署方式说明适用场景
    Packstack RHEL/CentOS 系的快速部署工具,基于 Puppet,用一个应答文件(answer file)一键部署 本课程使用;POC、学习、小规模
    DevStack 官方开发/演示用脚本,All-in-One,快速但不适合生产 开发、体验、调试
    Kolla / Kolla-Ansible 把各服务打包成 Docker 容器,用 Ansible 部署,提供容器化、可升级的生产方案 生产、容器化运维
    OpenStack-Ansible (OSA) 官方 Ansible 剧本,LXC 容器化部署,生产级高可用 生产
    TripleO(“OpenStack on OpenStack”) 用 OpenStack 自己部署/管理 OpenStack(undercloud/overcloud),偏大规模 大规模生产(已逐步进入维护期)
    手动部署 严格按官方安装文档逐组件配置 学习原理,不推荐生产

    生产高可用(HA)要点:控制节点服务多实例部署,前端用 HAProxy + Keepalived(VIP) 做负载均衡与故障切换;数据库用 MariaDB Galera 集群;消息队列做 RabbitMQ 集群;计算节点故障时由 Nova 触发 evacuate 在其他节点重建实例。


    八、版本生态与云原生

    • OpenStack 与 Kubernetes 的关系:
      • OpenStack 解决"虚拟机/基础设施(IaaS)"的管理,擅长资源虚拟化、多租户、网络与存储;
      • Kubernetes 解决"容器(PaaS/CaaS)"的编排,擅长应用的弹性、调度与微服务;
      • 二者互补而非替代:常见架构是"OpenStack 提供 VM/网络/存储底座,K8s 跑在 VM 或裸金属上";OpenStack 也通过 Magnum、Kuryr、Zun、Kata Containers 等项目与容器生态融合。
    • 云原生(Cloud Native):以容器、微服务、不可变基础设施、声明式 API 为核心的应用构建与运行方式;代表技术 CNCF 生态(K8s、容器、服务网格、DevOps)。
    • 常见搭配:OpenStack + Ceph(统一的块/对象/文件存储)、OpenStack + OVN(SDN 网络)、OpenStack + K8s。

    九、学习路线与分篇导航

    9.1 建议学习顺序

  • 先读本篇(总纲),建立全局认知;
  • 按"认证 → 镜像 → 计算 → 存储 → 编排 → 网络"的顺序进入分篇(这也是创建 VM 时各服务被调用的顺序);
  • 每篇先看"导读/目标",再理解原理与架构,然后对照 Dashboard 与 CLI 操作,最后做"自测题"检验;
  • 理论 + 实验结合:每篇的实验务必亲手做一遍,用 tail -f 观察各组件日志,最能加深理解。

  • 十、本篇小结

    • 云计算是按需、池化、弹性、可计量的资源服务模式;SPI 三层(IaaS/PaaS/SaaS)中,OpenStack 属于开源 IaaS 平台。
    • OpenStack 由 Rackspace + NASA 于 2010 年发起,微服务、API 驱动、消息队列、可插拔是其核心设计哲学;本实验为 CentOS-Stream-8 + Victoria,Packstack 部署。
    • 总体架构 = 控制平面 + 数据平面 + RabbitMQ + MariaDB;物理上分为控制、计算、存储、网络四类节点。
    • 七大核心服务:Keystone(认证)、Glance(镜像)、Nova(计算)、Neutron(网络)、Cinder(块存储)、Swift(对象存储)、Heat(编排),加上 Horizon(界面)。
    • 创建 VM 的主线:认证 → 调度(过滤+权重)→ 取镜像/网络/存储 → KVM 建机。

    十一、重点速记(考前/复习必看)

    考点一句话记忆
    OpenStack 定位 开源 IaaS 云平台,“云数据中心操作系统”
    起源 2010.7,Rackspace + NASA;Nova 来自 NASA、Swift 来自 Rackspace
    基金会 OpenStack 基金会,2020 改名 OpenInfra
    实验版本 Victoria,CentOS-Stream-8,Packstack
    节点 控制(大脑)、计算(肌肉)、存储(仓库)、网络(门卫)
    组件代号 钥匙石 Keystone、一瞥 Glance、新星 Nova、中子 Neutron、煤渣 Cinder、雨燕 Swift、热 Heat、地平线 Horizon
    通信 服务内 RabbitMQ(RPC);服务间 REST + Keystone 认证;状态存 MariaDB
    调度 FilterScheduler = 过滤 Filter + 权重 Weight
    建机流程 认证 → 调度 → 取镜像/网络/存储 → KVM 建机
    默认 Hypervisor KVM/QEMU

    十二、自测题(先自己答,再回看正文)

    1. 名词解释:云计算、IaaS、Hypervisor、OpenStack、节点、Endpoint。

    2. 选择题

    (1) OpenStack 属于哪一类云服务模型?( )
    A. SaaS B. PaaS C. IaaS D. DaaS

    (2) OpenStack 由哪两家机构于 2010 年联合发起?( )
    A. Google + Amazon B. Rackspace + NASA C. IBM + 微软 D. Red Hat + Intel

    (3) 本课程实验环境使用的 OpenStack 版本是?( )
    A. Newton B. Train C. Victoria D. Wallaby

    (4) 真正运行虚拟机、安装 KVM 的是哪类节点?( )
    A. 控制节点 B. 计算节点 C. 网络节点 D. 存储节点

    (5) Nova 服务内部 nova-api 与 nova-scheduler 之间主要通过什么通信?( )
    A. 直接共享内存 B. 消息队列 RabbitMQ C. 写文件 D. 串口

    3. 简答题

  • 简述 IaaS、PaaS、SaaS 的区别,并各举一例。
  • 画出(或口述)OpenStack 的总体逻辑架构,并说明四类节点的职责。
  • 按"四阶段记忆法",描述创建一台虚拟机的完整过程。
  • 为什么说 OpenStack 是"松耦合、可插拔"的?这带来什么好处?

  • 参考答案(自测题)
    2(1) C;(2) B;(3) C;(4) B;(5) B。
    简答题见正文对应章节:SPI 模型见 1.2;架构与节点见第三部分;建机流程见第六部分;设计哲学见 2.4。

    赞(0)
    未经允许不得转载:171主机测评 » 00 · OpenStack 总纲——从云计算到 OpenStack 全景
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址