vCluster(虚拟集群)

发布: (2026年2月28日 GMT+8 15:18)
15 分钟阅读
原文: Dev.to

Source: Dev.to

有没有感觉在管理 Kubernetes 时像在玩千把燃烧的链锯?
你的生产集群运行良好,随后预发布环境需要自己的独立空间,接着是实验性的开发沙箱,别提 CI/CD 流水线了。突然,你面对的是一堆相互关联的 Kubernetes 集群,每个都有自己的 YAML 文件、权限和头疼的问题。

如果这听起来很熟悉,那就系好安全带吧,因为我们即将深入 vCluster(虚拟集群)的神奇世界。把 vCluster 想象成装在瓶子里的 Kubernetes 精灵,赋予你在现有基础设施中创建隔离、轻量级 Kubernetes 集群的能力。再也不用为每一个小需求都部署占用大量资源的沉重集群!

什么是 vCluster?

vCluster 并不是运行完整 Kubernetes 控制平面的独立物理机或虚拟机。相反,它是 在宿主 Kubernetes 集群中作为单个 Pod 运行的虚拟化 Kubernetes 集群

  • 宿主集群 – 您的大型、强大的 Kubernetes 集群。
  • vCluster – 一个轻量级的 Kubernetes API 服务器、调度器、controller‑manager 和 etcd,全部打包在一起并作为 Pod 在宿主集群内部运行。

当您与 vCluster 交互时,实际上是与运行在 Pod 中的这个 API 服务器对话。您的 kubectl 命令和部署会指向这个虚拟控制平面,而实际的 Kubernetes 对象(Pod、Deployment、Service 等)会作为 “嵌套” 对象在 vCluster 的控制平面中创建,最终仍然被调度到宿主集群的节点上。

类比: 这就像在一栋更大的公寓里拥有一个小型、独立的 Kubernetes 环境。您拥有自己的空间、自己的规则,但仍然住在同一栋楼里。

Source:

为什么在 Pod 中运行很重要?

影响巨大。让我们来看看 vCluster 为你的 Kubernetes 生活带来的光明与彩虹。

核心收益(MVP)

收益含义
租户隔离对于 SaaS 提供商或共享基础设施的团队,vCluster 提供真正的隔离。一个租户的错误配置或资源抢占不会影响其他租户。
环境分离需要一个专用的集群用于预发布、另一个用于开发、再一个用于 CI/CD 吗?vCluster 让这变得轻而易举,无需启动完整的集群。
安全边界可以对每个 vCluster 应用不同的安全策略和 RBAC,确保敏感工作负载得到保护。

资源效率

  • 降低开销 – 你不必在不同的基础设施上复制完整的 Kubernetes 控制平面。这大幅降低 CPU、内存和存储的消耗。
  • 成本节约 – 基础设施更少,云费用更低。对任何注重预算的组织都是巨大的收益。
  • 更快的供应 – 启动一个新的 vCluster 只需几分钟,而不是几小时甚至几天(相比于创建新 VM 并安装 Kubernetes)。

运维简化

  • 集中管理 – 管理宿主集群,然后轻松地创建、管理和删除 vCluster。
  • 简化 CI/CD – 想象一下流水线可以为每个 Pull Request 自动创建 vCluster、运行测试,然后销毁它。这已经成为现实!
  • 更易实验 – 想尝试新的 Kubernetes 功能或不同的准入控制器?启动一个 vCluster,进行实验,如果出问题,只需删除它,不会影响生产环境。

功能完整且轻量

  • 完整的 Kubernetes API – 你会得到一个真实的 API 端点用于你的 vCluster,能够使用 kubectl、Helm 以及其他标准工具。
  • 可定制配置 – 可以为每个 vCluster 选择特定的 Kubernetes 版本、准入控制器以及其他设置。
  • Namespace 与 vCluster 的区别 – 虽然 Namespace 在同一集群内部提供隔离,vCluster 则提供更深层的隔离,包括独立的 API 端点以及运行不同 Kubernetes 版本的能力。

