vCluster(虚拟集群)
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 版本的能力。
限制与权衡
| Limitation | Impact |
|---|---|
| 主机集群依赖性 | 如果主机集群宕机,所有 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 架构风格
-
Control Plane – 最常见且功能最强大的选项。它在一个 Pod 中启动专用的 Kubernetes API 服务器、调度器、controller‑manager 和 etcd,提供完整的、隔离的控制平面。
-
No Control Plane – vCluster 充当一个“隔离区”,所有 Kubernetes 对象均由宿主集群的控制平面管理。这种轻量模式适用于在 vCluster 内运行 Kind 集群,或对不需要独立控制平面逻辑的无状态应用等场景。
当你在 vCluster 内部署应用或 Kubernetes 资源时,它们最终会在宿主集群的节点上被调度和运行。vCluster 的 syncer 组件会把虚拟集群的期望状态转换为宿主集群的实际状态,确保 Pod、Deployment 和 Service 能在底层基础设施上正确创建。
Service Exposure
vCluster 能优雅地处理 Service 暴露。你可以在 vCluster 中使用标准的 Kubernetes Service 对象(如 LoadBalancer 或 NodePort 类型);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,能够连接到你的宿主集群。 - 已安装
vclusterCLI。
步骤 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 的强大力量!