H3C CloudOS 云操作系统深度解析:架构设计与核心能力
云操作系统的核心能力不是虚拟化,是把资源的所有权换成了分配权。真正难的不是开通,是回收——而回收难的原因通常不在技术上。
#开篇:一个问题与一条分界线
云平台上线三个月后,通常会有人来问一个技术之外的问题:"这台虚拟机是谁的?能不能关掉?"
那一瞬间你会发现:云平台上线之后第一个变复杂的不是技术栈,是账。这个问题之所以能被问出来,恰恰说明平台已经完成了一件比虚拟化更根本的事——它把资源的所有权换成了分配权。
本文要解决的问题是:在一个同时跑着多套虚拟化(H3C CAS/KVM、VMware vSphere 等)与容器(Kubernetes)资源的环境中,云管理平台(Cloud Management Platform,CMP)如何把异构资源抽象成统一资源池与租户模型,如何把计算、存储、网络编排成一台可交付的云主机,又如何让多租户隔离(VPC/项目/配额)落到底层、让"谁有资格拿多少、拿完怎么算"这件事可审计、可回收。它背后最基础的机制只有一条:把"资源怎么执行"的语义(数据面)与"谁能用、用多少、用多久"的语义(控制面)分开,中间放一层翻译结构——资源池、租户模型、配额与计量。理解了这条分界线,后面所有功能模块、操作路径和坑都能从因果上推导出来,而不是靠背菜单。
#原理层:从底层机制推导平台为什么长这样
#定位:它不是虚拟化,是一种分配制度
虚拟化解决的是"一台物理机怎么切成多台"。云操作系统解决的是另一个问题:在一个组织里,谁有权拿到多少资源、通过什么流程拿、用完之后怎么算、怎么还。
这两件事经常被混为一谈,因为它们的界面长得一样(都是"创建虚拟机"的按钮)。但差异在按钮之外:
| 问题 | 虚拟化平台 | 云操作系统 |
|---|---|---|
| 资源从哪来 | 管理员手工分配 | 资源池 + 配额 + 调度 |
| 谁能用 | 有权限的账号 | 租户/项目,带审批流 |
| 用了多少 | 看得到 | 计量 + 计费/分摊 |
| 用完怎么办 | 常常没人管 | 需要回收机制(且常常失效) |
| 谁负责 | 运维 | 运维 + 资源所有者 + 财务 |
看第四行和第五行:它们已经不是技术问题了。这就是为什么"上一套云平台"经常卡在组织层面而不是技术层面——它要求组织先承认"资源是有主的"。CMP 的所有机制设计,本质都是在回答这家组织如何承认资源有主。
#异构资源如何被"翻译"成统一资源池
先看最底层的事实。任何一台物理机上的虚拟化,本质都是对四类资源的抽象:
- CPU:vCPU 只是被调度器切分的时间片(以及可选的绑核/直通),虚拟机"有多少核"是调度语义,不是物理语义;
- 内存:通过硬件辅助虚拟化(如 EPT/NPT)建立从客户机物理地址到宿主机物理地址的映射,虚拟机的"内存条"是一张页表;
- 存储:虚拟磁盘通常是一个文件或一个卷(qcow2、vmdk、RAW 等格式),I/O 最终落到宿主机文件系统或分布式存储;
- 网络:虚拟网卡接入虚拟交换机(Linux Bridge、OVS、VMware vSwitch 等),收发包在宿主机内核里完成转发。
这些抽象每一家做得都不同:KVM 的 vCPU 是宿主机线程,VMware 的调度算法、存储格式、虚拟交换机实现各有差异;容器则是另一套进程级隔离(Namespace + Cgroup)语义。CMP 不可能抹平这些差异,它只能做三件事:
- 盘点:通过各平台的管理 API 采集主机、存储、网络、镜像、运行中的实例,形成一份统一清单(Inventory)。盘点做不全,后续一切治理都是盲治;
- 归一化:把"该平台有 32 核 256 GB 内存、可创建某规格虚机"翻译成平台无关的资源模型——计算规格(Flavor)、存储类型、网络类型、镜像格式;
- 池化:把归一化后的资源按用途聚合成逻辑资源池——计算池、存储池、网络池、镜像池,每个池对外暴露三个数字:总量、已分配、剩余。
这里要强调一个容易误会的点:资源池不是物理实体,它是一个带调度策略的逻辑边界。同一个计算池里可以混纳多台异构主机,调度器按"最合适分配(Best Fit)"、聚合、反亲和等策略决定新云主机落在哪台物理机上。池的意义不是"资源在一起",而是"边界可预测"——配额、计费、回收全部以池为口径,这正是租户模型的物质基础。
#云主机是如何被编排出来的
云主机(Cloud Instance)在模型上可以拆成三个独立维度:
- 计算规格:vCPU 数量、内存大小,对应 CPU 调度与内存映射抽象;
- 启动卷:镜像(操作系统模板)× 存储后端(本地盘、集中存储、分布式存储),对应存储抽象;
- 网络接入:VPC/子网、安全组、弹性 IP,对应网络抽象。
三个维度各有独立的决策路径,但被编排成一台机器时,必须经过一条固定因果链:
- 请求到达控制面 API 网关,先做身份认证与租户鉴权——你是谁、属于哪个项目;
- 做配额校验:目标项目剩余的 vCPU、内存、存储、实例数是否够用,不够直接拒绝,而不是"创建一半再失败";
- 调度:在目标计算池里选宿主机,考虑存储就近、NUMA 拓扑、亲和/反亲和规则;
- 置备:镜像分发到目标宿主机或存储后端,创建系统盘与数据盘;
- 网络接入:创建虚拟端口、分配 IP、下发安全组与 ACL 规则;
- 上电与初始化:启动虚拟机,通过 cloud-init 或 guest agent 注入主机名、密钥、初始化脚本。
把这条链路画成状态流,就是:
申请(租户发起)
→ 审批(可选,按流程配置)
→ 创建中(控制面:配额校验 → 调度 → 置备 → 网络接入)
→ 运行中(数据面:虚拟机在宿主机上执行)
→ 停止 / 重启 / 迁移 / 变更规格
→ 到期待确认(回收队列)
→ 删除这条链路上的每一步,责任都落在"控制面"或"数据面"某一侧,这就是下一个机制。
#控制面与数据面:必须画清楚的分界线
云平台**控制面(Control Plane)**负责"决定该发生什么":API 网关、认证鉴权、编排、调度、配额、计量、审计、镜像管理、服务目录。**数据面(Data Plane)**负责"真正执行":虚拟机监控器、虚拟交换机、存储后端、容器运行时。
从这条分界线可以推出四个直接后果:
- 控制面不可用,不等于业务不可用。管理节点重启、数据库主备切换期间,运行中的云主机不中断——数据面与业务流量走的是另一条路;
- 数据面故障才是真故障。计算节点宕机、存储失联、网络中断,才意味着业务真的停了;
- 升级可以分开做。控制面滚动升级不影响数据面,这正是云平台敢做"在线升级"的前提;
- 排查问题必然跨层。一个"门户报错",根因可能在调度器、在存储、在底层虚拟化,也可能在审批流配置——没有日志与审计链路,只能在两层接缝里盲猜。
把视角拉到整个平台的纵向结构,云操作系统的分层用一句话概括:上面是组织语义,下面是资源语义,中间是翻译层。原文给出的分层图值得原样保留:
服务目录 / 门户 / 审批流 ← 组织语义(角色、流程、SLA)
↓
计量与配额 / 计费 / 报表 ← 翻译层(把技术量折算成组织量)
↓
编排与调度(虚拟化 / 容器 / 裸金属)
↓
资源池(计算 / 存储 / 网络 / 镜像)
↓
物理基础设施值得注意的是,中间这两层和 OpenStack、Kubernetes 有能力重叠。现实中常见两种做法:
- 云操作系统自己把编排做完整(管理面与编排面同源):好处是一致,代价是生态绑定;
- 云操作系统站在 OpenStack/K8s 之上做治理(编排交给成熟底座):好处是底座能力不用重造,代价是跨越两层排查问题——一次故障要从"门户报错"一路追到"底层调度器为什么拒绝"。
这不是"哪种更好",而是你愿意把复杂度放在同一层,还是分在两层的接缝上。前者看起来自研多,后者在出故障时更难定位。选之前先确认自己团队更擅长哪一侧。
#多租户隔离如何映射到底层机制
多租户讲得很多,但落到可验证的层面,隔离只有四类边界,强度差别非常大:
| 边界 | 隔离手段 | 强度 | 常见漏洞 |
|---|---|---|---|
| 网络 | VLAN/VXLAN、安全组、ACL | 强(但有配置复杂性) | 默认放通的规则、迁移时掉的策略 |
| 配额 | 资源上限、份额 | 弱:是政策,不是隔离 | 只防误用,防不了有意绕过 |
| 镜像/模板 | 私有镜像空间 | 中 | 公共 API 能查到别的租户的镜像元数据 |
| 密钥/凭证 | KMS、租户级密钥 | 强(若用对) | 密钥跨租户复用、权限过大 |
这四类边界如何映射到底层,是理解多租户的关键:
项目(Project)是所有权模型的根。 在平台内部,租户/项目是 RBAC 的作用域、配额的作用对象、计量与审计的记账单位。资源的归属关系是"租户 → 项目 → 资源"的三级树,一切权限判断都从这棵树的根开始,而不是从资源本身开始——这就是"这台虚拟机是谁的"在机制上的答案。
网络隔离映射到覆盖网络与流表。 VPC 是租户级隔离的最高层抽象,底层映射到 VXLAN 的 VNI(简单场景则是 VLAN ID)。同一 VPC 内的子网靠路由互通,不同 VPC 之间默认不通;安全组与 ACL 最终下发给虚拟交换机变成流表规则(OVS 或内核流表)。常见漏洞有两个:默认放通的规则(规则是配置出来的,不是继承出来的),以及迁移时策略丢失(云主机从一台宿主机迁到另一台,如果目标侧策略未同步,隔离就出现缺口)。
配额映射到控制面 API 层的校验。 配额只在请求入口做上限判断,它是政策,不是隔离机制。把配额当成安全边界,是把"不方便"误当成"不可能"。真正的隔离得靠网络与凭证——这一条在验证层还要回到现场确认。
镜像/模板隔离映射到可见性控制。 私有镜像空间隔离的是"可见性",但如果公共 API 的元数据接口没有做租户过滤,就可能出现跨租户信息泄露。更危险的是内容层面的通道:一个租户上传的镜像如果带有后门或硬编码凭证,它被别的租户使用时就变成了一条跨租户通道。私有云的镜像仓库通常需要比公有云更严格的入库审核——这一点和公有云的角色正好相反:公有云靠规模化与自动化校验,私有云只能靠流程。
密钥/凭证隔离映射到 KMS 的租户密钥域。 租户级密钥由 KMS 管理,密钥跨租户复用、权限过大是高频漏洞;用对了,这是比网络更硬的边界。
#计量:把技术资源翻译成组织语言
计量听起来是财务需求,其实它首先是个技术设计问题:你要以多细的粒度记录资源使用,决定了你事后能回答多细的问题。
| 计量粒度 | 能回答的问题 | 代价 |
|---|---|---|
| 只记"分配了多少" | 谁占了多少配额 | 便宜,但对"闲置"完全无感 |
| 记"实际使用"(CPU/内存/存储) | 谁在浪费 | 需要采集链路与存储,成本明显上升 |
| 记到时间维度(时长 × 规格) | 成本分摊、chargeback | 对采集稳定性要求高,缺采样还要能解释 |
现实里最常见的困境是:第一年不做计量,第二年被要求分摊成本时,历史数据已经取不回来了。所以哪怕暂时不做计费,也建议从第一天开始把"实际使用"记下来——数据可以先不用,但不能不采。
#操作层:平台功能、部署架构与操作路径
进入操作层前先说版本口径:本文不写具体部署命令与参数。H3C CloudOS 各版本差异较大,且这类内容的价值随时间衰减很快;以下功能模块、菜单路径、部署形态与验证界面均以官方文档对应版本为准。文中给出的是平台稳定存在的功能面与操作顺序,不是某个版本的手册。
#平台功能模块
从控制面/数据面分界线上,可以推导出云管理平台必须包含的功能模块:
- 服务目录与自助门户:租户申请资源的入口,也是"分配权"的可见载体;
- 资源池管理:纳管虚拟化/容器平台,维护计算池、存储池、网络池、镜像池;
- 租户/项目管理:所有权模型,资源归属的根;
- 配额管理:按 vCPU/内存/存储/实例数等维度给租户划边界;
- VPC/网络管理:VPC、子网、路由、安全组、弹性 IP;
- 镜像/模板管理:镜像入库审核、规格(Flavor)定义;
- 审批流:申请—审批—留决策记录;
- 计量与报表/计费分摊:把技术量折算成组织量;
- 审计日志:谁在什么时候改了什么;
- 监控告警:物理资源与云资源两级监控;
- 回收治理:到期队列、责任人通知、回收确认。
#部署架构
典型部署分成两条线:
- 管理面(控制面)集群:API 网关、认证与鉴权、编排调度服务、数据库、消息队列、计量采集、审计存储;通常以多节点集群部署,管理节点重启不影响数据面业务;
- 资源面(数据面):计算节点(纳管 H3C CAS/KVM、VMware 等)、存储后端(本地盘/集中存储/分布式存储)、网络节点与 SDN 控制器、容器集群(Kubernetes)。
网络规划上建议至少区分三类平面:管理网络(控制面组件互通)、业务网络(租户流量)、存储网络(存储数据流量),三者物理或逻辑隔离,避免存储流量抢占业务带宽。高可用方面,管理节点集群建议不少于三节点,数据库与消息队列做主备或集群。整体拓扑示意:
管理面(控制面):API 网关 / 认证鉴权 / 编排调度 / 数据库 / 消息队列 / 计量 / 审计
│ 管理网络
资源面(数据面):计算节点(CAS/KVM、VMware)│ 存储后端(集中/分布式)
│ 网络节点 / SDN 控制器 │ 容器集群(Kubernetes)
│ 业务网络 + 存储网络(与管理工作面隔离)
租户访问:自助门户 / 服务目录 / 管理控制台#管理员操作路径
管理员侧的典型操作顺序(菜单名称以官方文档对应版本为准):
- 纳管资源:接入虚拟化平台/主机,创建计算资源池;接入存储后端,创建存储池;规划并接入网络;
- 准备镜像与规格:导入操作系统镜像并做入库审核,定义云主机规格(Flavor);
- 创建租户与配额:建租户/项目,设置 vCPU、内存、存储、实例数配额,创建管理员与租户管理员角色;
- 配置审批流:定义资源申请审批链——尽量短,审批链每长一环,绕开它的动机就强一分;
- 发布服务目录:把常用镜像+规格+网络组合发布为服务项;
- 开启计量与审计:确认计量采集在第一天就打开,审计日志保留策略设好;
- 日常治理:监控配额使用率,处理到期回收队列,复盘闲置资源。
#租户操作路径
租户侧的典型操作顺序:
- 登录自助门户(以租户身份);
- 发起申请:选择服务目录项,确认规格、镜像、VPC/子网、使用时长;
- 提交审批:申请进入决策记录流,审批通过后由编排自动完成创建;
- 使用与监控:在控制台管理云主机、查看监控、续期或变更规格;
- 到期处理:到期资源进入待确认队列,续期或确认释放。
#决定长期能不能跑的三件事
产品介绍通常重点讲编排和调度,因为那部分最能体现技术含量。但真正决定这套东西能不能长期跑下去的是另外三件:
配额。 配额不是"限制用户",是给资源池划出可预测的边界。没有配额的共享池,资源会被少数人的习惯性超配吃光,然后所有人一起变慢。配额的关键是"按什么维度设":vCPU/内存/存储/实例数?只按一个维度设配额,等于没设。
审批。 审批流的价值不是"拦住申请",而是留下决策记录。一个没有审批的云平台,在出账的时候无法回答"这批资源是为什么开的"。但审批也不能太重——审批链每长一环,绕开它的动机就强一分(直接找管理员开、或者在自己机器上偷偷跑)。
回收。 见边界与坑一节,它值得单独说。
这三件事有一个共同特征:它们在功能演示里全都看不到,但在第二年全部会变成主要矛盾。这也是几乎所有私有云项目的共同节奏——第一年比谁功能多,第二年开始比谁收得回来。
#落地顺序:先能审计,再谈自助
如果排一个顺序(个人偏好,不是厂商推荐):
- 资源池 + 配额 + 责任人字段:先把"资源有主"这件事立起来;
- 计量数据采集:可以不做报表,但必须先存下来;
- 审计日志:谁在什么时候改了什么,必须可查。这一步是后面所有治理的前提;
- 审批流:在有了前三步之后再加,否则审批只是在制造绕过的动机;
- 自助服务目录:最后做。自助的前提是边界清晰,边界不清晰的自助等于把混乱自动化。
反过来(先上自助目录、后补治理)也能跑,只是第二年的返工量会大得多。
#验证层:怎么确认我做对了
部署完成不等于做对了。按因果链逐层验证,每层都有可核查的判定标准。
#验证资源池抽象是否正确
判定标准:资源池的"总量/已分配/剩余"与实际物理资源一致,新建云主机能落到预期池与预期主机。控制台资源概览的示意输出(以官方文档对应版本界面为准):
计算池:CPU 总量 256 核 / 已分配 128 核 / 剩余 128 核
内存 总量 1024 GB / 已分配 512 GB / 剩余 512 GB
存储池:容量 总量 80 TB / 已分配 32 TB / 剩余 48 TB操作与判定:在管理面查看池容量 → 创建一台最小规格云主机 → 确认状态进入"运行中"且落点主机符合调度预期(亲和/反亲和规则生效);把主机从池中移除后,池容量应立即减少对应值。
#验证租户隔离是否真实生效
- 网络隔离:建两个租户、两个 VPC,各放一台云主机,跨 VPC 互 ping 应该不通,同 VPC 互通;安全组规则按预期放通/拒绝——规则是配置出来的,不是继承出来的;
- 配额校验:把某一租户配额调低到不足,再申请超限资源,请求应被控制面明确拒绝,而不是"创建一半再失败";
- 可见性隔离:租户 A 的私有镜像,租户 B 在门户与公共 API 中都不可见;
- 凭证隔离:租户级密钥只在本租户可用,出现跨租户复用应立即能在审计中查到。
#验证编排链路
创建云主机时观察状态机按"创建中 → 运行中"流转;创建完成后核对:规格正确、IP/MAC 已分配、安全组已生效、系统盘容量与所选规格一致;删除时应回收卷、释放 IP、清理端口,不留孤儿资源。
#验证控制面/数据面分离
在维护窗口做一次控制面重启演练:重启管理节点或切换数据库后,运行中的云主机业务不应中断;同时确认控制面恢复后计量采集与审计日志无缺口。数据面故障演练(如模拟计算节点宕机)则应该真实影响业务——区分清楚哪一侧故障才是真故障,这是验收控制面设计是否正确的核心。
#验证计量与审计
跑一段已知负载后,计量报表应出现对应时段的 CPU/内存/存储采样;改变一次配额或安全组,审计日志应能回答"谁在什么时候改了什么"。两项都通过,才说明"账"这条链路是真的。
#边界与坑:常见失败模式与排查思路
把控制面/数据面的分界线记在心里,以下坑大部分可以提前识别。
配额与安全边界混淆。 配额是政策不是机制,把"不方便"当"不可能"是安全设计上最贵的错觉。真正的隔离靠网络与凭证,镜像审核与密钥管理不能省。
审批过重诱发绕行。 审批链每长一环,绕过它的动机就强一分。审批的目的是留决策记录,不是设路障;如果发现大量"找管理员直接开"或"在自己机器上偷偷跑"的流量,先检查审批流是不是太重了。
计量数据不可补采。 第一年不做计量,第二年分摊成本时历史数据已经取不回来。存储成本可以省,采集链路不能省。
回收为什么最难。 回收难,表面上是因为"怕删错"。深层原因是三条,没有一条是技术问题:
- 所有权不明。 虚拟机创建时没有登记责任人,半年后只能靠猜。这是流程缺失,不是工具缺失。
- 停机需要一个承担后果的人。 关掉之后业务出问题,责任归谁?在没有明确规则的组织里,没人愿意签这个字。
- 验证成本高于收益。 确认一台机器确实没人用,往往要问一圈人;而省下的那点资源,对提问者没有直接收益。
对应的可行做法也就三条,都是制度性的:
- 创建即登记:责任人字段设为必填,且不能填"待定";
- 默认到期:给每个资源一个到期时间,到期不是自动删,是自动进入待确认队列并通知责任人。这一步把"我主动去关"换成"你不续期就等于同意关",动机结构完全反过来了;
- 给回收者记功:如果回收动作没有任何正向反馈,它永远不会成为习惯。
第三条听起来像管理学,不是技术。但对私有云来说,它就是运维的一部分——技术手段只能把回收变得低成本,不能把它变得"有人愿意做"。
镜像即通道。 带后门或硬编码凭证的镜像被别的租户使用时,就是一条跨租户通道。私有云没有公有云的规模化自动化校验,只能靠入库审核流程把好这一关。
跨层排查成本。 站在 OpenStack/K8s 之上做治理时,一次故障要从门户一路追到底层调度器。日志与审计链路是唯一的导航,上线前就要把链路打通,否则故障期只能盲猜。
版本差异。 H3C CloudOS 各版本功能、菜单、API 差异较大,本文件所有功能与路径均以官方文档对应版本为准,不要照抄任何旧手册。
最后说明本文没有覆盖的内容:没有写具体产品的部署步骤与参数(版本差异大,且这类内容的价值随时间衰减很快,请以你手上的版本手册为准);没有写与公有云的对比(成本、合规、弹性、组织成熟度是真实但独立的问题,塞进这里会让两边都讲不清);没有写与容器平台的关系(云操作系统与 K8s 的边界正在变化中,现在下结论为时过早,原理层只标出了重叠区域);没有给"该不该上"的结论(这个问题取决于你的组织是否已经承认"资源有主",而这只有你自己能回答)。
#收尾:评估云平台看什么
如果只带走一句:云操作系统真正交付的东西不是虚拟化能力,是一套可审计的分配制度。 它把异构虚拟化与容器翻译成统一资源池,把资源所有权换成可追踪的分配权,把计算/存储/网络编排成云主机,把隔离落到网络与凭证,把"谁花了多少"记录到计量与审计。评估它的时候,不要看它能开多少种资源,要看它能不能回答"这台机器是谁的、为什么还在"。
相关阅读
Related留言讨论
0 条还没有留言,来说点什么吧。