限制与权衡

LimitationImpact
主机集群依赖性如果主机集群宕机,所有 vCluster 都会宕机。vCluster 本身并不是灾难恢复方案;它依赖于其父集群的稳定性和可用性。
共享工作节点vCluster 所使用的底层工作节点仍然是主机集群的节点。某个 vCluster 中出现大规模工作负载激增时,可能会使主机节点饱和,从而导致这些节点上所有 vCluster 的性能下降。
网络复杂性要理解 vCluster 与主机集群之间的网络以及服务的暴露方式,需要一定的网络知识。vCluster 确实提供了相应工具来帮助,但仍有学习曲线。
何时使用传统多集群在需要完全的物理或地域分离、独立扩展或高级多区域灾难恢复的场景下,仍可能需要传统的多集群部署。vCluster 在单一、可靠的 Kubernetes 环境中提供逻辑隔离方面表现出色。

底层原理

vcluster CLI 是与 vCluster 交互的主要工具。它可以让您:

  • 创建和删除 vCluster
  • 导出 kubeconfig 文件,以实现无缝的 kubectl 访问
  • 管理升级、备份等

(原始内容在此处被截断,但 CLI 仍然是日常 vCluster 操作的首选界面。)

快速入门(示例)

# Install the vcluster CLI
curl -LO https://github.com/loft-sh/vcluster/releases/latest/download/vcluster-linux-amd64
chmod +x vcluster-linux-amd64
sudo mv vcluster-linux-amd64 /usr/local/bin/vcluster

# Create a vCluster named "dev"
vcluster create dev --namespace vcluster-dev

# Get the kubeconfig for the new vCluster
vcluster connect dev --namespace vcluster-dev

现在您可以对 dev vCluster 运行常规的 kubectl 命令:

kubectl get pods        # Lists pods inside the vCluster
kubectl apply -f app.yaml

TL;DR

  • vCluster = 在宿主集群中以 Pod 形式运行的虚拟 Kubernetes 集群
  • 提供 强隔离更低开销快速部署成本节约
  • 依赖宿主集群——因此需相应规划高可用和容量。
  • 适用于 多租户 SaaS环境隔离CI/CD实验

试用 vCluster,驯服 Kubernetes 这头野兽! 🚀

管理 vClusters

直观且让创建、列出和连接 vClusters 等任务变得轻而易举。

安装(macOS 示例)

brew install vcluster

创建 vCluster

vcluster create my-dev-cluster \
  --kubernetes-version v1.27.3 \
  --dry-run -o yaml > my-dev-cluster.yaml
kubectl apply -f my-dev-cluster.yaml

这将创建一个名为 my-dev-cluster 的 vCluster,使用特定的 Kubernetes 版本。--dry-run 参数可以让你在应用之前查看 YAML。

连接到 vCluster

vcluster connect my-dev-cluster

该命令会自动配置你的 kubectl 上下文指向新创建的 vCluster。之后你可以像往常一样使用 kubectl,但所有命令都会发送到虚拟集群。

列出你的 vClusters

vcluster list

Source:

vCluster 架构风格

  1. Control Plane – 最常见且功能最强大的选项。它在一个 Pod 中启动专用的 Kubernetes API 服务器、调度器、controller‑manager 和 etcd,提供完整的、隔离的控制平面。

  2. No Control Plane – vCluster 充当一个“隔离区”,所有 Kubernetes 对象均由宿主集群的控制平面管理。这种轻量模式适用于在 vCluster 内运行 Kind 集群,或对不需要独立控制平面逻辑的无状态应用等场景。

当你在 vCluster 内部署应用或 Kubernetes 资源时,它们最终会在宿主集群的节点上被调度和运行。vCluster 的 syncer 组件会把虚拟集群的期望状态转换为宿主集群的实际状态,确保 Pod、Deployment 和 Service 能在底层基础设施上正确创建。

Service Exposure

