引言

在企业集群规模增长后,平台团队常常需要同时满足多团队隔离、快速环境交付和成本控制。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
2
3
4
5
# Install vCluster CLI via Homebrew
brew install loft-sh/tap/vcluster

# Verify installation
vcluster --version

如果需要其他平台的安装方式,可参考官方安装页:vCluster 安装

3. Helm 方式(可选)

1
2
3
4
5
6
# Install or upgrade with Helm
helm upgrade --install my-vcluster vcluster \
--repo https://charts.loft.sh \
--namespace team-x \
--create-namespace \
--version <version>

参考文档:官方安装说明

快速部署步骤(示例)

注意:以下步骤为通用流程示例,具体参数和版本请以官方文档为准。

1. 准备命名空间

1
2
# Create a namespace for the virtual cluster
kubectl create namespace team-x

2. 准备 vCluster 配置(示例)

1
2
3
4
5
6
7
8
9
10
# vcluster.yaml
controlPlane:
backingStore:
database:
embedded:
enabled: true
sync:
toHost:
ingresses:
enabled: false

3. 创建 vCluster

1
2
# Create a virtual cluster with a values file
vcluster create my-vcluster --namespace team-x --values vcluster.yaml

4. 连接并验证

1
2
3
4
5
# Connect to the virtual cluster
vcluster connect my-vcluster --namespace team-x

# Verify access
kubectl get nodes

更多参数与部署方式见官方文档:vCluster 文档入口

vCluster 与宿主集群的 Service 互访

vCluster 内部 Pod 运行在宿主集群网络中,Service 对象可由 vCluster 的同步机制映射到宿主集群,从而实现双向访问。官方提供了 networking.replicateServices 配置用于控制同步方向与目标。文档

1. 从宿主集群访问 vCluster 内服务

通过 toHost 把虚拟集群里的 Service 映射到宿主集群:

1
2
3
4
5
6
# vcluster.yaml
networking:
replicateServices:
toHost:
- from: app-ns/api
to: vcluster-api

上面示例会将 vCluster 内 app-ns/api 同步成宿主集群中的 vcluster-api Service,宿主集群工作负载可以直接访问。

2. 从 vCluster 访问宿主集群服务

通过 fromHost 把宿主集群的 Service 映射到 vCluster:

1
2
3
4
5
6
# vcluster.yaml
networking:
replicateServices:
fromHost:
- from: platform-ns/obs-gateway
to: platform/obs-gateway

这样 vCluster 内的应用可以使用 platform/obs-gateway 访问宿主集群的共享服务。文档

StorageClass、PVC 与宿主集群的关系

vCluster 支持把宿主集群的 StorageClass 同步到虚拟集群,并将虚拟集群中的 PVC/PV 反向同步到宿主集群,从而复用宿主存储系统。核心关系如下:文档

  1. StorageClass 同步方向:宿主集群 → vCluster
  2. PVC/PV 同步方向:vCluster → 宿主集群
  3. 可控范围:可通过 selector 限制哪些 StorageClass 对虚拟集群可见

StorageClass 同步示例

1
2
3
4
5
6
7
8
# vcluster.yaml
sync:
fromHost:
storageClasses:
enabled: true
selector:
matchLabels:
vcluster: "true"

注意:如果不配置 selector,默认会同步宿主集群中的所有 StorageClass

vCluster 内使用 PVC 示例

1
2
3
4
5
6
7
8
9
10
11
12
13
# pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: app-data
namespace: app-ns
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
storageClassName: fast-ssd

fast-ssd 来自宿主集群同步时,PVC 会在宿主侧实际创建并绑定对应 PV。

将 vCluster 服务暴露给外部访问

对外暴露可分为两类:控制平面 API应用服务。官方给出多种访问方式与配置示例。文档

1. 暴露 vCluster 控制平面 API

常见方式是通过 Ingress 或 LoadBalancer 让 API Server 可外部访问:

1
2
3
4
5
6
7
8
9
10
# vcluster.yaml
controlPlane:
ingress:
enabled: true
host: vcluster.example.com
proxy:
extraSANs:
- vcluster.example.com
exportKubeConfig:
server: https://vcluster.example.com:443

如果使用 Ingress,需要确保宿主集群 Ingress Controller 支持 SSL Passthrough。文档

2. 暴露 vCluster 内应用服务

方式 A:在 vCluster 内创建 Ingress,并将其同步到宿主集群,由宿主集群统一对外提供入口。

1
2
3
4
5
# vcluster.yaml
sync:
toHost:
ingresses:
enabled: true

方式 B:在 vCluster 内创建 LoadBalancerNodePort 服务,并通过宿主集群网络对外访问。适合云平台已有负载均衡器的场景。文档

实际使用场景

  1. 平台团队多租户
    为每个团队或业务线创建专属虚拟集群,团队拥有接近独立集群的控制体验,同时共享底层资源,降低成本。GitHub 仓库

  2. CI / 临时环境
    在同一宿主集群中快速创建/销毁测试环境,适合流水线集成测试和短期验证场景。官网

  3. Kubernetes 版本与兼容性验证
    使用虚拟集群做版本适配或 Operator 兼容性验证,避免影响宿主生产环境。vCluster 文档

  4. 统一平台服务复用
    监控、日志、Ingress 等基础组件由宿主集群统一提供,虚拟集群专注应用层,减少重复运维成本。官网

注意事项

  • 安全与权限:确保在目标命名空间内有创建控制平面组件的权限,避免 RBAC 导致的安装失败。
  • 资源隔离边界:vCluster 只虚拟控制平面,底层 CPU/内存/存储仍共享,需要配合配额与调度策略。
  • 版本与兼容性:虚拟集群版本、控制平面分布和后端存储类型可能影响功能表现,建议锁定版本并在测试环境验证。vCluster 文档

总结

vCluster 让 Kubernetes 集群中的多租户与环境交付更轻量:既能提供接近独立集群的体验,又保留共享底层资源的成本优势。对于平台团队而言,它是在隔离性、交付效率与成本之间的一种高性价比选择。

参考资料

本文由 AI 辅助生成,如有错误或建议,欢迎指出。