引言
像访问 Internet 一样轻松管理您的集群(包括公共、私有、混合、边缘等)。
Clusternet (Cluster Internet) 是一款可以帮助您像访问 Internet 一样简单地管理数以百万计的 Kubernetes 集群的开源插件。 无论集群是在公共云、私有云、混合云还是在边缘运行,Clusternet 都可以让您像是在本地运行一样管理/访问它们,无需为每个集群安装不同管理工具。
Clusternet 还可以从托管集群中将一组 API 部署或协调到多个集群。
当您的集群运行在 VPC 网络、边缘网络或防火墙后时,Clusternet 可以以配置的方式设置网络隧道。
Clusternet 还提供了 Kubernetes 风格的 API,在这里你可以继续使用像是 KubeConfig 的 Kubernetes 的方式, 来访问某个托管的 Kubernetes 集群或 Kubernetes 服务。
Clusternet现在支持多个平台,包括linux/amd64
、linux/arm64
、linux/ppc64le
、linux/s390x
, linux/386
和 linux/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
的实现 - 支持多种拓扑来部署集群资源预测器
- 集群资源预测器框架,支持
- 集群子分组调度
- 多集群故障自动迁移
- 全种类应用资源
- Kubernetes 原生对象,比如
Deployment
,StatefulSet
等等 - CRD
- helm charts, 包括基于OCI的Helm Chart
- Kubernetes 原生对象,比如
- 资源解释器,支持
in-tree
或out-of-tree
的控制器 - 差异化配置
- 两阶段基于优先级的差异化策略
- 一键回滚
- 跨集群的灰度发布
- 多集群服务
- 支持基于mcs-api的跨集群服务发现
- 调度框架(
- 命令行
- 提供kubectl插件,可以通过
kubectl krew install clusternet
一键安装 - 保持与kubectl一致的使用体验
- 创建/更新/跟踪/删除多集群的资源
- 像访问本地集群一样与任一子集群进行交互
- 提供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, 将请求重定向/代理/升级到每个子集群;
Note
由于clusternet-hub
是作为 AA 服务运行,请确保父 apiserver 可以访问 clusternet-hub
服务。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.x | v1.18.x | v1.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 版本。 将需要更多兼容的测试。
Note
Special Flag Setting in kube-apiserver
To fully use the features of Clusternet, please remember to set the flag --aggregator-reject-forwarding-redirect=false
for the kube-apiserver
running in the parent cluster.
This is ONLY applicable for below Kubernetes versions.
- kube-apiserver v1.26+ ~ latest
- kube-apiserver >= v1.25.1
- kube-apiserver >= v1.24.5
- kube-apiserver >= v1.23.11
- kube-apiserver >= v1.22.14
Feedback
Was this page helpful?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.