Files
slide/decks/xinfra/slides.md
T

1296 lines
33 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
theme: frankfurt
title: XINFRA 平台架构
author: 实训小组
infoLine: true
transition: slide-left
mdc: true
drawings:
persist: false
---
# XINFRA 平台需求与架构
<div class="text-xl mt-4 text-gray-400">
统一基础设施管理平台 · 总体架构设计
</div>
<div class="mt-8 text-lg text-gray-500">
实训小组
</div>
<!--
封面:XINFRA 平台架构总览
-->
---
layout: default
---
# 目录
<div class="grid grid-cols-3 gap-8 mt-8">
<div>
### 一、系统需求
- 系统边界
- 做什么 vs 不做什么
</div>
<div>
### 二、用户故事
- 资源查看
- 业务交付
- 基础服务交付
- 数据库审核
- 业务线切换
</div>
<div>
### 三、关键决策
- 入口聚合
- 业务线隔离
- Ansible 编排
- 对接夜莺
</div>
<div>
### 四、关键功能
- 资源纳管
- 服务交付
- 子系统功能
</div>
<div>
### 五、架构图
- 平台分层
- 部署架构
- 监控告警
- 安全认证
</div>
<div>
### 六、对接子系统
- Wayne · CloudDM
- CacheCloud · Apollo
- qpass · Grafana
- Superset
</div>
</div>
---
section: 系统需求
layout: center
---
# 一、系统需求
<div class="text-gray-400 mt-2">系统边界 · 做什么 vs 不做什么</div>
---
# 一句话概括需求
<div class="mt-6 text-lg leading-relaxed text-center px-12">
各业务线长期独立建设,资源分散、交付效率低、权限过大、监控割裂、基础服务交付不标准——<br>
XINFRA 以**机房容器资源**为核心,把资源、服务、任务、审计和监控统一纳管,配套容器发布、SQL 审核、Redis 管理、配置中心、指标可视化、日志分析等子系统,完成多种运维场景下的需求。
</div>
---
# 系统边界 — 做什么 vs 不做什么
<div class="grid grid-cols-2 gap-6 mt-4 text-sm">
<div>
### ✅ 做什么
| 范围 | 说明 |
|------|------|
| 统一入口 | 一个入口登录,集中展示各子系统和平台能力 |
| 资源台账 | 统一查看物理机、虚机、云主机、K8s 资源 |
| 容器纳管 | 管理 K8s 集群、Namespace、配额和业务线归属 |
| 业务交付 | 跳转 Wayne、CloudDM、Apollo、Superset 等系统 |
| 基础服务交付 | 标准化模板 + Ansible 编排 |
| 数据库审核 | SQL 工单、审批、审计 |
| 监控纳管 | 对接夜莺,按业务线展示告警 |
| 权限管理 | 业务线维度授权、子系统角色管理 |
| 审计 | 记录登录、跳转、审批和自动化执行 |
</div>
<div>
### ❌ 不做什么
| 范围 | 不做原因 |
|------|---------|
| 替代 Wayne、Apollo、CloudDM、CacheCloud、Grafana、Superset 等 | 专业系统继续保留 |
| 全量自研监控和告警引擎 | 成本高,非当前重点 |
| 复杂 AI 排障 | 由其他项目负责 |
| 虚机创建主流程 | 统一走线下流程 |
| 大而全的运维平台 | 两个月内不现实,也不必要 |
</div>
</div>
---
section: 用户故事
layout: center
---
# 二、用户故事
<div class="text-gray-400 mt-2">资源查看 · 业务交付 · 基础服务交付 · 数据库审核 · 业务线切换</div>
---
# 用户故事 — 资源查看
<div class="mt-8 space-y-6 text-lg">
**场景**:运维人员登录 XINFRA 后,直接看到全量资源分布、业务线归属、节点状态和容量概览,不需要在多个 CMDB 和云平台之间来回切换。
**链路**:业务 SRE 登录 XINFRA → 选择业务线 → 平台同步 CMDB / 云平台 / RKE2 数据 → 展示全量资源大盘
</div>
---
# 用户故事 — 资源查看 · 交互图
<div class="mt-4" style="transform: scale(1.0); transform-origin: top left; height: 50vh;">
```mermaid
sequenceDiagram
actor SRE as 业务 SRE
participant XINFRA as XINFRA 主系统
participant CMDB as SINA CMDB
participant Cloud as 云平台 API
participant K8s as RKE2 集群
SRE->>XINFRA: 登录,选择业务线
XINFRA->>CMDB: 同步物理机/虚机数据
XINFRA->>Cloud: 同步云主机数据
XINFRA->>K8s: 查询集群节点状态
XINFRA-->>SRE: 展示全量资源分布<br/>业务线归属 · 节点状态 · 容量概览
```
</div>
---
# 用户故事 — 业务交付
<div class="mt-8 space-y-6 text-lg">
**场景**:业务 SRE 在 XINFRA 中进入"业务交付",选择对应业务线后跳转到 Wayne、CloudDM、Apollo 或 Superset 完成实际操作,平台保留入口、上下文和审计。
**链路**:业务 SRE 登录 → 进入业务交付 → 选择业务线 → 展示子系统入口 → SSO 跳转至目标系统 → 记录审计日志
</div>
---
# 用户故事 — 业务交付 · 交互图
<div class="mt-4" style="transform: scale(0.7); transform-origin: top left; height: 80vh;">
```mermaid
sequenceDiagram
actor SRE as 业务 SRE
participant XINFRA as XINFRA
participant Sub as 子系统<br/>Wayne/CloudDM/Apollo/Superset
SRE->>XINFRA: 进入业务交付,选择业务线
XINFRA-->>SRE: 展示子系统入口卡片
SRE->>XINFRA: 点击目标子系统卡片
XINFRA->>Sub: SSO 跳转 + 上下文传递
Sub-->>SRE: 免登录进入子系统
XINFRA->>XINFRA: 记录跳转审计日志
```
</div>
---
# 用户故事 — 基础服务交付
<div class="mt-8 space-y-6 text-lg">
**场景**:运维人员在 XINFRA 中提交 MySQL、Redis 等基础服务交付任务,平台调用 Ansible 控制中心执行标准化部署,并在任务中心查看日志和结果。
**链路**:运维人员登录 → 选择服务卡片 → 填写业务线和规格 → 提交任务 → Ansible 执行部署 → 自动注册至子系统 → 部署完成通知
</div>
---
# 用户故事 — 基础服务交付 · 交互图
<div class="mt-4" style="transform: scale(0.9); transform-origin: top left;">
```mermaid
sequenceDiagram
actor Ops as 运维人员
participant XINFRA as XINFRA 服务目录
participant Ansible as Ansible 控制中心
participant Target as 目标主机/RKE2
participant Reg as 子系统注册
Ops->>XINFRA: 选择 MySQL/Redis/Nginx 服务卡片
XINFRA-->>Ops: 展示标准化模板,填写业务线、规格
Ops->>XINFRA: 确认提交
XINFRA->>Ansible: 提交 playbook 任务
Ansible->>Target: 执行标准化部署
Ansible-->>XINFRA: WebSocket 实时日志推送
XINFRA-->>Ops: 任务中心查看执行进度
Target-->>Reg: 部署完成,自动注册至 CloudDM / CacheCloud
XINFRA-->>Ops: 部署完成通知
```
</div>
---
# 用户故事 — 数据库审核
<div class="mt-8 space-y-6 text-lg">
**场景**:开发或运维提交 SQL 工单后,审核人可以在 XINFRA 中完成审批、查看执行记录和审计信息,减少线下沟通和手工操作。
**链路**:开发/运维提交 SQL 工单 → 转发至 CloudDM → 审核人审批 → 执行变更 → Sidecar 代理执行 SQL → 审计记录 → 通知完成
</div>
---
# 用户故事 — 数据库审核 · 交互图
<div class="mt-4" style="transform: scale(0.9); transform-origin: top left;">
```mermaid
sequenceDiagram
actor Dev as 开发/运维
participant XINFRA as XINFRA
participant CloudDM as CloudDM
participant DB as 目标数据库
Dev->>XINFRA: 提交 SQL 工单
XINFRA->>CloudDM: 转发至 CloudDM 审核
actor Reviewer as 审核人
Reviewer->>CloudDM: 审批通过
CloudDM->>DB: 执行 SQL
CloudDM-->>XINFRA: 返回执行结果
XINFRA-->>Dev: 通知完成
```
</div>
---
# 用户故事 — 业务线切换
<div class="mt-8 space-y-6 text-lg">
**场景**:XINFRA 以业务线作为核心隔离维度,不同角色登录后默认看到自己负责的业务线数据,支持一键切换。系统运维可查看全局,业务 SRE 聚焦本业务线,只读用户仅能查看授权范围。
**角色**:系统运维(全局视角)、业务 SRE(本业务线)、跨业务线运维(按需切换)、只读用户(受限查看)
</div>
---
# 用户故事 — 业务线切换 · 交互图
<div class="grid grid-cols-2 gap-6 mt-4 text-sm">
<div>
### 场景一:系统运维查看全局
| 步骤 | 操作 |
|------|------|
| 1 | 系统运维登录 XINFRA |
| 2 | 业务线选择器显示"全部业务线" |
| 3 | 资源大盘展示 Kodo、LAS、灵矽、LTOKEN、MAAS 全量数据 |
| 4 | 可切换到任意业务线查看详细资源 |
### 场景二:业务 SRE 切换业务线
| 步骤 | 操作 |
|------|------|
| 1 | 业务 SRE 登录,默认归属业务线(如 Kodo) |
| 2 | 资源大盘仅展示 Kodo 相关资源 |
| 3 | 点击业务线切换器,切换到 LAS |
| 4 | 资源大盘、子系统入口、监控数据同步切换至 LAS |
</div>
<div>
### 场景三:跨业务线操作
| 步骤 | 操作 |
|------|------|
| 1 | 运维人员需要为灵矽部署 Redis |
| 2 | 切换业务线至"灵矽" |
| 3 | 进入服务目录,选择 Redis 卡片 |
| 4 | 提交部署任务,自动关联灵矽 Namespace |
### 场景四:只读用户查看状态
| 步骤 | 操作 |
|------|------|
| 1 | 只读用户登录,仅能查看授权业务线 |
| 2 | 资源大盘展示授权范围内的只读数据 |
| 3 | 子系统入口灰显,点击提示"无权限" |
| 4 | 可查看监控告警,不可执行操作 |
</div>
</div>
---
section: 关键决策
layout: center
---
# 三、关键决策
<div class="text-gray-400 mt-2">入口聚合 · 业务线隔离 · Ansible 编排 · 对接夜莺</div>
---
# 关键决策 — 入口聚合而非替代
<div class="grid grid-cols-2 gap-6 mt-4">
<div>
### 决策
XINFRA 做**入口聚合**,不替代 Wayne、CloudDM、Apollo、CacheCloud、Grafana、Superset 等专业系统。
### 背景
| 现状 | 问题 |
|------|------|
| 运维需要登录 7+ 个系统 | 入口分散,效率低 |
| 各系统独立认证 | 重复登录,体验差 |
| 操作记录分散在各系统 | 审计困难,无法追溯 |
| 新人不知道该用哪个系统 | 上手门槛高 |
</div>
<div>
### 方案对比
| 方案 | 优点 | 缺点 |
|------|------|------|
| **入口聚合(选定)** | 开发量小,复用现有系统能力 | 依赖子系统稳定性 |
| 全量自研替代 | 完全可控 | 开发周期长,团队人力不足 |
| 仅做文档指引 | 零开发成本 | 无法解决认证和审计问题 |
### 预期收益
- 运维人员**一个入口**完成所有操作
- **SSO 免登录**跳转子系统
- **统一审计**记录所有跨系统操作
- **降低新人上手门槛**
</div>
</div>
---
# 关键决策 — 业务线作为核心隔离维度
<div class="grid grid-cols-2 gap-6 mt-4">
<div>
### 决策
以**业务线**作为资源、权限、监控的核心隔离维度。
### 背景
| 现状 | 问题 |
|------|------|
| 资源按机房/集群管理 | 无法按业务视角查看成本 |
| 权限按系统独立管理 | 跨系统权限不一致 |
| 监控按技术栈分散 | 排障时需要多系统切换 |
| 业务线有 5+ 条 | Kodo、LAS、灵矽、LTOKEN、MAAS |
</div>
<div>
### 隔离模型
```mermaid
graph TB
BL["业务线<br/>Kodo / LAS / 灵矽 / ..."]
BL --> NS["K8s Namespace<br/>ResourceQuota"]
BL --> Perm["权限隔离<br/>RBAC 业务线维度"]
BL --> Monitor["监控隔离<br/>告警按业务线展示"]
BL --> Resource["资源台账<br/>按业务线统计成本"]
style BL fill:#e0f2fe,stroke:#0284c7
```
### 预期收益
- 资源成本**按业务线可视**
- 权限**一次配置,全系统生效**
- 监控告警**按业务线隔离展示**
- 运维人员**聚焦自己负责的业务线**
</div>
</div>
---
# 关键决策 — 基础服务交付自动化
<div class="grid grid-cols-2 gap-6 mt-4">
<div>
### 决策
引入**自动化部署引擎**(Ansible Playbook),打通交付全流程。
### 痛点背景
| 现状 | 问题 |
|------|------|
| 业务上线依赖员工手动操作 | 交付效率低,周期长 |
| 工具链复杂,命令行门槛高 | 新人上手慢,培训成本高 |
| 操作方式因人而异 | 缺少标准化,易出错 |
| 部署过程不可见 | 排障困难 |
</div>
<div>
### 方案对比
| 方案 | 优点 | 缺点 |
|------|------|------|
| **Ansible 编排(选定)** | 运维团队熟悉,生态成熟 | 需要自建任务队列 |
| 自研部署引擎 | 完全可控 | 开发周期长,重复造轮子 |
### 执行模型
```mermaid
graph LR
XINFRA["XINFRA<br/>任务提交"] --> Queue["任务队列"]
Queue --> Ansible["Ansible 控制中心"]
Ansible -->|SSH| Host1["机房 A 主机"]
Ansible -->|SSH| Host2["机房 B 主机"]
Ansible -.->|WebSocket| XINFRA
style XINFRA fill:#e0f2fe,stroke:#0284c7
```
</div>
</div>
---
# 关键决策 — 引入统一监控引擎整合分散数据
<div class="grid grid-cols-2 gap-6 mt-4">
<div>
### 决策
引入**可对接多种业务线、多种场景、多种数据源的监控引擎**,整合分散的监控数据,而非自建。
### 背景
| 现状 | 问题 |
|------|------|
| 监控数据散落在不同服务和渠道 | 缺少统一的数据整合 |
| 告警分散在基础资源和业务系统 | 排障时信息割裂 |
| 夜莺已有告警聚合能力 | 重复建设浪费资源 |
| 业务线需要隔离查看告警 | 缺少统一看板视图 |
</div>
<div>
### 方案对比
| 方案 | 优点 | 缺点 |
|------|------|------|
| **对接夜莺(选定)** | 支持多数据源多场景,生态成熟 | 依赖夜莺稳定性 |
| 仅做文档指引 | 零成本 | 无法统一视图 |
### 数据流
```mermaid
graph LR
VM["VictoriaMetrics<br/>指标存储"] --> Nightingale["夜莺<br/>告警聚合"]
Zabbix["Zabbix<br/>硬件监控"] --> Nightingale
Nightingale --> XINFRA["XINFRA<br/>按业务线展示"]
style XINFRA fill:#e0f2fe,stroke:#0284c7
```
</div>
</div>
---
# 关键决策 — 资源纳管
<div class="grid grid-cols-2 gap-6 mt-4">
<div>
### 痛点
资源无法统一规划、查看和控制成本——数据散落在多个渠道,缺少全局视图。
| 渠道 | 数据范围 |
|------|----------|
| CMDB | 主机资产信息 |
| K8s 集群 | 节点与工作负载 |
| 容器运行时 | 容器状态信息 |
| 服务注册中心 | 服务状态信息 |
</div>
<div>
### 决策
建设**资源纳管平台**,统一汇聚以上多渠道数据,提供:
- 资源台账与统一视图
- 业务线关联与成本归属
- 容量统计与配额管理
### 数据流
```mermaid
graph TB
CMDB["CMDB<br/>主机资产"]
K8s["K8s 集群<br/>节点 · 工作负载"]
Container["容器运行时<br/>容器状态"]
Service["服务注册中心<br/>服务状态"]
XINFRA["XINFRA<br/>资源纳管平台"]
CMDB & K8s & Container & Service --> XINFRA
XINFRA --> Dashboard["资源大盘"]
XINFRA --> Cost["成本分析"]
XINFRA --> Quota["配额管理"]
style XINFRA fill:#e0f2fe,stroke:#0284c7
style Dashboard fill:#f0fdf4,stroke:#16a34a
style Cost fill:#fef9c3,stroke:#ca8a04
style Quota fill:#fce7f3,stroke:#db2777
```
</div>
</div>
---
# 关键功能 — 服务交付
<div class="grid grid-cols-2 gap-6 mt-4">
<div>
### 基础服务交付
通过 Ansible 编排实现基础服务标准化部署,支持任务提交、执行状态、日志和历史记录。
| 服务 | 交付方式 | 自动注册 |
|------|---------|---------|
| MySQL | Ansible Playbook | 部署完成自动注册至 CloudDM |
| PostgreSQL | Ansible Playbook | 部署完成自动注册至 CloudDM |
| Redis | Ansible Playbook | 部署完成自动注册至 CacheCloud |
| Nginx | Ansible Playbook | — |
### 业务交付入口
在"业务交付"菜单下提供统一入口,跳转到专业系统完成实际操作。
| 目标系统 | 用途 | 上下文传递 |
|---------|------|-----------|
| Wayne | 容器应用部署 | 业务线 + Namespace |
| CloudDM | 数据库管理与 SQL 审核 | 业务线 + 数据库实例 |
| Apollo | 配置管理 | 业务线 + 应用 |
| Superset | 日志数据分析 | 业务线 + 数据源 |
</div>
<div>
### 交付流程
```mermaid
graph TB
User["运维人员"] --> Catalog["服务目录<br/>选择服务卡片"]
Catalog --> Template["标准化模板<br/>填写业务线、规格"]
Template --> Submit["提交任务"]
Submit --> Ansible["Ansible 控制中心"]
Ansible --> Deploy["执行部署"]
Deploy --> Register["自动注册<br/>CloudDM/CacheCloud"]
Deploy --> Log["任务中心<br/>实时日志"]
style Catalog fill:#e0f2fe,stroke:#0284c7
style Ansible fill:#ecfdf5,stroke:#059669
```
### 任务中心
- 任务列表:所有 Ansible 任务执行记录
- 执行详情:实时日志、执行结果、耗时
- 历史回溯:支持任务重跑和结果对比
</div>
</div>
---
# 关键功能 — 子系统功能
<div class="grid grid-cols-2 gap-6 mt-4 text-sm">
<div>
### 子系统导航
XINFRA 提供统一的子系统入口卡片列表,支持 SSO 免登录跳转。
| 子系统 | 功能定位 | XINFRA 集成方式 |
|--------|---------|----------------|
| Wayne | 业务容器发布、命名空间与配额管理 | SSO 跳转 + APIKey |
| CloudDM | 数据库 SQL 上线统一审核 | SSO 跳转 + 自动注册 |
| CacheCloud | Redis 实例全生命周期管理 | SSO 跳转 + 自动注册 |
| Apollo | 统一配置管理,按机房隔离 | SSO 跳转 |
| qpass | 七牛统一运维平台 | SSO 跳转 |
| Grafana | K8s / 容器 / 业务指标仪表盘 | SSO 跳转 |
| Superset | 日志数据探索与可视化分析 | SSO 跳转 |
</div>
<div>
### 子系统赋权
用户首次跳转子系统时,XINFRA 自动完成角色授权。
| 子系统 | 授权模型 | 说明 |
|--------|---------|------|
| Wayne | Namespace 映射 | 业务线 → Wayne Namespace |
| CloudDM | LDAP 组映射 | LDAP 用户组 → CloudDM 角色 |
| Apollo | 环境权限 | 业务线 → 配置环境访问 |
| Grafana | 仪表盘权限 | 业务线 → 监控面板 |
| Superset | 数据源权限 | 业务线 → 日志数据访问 |
### 审计记录
所有子系统跳转和操作均记录审计日志:
- 跳转时间、用户、目标系统
- 操作类型、操作结果
- 支持按业务线、用户、时间筛选
</div>
</div>
---
section: 关键功能
layout: center
---
# 四、关键功能
<div class="text-gray-400 mt-2">资源纳管 · 服务交付 · 子系统功能</div>
---
section: 架构图
layout: center
---
# 五、架构图
<div class="text-gray-400 mt-2">平台分层 · 部署 · 监控 · 安全</div>
---
# 平台分层架构 — 总体分层
<div class="mt-2">
```mermaid
graph LR
User["用户层<br/>LDAP SSO 统一认证"] --> Main["主系统层<br/>统一门户 + 功能模块"]
Main --> Sub["子系统层<br/>独立部署,各自授权"]
Main --> Infra["基础设施层<br/>计算 · 网络 · 存储 · 自动化"]
Sub --> Infra
style User fill:#f3e8fd,stroke:#9333ea
style Main fill:#e0f2fe,stroke:#0284c7
style Sub fill:#e8f0fe,stroke:#4285f4
style Infra fill:#ecfdf5,stroke:#059669
```
</div>
<div class="mt-4 text-sm text-gray-400">
> 四层模型:用户层 → 主系统层 → 子系统层 → 基础设施层,主系统是统一入口,子系统各司其职。
</div>
---
# 平台分层架构 — 主系统功能
<div class="mt-2">
```mermaid
graph TB
Portal["统一门户<br/>LDAP SSO 跳转入口"]
subgraph 全局视图
DashBoard["资源大盘<br/>集群拓扑 · 节点方格图"]
MonitorView["资源状态看板<br/>物理机/虚机/服务三层告警"]
end
subgraph 运维能力
TaskCenter["任务中心<br/>Ansible/Wayne 实时日志"]
OpsTerminal["运维终端<br/>Ansible / SSH<br/>仅管理员"]
end
subgraph 治理能力
AuditDash["审计面板<br/>登录记录 · 运维操作日志"]
CMDB["资源台账<br/>CMDB 多云同步"]
SvcDir["服务目录<br/>Consul 只读聚合"]
end
Portal --> DashBoard & MonitorView & TaskCenter & AuditDash & CMDB & SvcDir
```
</div>
<div class="mt-2 text-sm text-gray-400">
> 主系统不替代子系统,只自建子系统无法覆盖的能力:全局视图、运维兜底、审计、资源台账。
</div>
---
# 平台分层架构 — 子系统集成
<div class="mt-2" style="transform: scale(0.5); transform-origin: top left; height: 50vh;">
```mermaid
graph LR
Portal["XINFRA 主系统"]
subgraph 子系统
Wayne["Wayne<br/>容器发布与配额管理"]
CloudDM["CloudDM<br/>SQL 审核"]
CacheCloud["CacheCloud<br/>Redis 全生命周期"]
Apollo["Apollo<br/>配置中心"]
QPass["qpass<br/>七牛运维平台"]
Grafana["Grafana<br/>指标可视化"]
Superset["Superset<br/>日志可视化"]
end
Portal -.->|SSO 跳转| Wayne & CloudDM & CacheCloud & Apollo & QPass & Grafana & Superset
Wayne -->|Client-Go| RKE2["RKE2 集群"]
CloudDM -->|SQL 审核| MySQL[("MySQL")]
CacheCloud -->|Agent| Redis[("Redis")]
Apollo -->|ConfigService| RKE2
Grafana -->|PromQL| VM["VictoriaMetrics"]
Superset -->|SQL| CH["ClickHouse"]
```
</div>
---
# 平台分层架构 — 基础设施层
<div class="mt-2" style="transform: scale(0.5); transform-origin: top left; height: 50vh;">
```mermaid
graph TB
subgraph 计算
RKE2["RKE2 集群 × 7 机房<br/>CIS 安全加固"]
end
subgraph 网络
Calico["Calico BGP<br/>每集群独立 AS 号<br/>跨机房扁平互通"]
end
subgraph 存储
Ceph["Ceph RBD<br/>MySQL/Redis 有状态服务 PV"]
end
subgraph 自动化
Ansible["Ansible Playbook<br/>节点初始化 · 服务部署<br/>WebSocket 实时日志"]
end
RKE2 --> Calico
RKE2 --> Ceph
Ansible -->|SSH| RKE2
```
</div>
---
# 部署架构
<div class="mt-2" style="transform: scale(0.45); transform-origin: top left; height: 50vh;">
```mermaid
graph TB
subgraph "RKE2 集群(任一机房)"
subgraph "xinfra 命名空间"
FE["Nginx<br/>前端静态文件 + 反向代理"]
BE["Go API Server<br/>Deployment × 2"]
WS["WebSocket Gateway<br/>任务日志实时推送"]
end
subgraph "监控命名空间"
VM[("VictoriaMetrics")]
Grafana["Grafana"]
NE["Nightingale"]
end
subgraph "子系统命名空间"
Wayne["Wayne"]
CloudDM["CloudDM"]
CacheCloud["CacheCloud"]
Apollo["Apollo"]
Superset["Superset"]
end
end
LB["SLB / NodePort"] --> FE
FE -->|/api/*| BE
FE -->|WebSocket| WS
BE --> MySQL[("MySQL 8.0 主从")]
BE --> Redis[("Redis 会话缓存")]
BE -->|SSH/Ansible| Nodes["业务节点池"]
WS --> BE
style FE fill:#e0f2fe,stroke:#0284c7
style BE fill:#e0f2fe,stroke:#0284c7
style WS fill:#e0f2fe,stroke:#0284c7
```
</div>
<!--
Nginx 托管前端静态文件并反向代理后端 API,Go API Server 无状态水平扩展,WebSocket Gateway 独立处理实时日志推送
-->
---
# 监控告警数据流
<div class="mt-2" style="transform: scale(0.8); transform-origin: top left; height: 50vh;">
```mermaid
graph LR
subgraph 采集源
RKE2["RKE2 集群"]
Zabbix["Zabbix<br/>硬件监控"]
end
subgraph 指标存储
VM[("VictoriaMetrics<br/>容器/业务指标")]
end
subgraph 可视化
Grafana["Grafana 仪表盘"]
end
subgraph 告警链路
Nightingale["夜莺<br/>去重 · 收敛 · 分级"]
end
RKE2 -.->|Metrics| VM
VM --> Grafana
VM --> Nightingale
Zabbix -.->|Webhook| Nightingale
Zabbix -->|Zabbix API| Main["XINFRA 主系统<br/>资源状态看板"]
```
</div>
<div class="mt-58 text-sm text-gray-400">
> Zabbix 硬件监控分两条链路:告警事件通过 Webhook 推送至夜莺统一聚合;可观测数据(IPMI/温度/电源/风扇等)由主系统直接调用 Zabbix API 采集展示。
</div>
---
# 基础服务交付流程
<div class="mt-2">
```mermaid
sequenceDiagram
actor User as 业务人员
participant Portal as XINFRA 服务目录
participant Ansible as Ansible Playbook
participant Infra as RKE2 / 主机
participant Sub as 子系统注册
User->>Portal: 选择服务卡片,填写业务线、规格
Portal->>Portal: 实时预览 playbook 参数(YAML)
User->>Portal: 确认部署
Portal->>Ansible: 提交 playbook 任务
Ansible->>Infra: 内核初始化 · containerd · 加入集群
Ansible-->>Portal: 任务状态 → WebSocket 实时日志
Portal->>Sub: 自动注册(CloudDM / CacheCloud)
Portal-->>User: 部署完成,跳转任务中心
```
</div>
---
# 多租户隔离模型
<div class="mt-2" style="transform: scale(1); transform-origin: top left; height: 50vh;">
```mermaid
graph LR
LDAP["企业 LDAP"] -->|部门 DN| BL["业务线租户<br/>Kodo / LAS / 灵矽 / ..."]
BL --> NS["Kubernetes Namespace<br/>+ ResourceQuota + LimitRange"]
BL --> NP["物理节点池<br/>node-label + taint"]
NS -.->|Pod 只能调度到<br/>本业务线节点| NP
style LDAP fill:#f3e8fd,stroke:#9333ea
style BL fill:#e0f2fe,stroke:#0284c7
style NS fill:#ecfdf5,stroke:#059669
style NP fill:#fef3c7,stroke:#d97706
```
</div>
<div class="mt-30 text-sm text-gray-400">
> **双重隔离**:节点层通过 `business-line=xxx` 标签 + Taint 确保 Pod 调度隔离;命名空间层通过 ResourceQuota / LimitRange 限制资源用量上限。
</div>
---
# 安全认证流程
<div class="mt-2" style="transform: scale(0.65); transform-origin: top left; height: 50vh;">
```mermaid
sequenceDiagram
actor User as 用户
participant Main as XINFRA 主系统
participant LDAP as 企业 LDAP
participant Sub as 子系统
User->>Main: 访问主系统
Main->>LDAP: SAML 认证请求
LDAP-->>Main: SAML Response(用户身份 + LDAP 组信息)
Main->>Main: 签发 JWT Token(含角色 + 业务线)
Main-->>User: 登录成功,返回 Token
User->>Main: 点击子系统卡片
Main->>Sub: OAuth 2.0 Authorization Code
Sub->>Main: 验证 Token,创建子系统会话
Main-->>User: 跳转至子系统(免登录)
```
</div>
<div class="mt-60 text-sm text-gray-400">
> 外部 LDAP 通过 SAML 集成统一认证;子系统 SSO 通过 OAuth 2.0 对接,实现单点登录免跳转。
</div>
---
section: 对接子系统
layout: center
---
# 六、对接子系统
<div class="text-gray-400 mt-2">Wayne · CloudDM · CacheCloud · Apollo · qpass · Grafana · Superset</div>
---
# 子系统 — Wayne(多集群容器管理)
<div class="grid grid-cols-2 gap-6 mt-4">
<div>
### 定位
多集群 Kubernetes 容器管理平台,负责**业务容器发布**和**命名空间与配额管理**,复用 Wayne 原生多租户能力。
### 核心能力
- **业务容器发布** — Deployment、StatefulSet 等工作负载的部署与回滚
- **命名空间管理** — 按业务线创建 Namespace,隔离资源边界
- **配额管理** — 为每个 Namespace 设置 ResourceQuota,控制 CPU / 内存上限
- **多租户隔离** — 复用 Wayne 原生租户模型,业务线 ↔ Namespace 自动映射
- **CI/CD 集成** — 对外提供 APIKey,GitLab CI 自动触发部署
</div>
<div>
### 关键对接
```mermaid
graph LR
BL["业务线"] -->|租户映射| Wayne["Wayne"]
Wayne -->|Namespace + Quota| RKE2["RKE2 集群"]
CI["GitLab CI"] -->|APIKey| Wayne
Main["XINFRA 主系统"] -.->|SSO| Wayne
```
### 说明
- 独立 WebUI + API 服务
- XINFRA 负责"哪个业务线用哪些资源",Wayne 负责"怎么发布和管理容器"
- APIKey 遵循最小权限原则,主系统通过 SSO 跳转
</div>
</div>
---
# 子系统 — CloudDM(数据库 SQL 审核)
<div class="grid grid-cols-2 gap-6 mt-4">
<div>
### 定位
数据库 SQL 上线**统一审核平台**,所有数据库变更必须经过 CloudDM 审批才能执行。
### 核心能力
- **SQL 审核** — 上线前自动检查 SQL 语句的合规性、语法风险和性能影响
- **LDAP 角色映射** — 支持 LDAP 用户组到 CloudDM 角色的自动映射,无需手动配权限
- **变更执行** — 审核通过后通过 Sidecar SQL 代理安全执行变更
- **操作审计** — 所有 SQL 操作全程记录,可追溯谁在什么时候改了什么
</div>
<div>
### 关键对接
```mermaid
graph LR
LDAP["企业 LDAP"] -->|用户组映射| CloudDM["CloudDM"]
User["DBA / 开发"] --> CloudDM
CloudDM -->|Sidecar 代理| MySQL[("MySQL")]
Deploy["服务部署完成"] -.->|自动注册| CloudDM
Main["XINFRA 主系统"] -.->|SSO| CloudDM
```
### 说明
- 基础服务交付流程中,MySQL 部署完成后自动注册至 CloudDM
- LDAP 用户组映射:运维组 → DBA 角色,开发组 → 只读角色,入职即有权限
</div>
</div>
---
# 子系统 — CacheCloud(Redis 全生命周期管理)
<div class="grid grid-cols-2 gap-6 mt-4">
<div>
### 定位
Redis 实例**全生命周期管理平台**,从创建到下线一站式管理,登录与监控运维统一入口。
### 核心能力
- **全生命周期** — 实例创建、扩缩容、版本升级、下线销毁全覆盖
- **统一入口** — 登录、监控、运维操作统一在 CacheCloud 内完成
- **Agent 模式** — 通过 Agent 远程管理各机房 Redis 实例
- **诊断工具** — 大 Key / 热 Key 检测,慢查询分析,内存碎片率监控
- **监控集成** — 实例指标上报至 VictoriaMetrics,Grafana 仪表盘展示
</div>
<div>
### 关键对接
```mermaid
graph LR
User["运维人员"] --> CacheCloud["CacheCloud"]
CacheCloud -->|Agent| Redis[("Redis")]
CacheCloud -->|指标上报| VM["VictoriaMetrics"]
Deploy["服务部署完成"] -.->|自动注册| CacheCloud
Main["XINFRA 主系统"] -.->|SSO| CacheCloud
```
### 说明
- 基础服务交付流程中,Redis 部署完成后自动注册至 CacheCloud
- 运维人员无需 SSH 到机器上操作,所有运维操作在 Web 界面完成
</div>
</div>
---
# 子系统 — Apollo(统一配置中心)
<div class="grid grid-cols-2 gap-6 mt-4">
<div>
### 定位
携程开源的分布式配置中心,**统一管理各业务线应用配置**,按机房 Cluster 隔离部署。
### 核心能力
- **按机房隔离** — 每个机房独立 Cluster,配置就近读取,降低跨机房延迟
- **灰度发布** — 配置变更可先推送给部分实例验证,确认无误后再全量发布
- **版本回滚** — 每次配置变更自动保存历史版本,出问题可一键回滚
- **变更审计** — 谁改了什么配置、什么时候改的、改之前是什么值,全程可追溯
</div>
<div>
### 关键对接
```mermaid
graph LR
App["业务应用"] -->|ConfigService| Apollo["Apollo"]
Apollo -->|按机房 Cluster 隔离| IDC1["机房 A"]
Apollo -->|按机房 Cluster 隔离| IDC2["机房 B"]
Main["XINFRA 主系统"] -.->|SSO| Apollo
```
### 说明
- 本地缓存降级:Apollo 服务不可用时,应用使用本地缓存的配置继续运行
- 灰度发布流程:先推 1 台 → 观察指标 → 确认无异常 → 全量推送
</div>
</div>
---
# 子系统 — Grafana(指标可视化平台)
<div class="grid grid-cols-2 gap-6 mt-4">
<div>
### 定位
**K8s / 容器 / 业务指标统一仪表盘**,对接 VictoriaMetrics 数据源,提供多维度监控可视化。
### 核心能力
- **统一仪表盘** — K8s 集群、容器、业务指标集中展示,一个页面看全局
- **VictoriaMetrics 对接** — 作为主数据源,PromQL 直接查询指标数据
- **多维度监控** — 节点资源、Pod 状态、应用 QPS / 延迟 / 错误率
- **告警可视化** — 告警规则配置与历史趋势展示
</div>
<div>
### 关键对接
```mermaid
graph LR
VM["VictoriaMetrics<br/>指标存储"] -->|PromQL| Grafana["Grafana"]
K8s["RKE2 集群"] -->|Metrics| VM
Main["XINFRA 主系统"] -.->|SSO| Grafana
```
### 说明
- 直接复用现有 Grafana 仪表盘,无需主系统重建监控视图
- 主系统资源状态看板侧重告警聚合,Grafana 侧重指标深度可视化
</div>
</div>
---
# 子系统 — Superset(日志数据可视化)
<div class="grid grid-cols-2 gap-6 mt-4">
<div>
### 定位
**日志数据探索与可视化分析平台**,支持多数据源接入和丰富的图表展示。
### 核心能力
- **日志数据探索** — 交互式查询日志数据,支持筛选、聚合、下钻
- **多数据源接入** — 支持 ClickHouse、Elasticsearch、MySQL 等多种数据源
- **丰富图表** — 折线图、柱状图、饼图、热力图、表格等 40+ 图表类型
- **仪表盘** — 拖拽式组合图表,构建业务专属的日志分析大盘
</div>
<div>
### 关键对接
```mermaid
graph LR
Log["日志数据<br/>ClickHouse / ES"] --> Superset["Superset"]
User["运维 / 开发"] --> Superset
Main["XINFRA 主系统"] -.->|SSO| Superset
```
### 说明
- 与 Grafana 互补:Grafana 侧重实时指标监控,Superset 侧重日志数据的探索分析
- 支持 SQL 自定义查询,适合复杂日志场景的灵活分析
</div>
</div>
---
# 子系统 — qpass(七牛统一运维平台)
<div class="grid grid-cols-2 gap-6 mt-4">
<div>
### 定位
七牛云内部的**统一运维平台**,提供基础设施运维、密码管理等基础能力。
### 核心能力
- **密码管理** — 集中存储和管理各类账号密码、密钥、证书
- **权限控制** — 基于 RBAC 的访问权限,按业务线隔离
- **审计追溯** — 密码访问、修改、共享全程记录
- **自动轮换** — 支持定期密码轮换策略,降低泄露风险
</div>
<div>
### 关键对接
```mermaid
graph LR
QPass["qpass<br/>七牛运维平台"] -->|密码分发| RKE2["RKE2 集群"]
QPass -->|密码注入| DB["MySQL / Redis"]
Main["XINFRA 主系统"] -.->|SSO| QPass
```
### 说明
- 七牛内部系统,XINFRA 通过 SSO 跳转对接
- 基础设施部署完成后,密码由 qpass 统一管理并注入
</div>
</div>