vCluster 能优雅地处理 Service 暴露。你可以在 vCluster 中使用标准的 Kubernetes Service 对象(如 LoadBalancerNodePort 类型);syncer 会将这些对象转换为宿主集群上等效的 Service 或 Ingress 资源,从而使你的应用可被访问。

Using Helm with vClusters

是的——完全可以使用 Helm 将应用部署到 vCluster!vcluster connect 命令会确保你的 kubectl 和 Helm 配置已正确设置。

# After connecting to the vCluster
helm install my-app ./my-helm-chart --namespace my-app-ns

vCluster 的优势

  • SaaS 平台 – 多租户 SaaS 提供商可以在共享基础设施中为每个客户提供专用的、隔离的 Kubernetes 环境。
  • 开发团队 – 每个开发者或团队都可以获得一个沙盒环境进行实验,互不干扰。
  • CI/CD 流水线 – 动态创建短暂的 vCluster 用于测试 PR、运行集成测试,然后自动销毁。
  • 培训与教育 – 为学生或新员工提供隔离的 Kubernetes 环境,以安全地学习和实践。
  • 边缘计算 – 在边缘部署轻量级的 Kubernetes 控制平面,并从主集群集中管理。

Source:

快速示例:为开发设置 vCluster

前置条件

  • 一个正在运行的 Kubernetes 集群(例如 Minikube、Kind,或云托管服务)。
  • 已安装并配置好 kubectl,能够连接到你的宿主集群。
  • 已安装 vcluster CLI。

步骤 1 – 创建 vCluster

vcluster create my-dev-sandbox \
  --namespace vcluster-system \
  --kubernetes-version v1.27.3
  • my-dev-sandbox:你的 vCluster 名称。
  • --namespace vcluster-system:在宿主集群的专用命名空间中部署 vCluster 组件。
  • --kubernetes-version:指定所需的 Kubernetes 版本。

步骤 2 – 连接到你的 vCluster

vcluster connect my-dev-sandbox --namespace vcluster-system

你会看到输出,表明 kubectl 上下文已切换。

步骤 3 – 验证你的 vCluster

kubectl get nodes

你会看到一个代表 vCluster 本身的“节点”(它作为宿主集群上的一个 Pod 运行)。

kubectl get pods -n kube-system

在 vCluster 内运行的核心 Kubernetes 组件将会列出。

步骤 4 – 部署应用

创建一个简单的 Nginx 部署:

# nginx-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80

应用它:

kubectl apply -f nginx-deployment.yaml

步骤 5 – 暴露你的应用

创建一个 Service 来暴露 Nginx:

# nginx-service.yaml
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app: nginx
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
  type: LoadBalancer   # 或 NodePort,取决于你的宿主集群设置

应用该 Service:

kubectl apply -f nginx-service.yaml

vCluster 同步器会将此 Service 转换为宿主集群上的相应资源。获取外部 IP(针对 LoadBalancer)或节点端口,即可访问 Nginx 实例。

步骤 6 – 断开连接并清理

切换回宿主集群的上下文:

kubectl config use-context <host-cluster-context>

删除 vCluster:

vcluster delete my-dev-sandbox --namespace vcluster-system

所有与 vCluster 关联的资源都会被删除。

  • vCluster 是一个游戏(示例文本)*

vCluster:为所有使用 Kubernetes 的人带来颠覆性改变

它让 Kubernetes 的使用更加民主化,使其在更广泛的使用场景中更加易得、经济且易于管理。无论你是渴望拥有独立沙箱的开发者、希望优化资源利用的 DevOps 工程师,还是构建多租户应用的 SaaS 提供商,vCluster 都提供了一个引人注目的解决方案。

它巧妙地弥合了完整 Kubernetes 集群的复杂性与更简易容器编排方案的局限之间的鸿沟。通过采用“虚拟”方式,vCluster 让你驯服 Kubernetes 这只野兽,使其成为你工具箱中更强大且不那么令人生畏的利器。

所以,去创建一些虚拟集群吧,以符合你需求的方式释放 Kubernetes 的强大力量!

0 浏览
Back to Blog

相关文章

阅读更多 »