用 vCluster 在 Kubernetes 集群中构建虚拟集群
引言
在企业集群规模增长后,平台团队常常需要同时满足多团队隔离、快速环境交付和成本控制。vCluster 提供了一种折中方案:在同一个宿主 Kubernetes 集群中创建多个虚拟集群,每个虚拟集群有独立的 API Server 和控制平面,但共享底层节点资源。这样比“每个团队一个完整集群”更省成本,也比“只用 Namespace”更强隔离。GitHub 仓库 与 官网 给出了完整定位和文档入口。
本文以通用 Kubernetes 集群为背景,介绍 vCluster 的核心概念、部署要点与实际使用场景。
vCluster 是什么
vCluster 是运行在宿主集群命名空间内的虚拟 Kubernetes 集群。核心特征如下:
- 控制平面独立:每个 vCluster 有自己的 API Server 与控制组件,更接近“真实集群”的使用体验。GitHub 仓库
- 共享底层资源:节点与资源来自宿主集群,成本更低,创建更快。GitHub 仓库
- 适合多租户:相比单纯 Namespace,隔离性更好,适合平台工程和团队自治场景。官网
Kubernetes 环境的部署要点
在通用 Kubernetes 环境中部署 vCluster,通常关注以下几点:
- 访问与权限:确保在目标命名空间内有创建控制平面组件的权限。
- 存储后端:根据可靠性与运维要求选择嵌入式存储或外部数据库。
- 网络与同步:根据场景选择需要同步的资源类型,避免和宿主集群冲突。
参考文档:vCluster 文档入口
安装 vCluster
安装流程通常包含“准备条件”和“安装 CLI”两步:
1. 准备条件
- Kubernetes 版本:宿主集群建议满足官方版本要求(示例为 v1.28+)。官方文档
- kubectl:已安装并配置好上下文,且具备目标命名空间的操作权限。官方文档
- Helm(可选):若使用 Helm 管理 vCluster,需要 Helm v3.10.0+。官方文档
2. 安装 vCluster CLI
1 | # Install vCluster CLI via Homebrew |
如果需要其他平台的安装方式,可参考官方安装页:vCluster 安装
3. Helm 方式(可选)
1 | # Install or upgrade with Helm |
参考文档:官方安装说明
快速部署步骤(示例)
注意:以下步骤为通用流程示例,具体参数和版本请以官方文档为准。
1. 准备命名空间
1 | # Create a namespace for the virtual cluster |
2. 准备 vCluster 配置(示例)
1 | # vcluster.yaml |
3. 创建 vCluster
1 | # Create a virtual cluster with a values file |
4. 连接并验证
1 | # Connect to the virtual cluster |
更多参数与部署方式见官方文档:vCluster 文档入口
vCluster 与宿主集群的 Service 互访
vCluster 内部 Pod 运行在宿主集群网络中,Service 对象可由 vCluster 的同步机制映射到宿主集群,从而实现双向访问。官方提供了 networking.replicateServices 配置用于控制同步方向与目标。文档
1. 从宿主集群访问 vCluster 内服务
通过 toHost 把虚拟集群里的 Service 映射到宿主集群:
1 | # vcluster.yaml |
上面示例会将 vCluster 内 app-ns/api 同步成宿主集群中的 vcluster-api Service,宿主集群工作负载可以直接访问。
2. 从 vCluster 访问宿主集群服务
通过 fromHost 把宿主集群的 Service 映射到 vCluster:
1 | # vcluster.yaml |
这样 vCluster 内的应用可以使用 platform/obs-gateway 访问宿主集群的共享服务。文档
StorageClass、PVC 与宿主集群的关系
vCluster 支持把宿主集群的 StorageClass 同步到虚拟集群,并将虚拟集群中的 PVC/PV 反向同步到宿主集群,从而复用宿主存储系统。核心关系如下:文档
- StorageClass 同步方向:宿主集群 → vCluster
- PVC/PV 同步方向:vCluster → 宿主集群
- 可控范围:可通过 selector 限制哪些 StorageClass 对虚拟集群可见
StorageClass 同步示例
1 | # vcluster.yaml |
注意:如果不配置
selector,默认会同步宿主集群中的所有StorageClass。
vCluster 内使用 PVC 示例
1 | # pvc.yaml |
当 fast-ssd 来自宿主集群同步时,PVC 会在宿主侧实际创建并绑定对应 PV。
将 vCluster 服务暴露给外部访问
对外暴露可分为两类:控制平面 API 与 应用服务。官方给出多种访问方式与配置示例。文档
1. 暴露 vCluster 控制平面 API
常见方式是通过 Ingress 或 LoadBalancer 让 API Server 可外部访问:
1 | # vcluster.yaml |
如果使用 Ingress,需要确保宿主集群 Ingress Controller 支持 SSL Passthrough。文档
2. 暴露 vCluster 内应用服务
方式 A:在 vCluster 内创建 Ingress,并将其同步到宿主集群,由宿主集群统一对外提供入口。
1 | # vcluster.yaml |
方式 B:在 vCluster 内创建 LoadBalancer 或 NodePort 服务,并通过宿主集群网络对外访问。适合云平台已有负载均衡器的场景。文档
实际使用场景
平台团队多租户
为每个团队或业务线创建专属虚拟集群,团队拥有接近独立集群的控制体验,同时共享底层资源,降低成本。GitHub 仓库CI / 临时环境
在同一宿主集群中快速创建/销毁测试环境,适合流水线集成测试和短期验证场景。官网Kubernetes 版本与兼容性验证
使用虚拟集群做版本适配或 Operator 兼容性验证,避免影响宿主生产环境。vCluster 文档统一平台服务复用
监控、日志、Ingress 等基础组件由宿主集群统一提供,虚拟集群专注应用层,减少重复运维成本。官网
注意事项
- 安全与权限:确保在目标命名空间内有创建控制平面组件的权限,避免 RBAC 导致的安装失败。
- 资源隔离边界:vCluster 只虚拟控制平面,底层 CPU/内存/存储仍共享,需要配合配额与调度策略。
- 版本与兼容性:虚拟集群版本、控制平面分布和后端存储类型可能影响功能表现,建议锁定版本并在测试环境验证。vCluster 文档
总结
vCluster 让 Kubernetes 集群中的多租户与环境交付更轻量:既能提供接近独立集群的体验,又保留共享底层资源的成本优势。对于平台团队而言,它是在隔离性、交付效率与成本之间的一种高性价比选择。
参考资料
本文由 AI 辅助生成,如有错误或建议,欢迎指出。




