KubeVirt 的治理缺口 —— 以及 Shepherd 的解决方案

12 阅读5分钟

KubeVirt 的治理缺口 —— 以及 Shepherd 的解决方案

KubeVirt 解决了在 Kubernetes 上运行虚拟机的问题,但治理层面的需求仍未被覆盖:谁可以申请 VM、谁负责审批、配额如何执行、操作记录如何追溯。

KubeVirt Shepherd 是一个面向 KubeVirt 的开源治理平台。审批流程、RBAC、审计日志从项目初期即作为基础架构的核心组成部分。项目源自金融服务团队在 Kubernetes 环境中的内部使用实践,以 Apache 2.0 协议开源。


问题背景

在大多数 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 VirtualizationShepherd
定位完整的企业级虚拟化平台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 签名模式。


链接: