引言

Clusternet 引言

像访问 Internet 一样轻松管理您的集群(包括公共、私有、混合、边缘等)。


Clusternet (Cluster Internet) 是一款可以帮助您像访问 Internet 一样简单地管理数以百万计的 Kubernetes 集群的开源插件。 无论集群是在公共云、私有云、混合云还是在边缘运行,Clusternet 都可以让您像是在本地运行一样管理/访问它们,无需为每个集群安装不同管理工具。

Clusternet 还可以从托管集群中将一组 API 部署或协调到多个集群。

当您的集群运行在 VPC 网络、边缘网络或防火墙后时,Clusternet 可以以配置的方式设置网络隧道。

Clusternet 还提供了 Kubernetes 风格的 API,在这里你可以继续使用像是 KubeConfig 的 Kubernetes 的方式, 来访问某个托管的 Kubernetes 集群或 Kubernetes 服务。

Clusternet现在支持多个平台,包括linux/amd64linux/arm64linux/ppc64lelinux/s390x , linux/386linux/arm;

核心功能

  • 多集群管理和治理
    • 纳管运行在云上的Kubernetes集群,比如AWS,Google云,腾讯云,阿里云等
    • 纳管自管的Kubernetes集群
    • 纳管任何通过认证的Kubernetes发行版, 比如k3s
    • 纳管边缘的Kubernetesmanaging Kubernetes clusters running at the edge
    • 自动发现和注册通过 cluster-api创建出来的集群
    • 管控集群(父集群)也可以注册为子集群来跑业务负载
    • 纳管版本高于v1.17.x的各类Kubernetes集群 (参照 Kubernetes版本偏差)
    • 支持通过动态的RBAC规则访问子集群 (参照这篇教程)
    • 支持通过Node Feature Discovery自动发现集群特性,并打标
  • 应用分发
    • 调度框架(in-tree 插件/out-of-tree插件)
    • 跨集群调度
      • 复制调度
      • 静态基于权重的拆分调度
      • 动态基于水位的拆分调度
        • 集群资源预测器框架,支持in-tree/out-of-tree的实现
        • 支持多种拓扑来部署集群资源预测器
      • 集群子分组调度
      • 多集群故障自动迁移
    • 全种类应用资源
    • 资源解释器,支持in-treeout-of-tree的控制器
    • 差异化配置
      • 两阶段基于优先级的差异化策略
      • 一键回滚
      • 跨集群的灰度发布
    • 多集群服务
      • 支持基于mcs-api的跨集群服务发现
  • 命令行
    • 提供kubectl插件,可以通过kubectl krew install clusternet一键安装
    • 保持与kubectl一致的使用体验
    • 创建/更新/跟踪/删除多集群的资源
    • 像访问本地集群一样与任一子集群进行交互
  • Client-go
    • 通过一个wrapper,完成与client-go的集成

架构

Clusternet 是一个轻量级插件,由 “clusternet-agent”、“clusternet-scheduler”、“clusternet-controller-manager”(自 v0.15.0 起)和 “clusternet-hub” 四个组件组成。

clusternet-agent 负责

  • 自动将当前集群注册到父集群作为子集群,也称为"ManagedCluster";
  • 报告当前集群的心跳,包括Kubernetes版本、运行平台、healthz/readyz/livez、状态等;
  • 建立一个 websocket 连接,它通过单个 TCP 连接来提供全双工通信通道到父集群;

clusternet-scheduler 负责

  • 基于 SchedulingStrategy 来调度资源/feeds到匹配的子集群;

clusternet-controller-manager(自 v0.15.0 起)负责

  • 批准集群注册请求并为每个子集群创建专用资源,例如命名空间、服务帐户和 RBAC 规则;
  • 利用 API,协调和部署应用程序到多个集群;

clusternet-hub 负责

  • 作为aggregated apiserver (AA) 服务。提供 shadow APIs,并用作 websocket 服务器,来维护子集群的多个活动 websocket 连接;
  • 提供 Kubernetes 风格的 API, 将请求重定向/代理/升级到每个子集群;

Kubernetes 版本支持

Clusternet 兼容多个 Kubernetes 版本。 例如,您可以使用 Kubernetes v1.20.8 运行“clusternet-hub”,而子 Kubernetes 集群的版本范围 可以从 v1.18.x 到 v1.23.x。

如果集群运行的 Kubernetes 版本高于 v1.24.0,请将 Clusternet 升级到至少 v0.13.0 版本。

版本Kubernetes v1.17.xv1.18.xv1.19.x ~ v1.23.x> = v1.24.x
Clusternet v0.5.0***
v0.6.0 ~ v0.12.0**
>= v0.13.0*
HEAD (main)*

注:

  • Clusternet 与此 Kubernetes 版本兼容。
  • * Clusternet 不保证支持该 Kubernetes 版本。 将需要更多兼容的测试。