Skip to main content

3 posts tagged with "multi-cluster"

View All Tags

1 vcluster 介绍

虚拟集群(virtual cluster, 简称 vcluster)是在常规的 Kubernetes 集群之上运行的一个功能齐全,轻量级,隔离性良好的 Kubernetes 集群。虚拟集群的核心思想是提供运行在“真实”Kubernetes 集群之上隔离的 Kubernetes 控制平面(例如 API Server)。与完全独立的“真实“集群相比,虚拟集群没有自己的工作节点或者网络,工作负载实际上还是在底层宿主集群上调度。

默认情况下,vcluster 作为一个包含 2 个容器的 Pod 运行。(由 StatefulSet 调度),包含:

  • 控制平面:包含 API Server, Controller Manager, 数据存储。默认情况下使用 sqlite 作为数据存储,并且使用 k3s 运行 API Server 和 Controller Manager。
  • Syncer 同步器:vcluster 本身并没有实际的工作节点或者网络,它使用 syncer 将虚拟集群中创建的资源复制到底层宿主集群中。

vcluster 中的资源分为两种:

  • 高级(纯虚拟):这部分资源只存在于虚拟集群中,例如 Deployment、StatefulSet、CRD 等。
  • 低级(同步资源):一些底层的 Kubernetes 资源需要同步到底层宿主集群中,例如 Pod、Service、Persistent Volume 等等。

vcluster 有以下特点:

  • 可使用集群层面的资源:在虚拟集群中允许租户使用 CRD、Namespaces、ClusterRole 等资源,这比通过命名空间隔离的方式功能更加强大。
  • 轻量级:vcluster 默认使用 k3s 构建虚拟集群,k3s 是一个经过认证的轻量级 Kubernetes 发行版,100% 兼容 Kubernetes API,它将 Kubernetes 的组件编译为小于 100 MB 的单个二进制文件,默认禁用所有不需要的 Kubernetes 功能,例如 Pod 调度器或某些控制器,这使得 k3s 的内存使用仅仅为常规 k8s 的一半。另外 vcluster 还支持其他发行版,例如 k0s 或常规 k8s。
  • 经济高效:创建虚拟集群比“真正的“集群更加便宜和高效,最少只需要创建单个 vcluster Pod(包含 API server, syncer, 后端存储)。
  • 良好的隔离性:每个虚拟集群有独立的控制平面和接入点,并且可以对虚拟集群的网络和工作负载进行限制。
  • 没有性能下降:Pod 实际上被部署在底层主机集群中,因此它们在运行时根本不会受到性能影响。
  • 减少宿主集群上的开销:高级资源(例如 Deployment、StatefulSet、CRD )仅保留在虚拟集群中而不会到达底层宿主集群,从而大大减少对底层宿主集群 Kubernetes API Server 的请求数量。
  • 易于部署 :vcluster 可以通过 vcluster CLI、helm、kubectl、cluster api、Argo CD 等多种工具进行部署(它本质上只是一个 StatefulSet 资源)。
  • 单一命名空间封装:每个虚拟集群及其所有的工作负载都位于底层宿主集群的单一命名空间内。
  • 灵活和多功能:vcluster 支持不同的后端存储(例如 sqlite、mysql、postgresql 和 etcd)、插件,允许自定义资源的同步策略,你甚至还可以在 vcluster 中部署 vcluster。

使用虚拟集群相比创建单独的 Kubernetes 集群更经济高效,同时相较于命名空间的隔离方式则能够提供更好的多租户和隔离特性。下表对命名空间、vcluster 和单独的 Kubernetes 集群 3 种方式在隔离性、多租户访问、成本等方面进行了对比。

multi-cluster21 min read

Submariner 是一个完全开源的项目,可以帮助我们在不同的 Kubernetes 集群之间(无论是在本地还是云端)实现网络通信。Submariner 有以下功能:

  • 跨集群的 L3 连接
  • 跨集群的服务发现
  • Globalnet 支持 CIDR 重叠
  • 提供命令行工具 subctl 简化部署和管理
  • 兼容各种 CNI

1 Submariner 架构

multi-cluster19 min read

Submariner 是一个用于连接 Kubernetes 集群的跨集群网络解决方案,可以实现集群之间的服务发现、网络通信等功能。

Prometheus 是一个开源的监控和告警系统,专门用于收集、存储和查询各种应用、系统和基础设施的实时指标数据。Prometheus 具备多维数据模型、灵活的查询语言(PromQL)、高效的存储等特点,广泛应用于 Kubernetes 集群监控、服务可用性监控、性能分析等场景。

Grafana 是一款流行的开源数据可视化工具,可以与 Prometheus 等各种数据源集成,为用户提供丰富、实用的监控图表和仪表盘。

在本文中,将介绍如何利用 Prometheus 对 Submariner 进行监控,并通过 Grafana 展示监控数据的图表。我们可以通过监控了解 Submariner 多集群的连接状态,连接延时等指标,并及时发现潜在的问题。

multi-cluster11 min read