KubeVirt 的治理缺口 —— 以及 Shepherd 的解决方案
KubeVirt 解决了在 Kubernetes 上运行虚拟机的问题,但治理层面的需求仍未被覆盖:谁可以申请 VM、谁负责审批、配额如何执行、操作记录如何追溯。
KubeVirt Shepherd 是一个面向 KubeVirt 的开源治理平台。审批流程、RBAC、审计日志从项目初期即作为基础架构的核心组成部分。项目源自金融服务团队在 Kubernetes 环境中的内部使用实践,以 Apache 2.0 协议开源。
- 官网:kv-shepherd.io
- 在线演示:demo.kv-shepherd.io
- GitHub:kv-shepherd/shepherd
- Discord:加入社区
问题背景
在大多数 KubeVirt 环境中,创建 VM 的典型流程如下:
开发者需要一台 VM → kubectl apply → 完成
这在开发集群中运作良好。但进入生产环境后,一系列治理问题随之出现:
- 这台 VM 经过谁的审批? KubeVirt 没有内置审批流程。
- 归属哪个团队? 缺少资源与团队之间的映射关系。
- 一台 VM 闲置三个月,由谁负责回收? 缺乏生命周期治理机制。
- 发生安全事件时,操作记录在哪里查阅? 缺少平台级审计追踪。
- 管理多个集群时,如何统一执行治理策略? 缺少集中的治理控制面。
现有方案各有取舍:
| 方案 | 取舍 |
|---|---|
| OpenShift Virtualization | 功能完善,但与 OpenShift 生态强绑定 |
| 原生 kubectl + K8s RBAC | 粒度过粗 —— 缺少审批流程和自助服务界面 |
| 自研管理平台 | 持续的开发与维护投入 |
Shepherd 的核心能力
| 能力 | 说明 |
|---|---|
| 审批流程 | VM 的创建、修改、启停、删除均通过 申请 → 审批 → 交付 的结构化流程执行 |
| 双层 RBAC | 平台级角色 + System → Service → VM 逐层继承,支持按环境维度隔离权限 |
| 审计追踪 | 每次操作均记录执行人、时间戳及变更内容 |
| 多集群管理 | 通过统一控制面管理多个 Kubernetes / KubeVirt 集群 |
| 控制台访问 | 浏览器内 VNC 和串行控制台,入口集成审批校验 |
| 中英文界面 | 开箱可用,可扩展至更多语言 |
| 认证插件 SDK | 支持对接 LDAP、OIDC 及自定义身份源 |
架构决策
Web UI (React 19 · Next.js 16)
↓ REST / WebSocket
Go 后端 (Gin · Ent ORM · River Queue)
↓
PostgreSQL 18(单一数据存储)
↓
Kubernetes / KubeVirt 集群 (client-go · 多集群)
以下是对项目架构影响最大的几项技术决策:
PostgreSQL 单存储
Shepherd 选择不引入 Redis 和外部消息队列。业务状态、审计数据、加密凭据、后台任务(通过 River)全部由 PostgreSQL 承载。
这一设计带来的关键保证是事务一致性:异步任务与业务数据在同一个数据库事务中提交,要么同时成功,要么同时回滚。从而避免了引入独立消息队列后常见的部分失败问题(例如配额已扣减但 VM 未能创建)。
运维层面同样受益 —— 只需维护一个数据库实例。相比 Redis + RabbitMQ + PostgreSQL 的典型组合,部署复杂度显著降低。
契约优先 API
OpenAPI 规范作为前后端唯一的类型来源。Go 后端与 TypeScript 前端的类型定义均从规范自动生成。CI 门禁强制校验:生成代码与规范不一致时,PR 无法合并。
架构决策记录(ADR)
项目维护了 53 份 ADR,涵盖 ORM 选型、异步模型、事务策略、并发模式等关键决策。ADR 一经通过即冻结,后续变更需创建新的 ADR 来替代。CI 门禁持续检查代码与当前生效 ADR 的一致性。
这一实践的意义在于:架构决策往往随着代码库增长而逐步被侵蚀。将决策显式记录并通过自动化手段维护一致性,有助于在项目演进过程中保持架构完整性。
与 OpenShift Virtualization 的对比
两者定位在不同层面:
| 维度 | OpenShift Virtualization | Shepherd |
|---|---|---|
| 定位 | 完整的企业级虚拟化平台 | KubeVirt VM 的治理层 |
| 多集群 | 需要 RHACM | 内置支持 |
| 审批流程 | 支持 | 核心架构 |
| 自助服务 | 运维驱动 | 申请 → 审批 → 交付 |
| 平台依赖 | OpenShift 生态 | 任意 Kubernetes 发行版 |
| 许可证 | 商业 | Apache 2.0 |
已在使用 OpenShift 且对其 VM 治理能力满意的团队,现有方案通常已能满足需求。使用原生 KubeVirt 且希望获得无平台绑定的治理层的团队,Shepherd 是一个可选方案。
快速体验
在线演示(无需安装)
在浏览器中打开 demo.kv-shepherd.io,实例已预置示例数据。可以完整体验核心流程:登录 → 浏览 VM → 提交申请 → 审批 → 查看审计日志。
自托管部署(Docker Compose)
通过以下命令一键部署到 VPS 或本地环境:
mkdir -p shepherd-deploy && cd shepherd-deploy
curl -fsSL https://raw.githubusercontent.com/kv-shepherd/shepherd/main/deploy/prod/deploy-prod.sh | \
bash -s -- --release-images --with-seed
同时提供 Helm Chart 用于 Kubernetes 原生部署:
helm repo add shepherd https://kv-shepherd.github.io/helm-charts
helm repo update
helm upgrade --install shepherd shepherd/shepherd \
--namespace shepherd --create-namespace
外部 PostgreSQL 配置、域名/TLS 设置及安全检查清单详见 docs/DEPLOYMENT.md。
项目现状
Shepherd 目前处于 Alpha 阶段。核心治理路径 —— 审批流程、RBAC、审计追踪、VM 生命周期管理 —— 已通过内部生产环境验证。标注 Alpha 是因为仍在收集更广泛的外部使用反馈。
后续计划:
- 完成全部主要路径的端到端验证
- 完善部署文档和版本升级指引
- V1 阶段保持 PostgreSQL 单存储运行时基线
后续版本的特性通过 RFC 跟踪,已规划的方向包括 VM 快照、克隆流程、外部审批系统对接、事件归档等。详见 ROADMAP.md。
参与方式
Shepherd 目前由个人维护。欢迎各种形式的参与 —— 代码贡献、Bug 反馈、文档改进,或分享使用体验:
- 体验在线演示并提供反馈
- 通过 GitHub Issues 报告问题或提交功能建议
- 加入 Discord 社区讨论
- 为项目 Star 以提升可见度
项目采用 Apache 2.0 协议,贡献遵循 DCO 签名模式。
链接:
- 官网:www.kv-shepherd.io
- 在线演示:demo.kv-shepherd.io
- GitHub:github.com/kv-shepherd…
- Discord:discord.gg/9P2wtpPMUe