徐迪,腾讯云容器技术专家。
汝英哲,腾讯云高级产品经理。
在过去的数年里,云计算领域经历了多次巨大的变革,当前越来越多的组织将应用部署在本地和云上的多个基础设施平台上,这些平台可能是两个公共云服务提供商,或者两个私有云,或者多地域的边缘云。
新的形态导致基础设施的管理和应用治理的方式发生变化,传统的技术架构与管理方式增加了复杂性和风险,难以满足跨多个平台的应用服务部署和治理的挑战,代表业内最新理念的 Clusternet 项目应运而生。
Clusternet ( Cluster Internet ) 是腾讯云开源的兼具多集群管理和跨集群应用编排的云原生项目,让管控多集群就像上网一样简单。。无论你的 Kubernetes 集群是运行在公有云、私有云、混合云还是边缘云上,都拥有一致的管理/访问体验,利用 K8s API 集中部署和协调多集群的应用程序和服务。
Clusternet 采用 Addon 插件的方式,方便用户一键安装、运维及集成,轻松地管理数以百万计的 Kubernetes 集群,让云计算像 Internet一样无所不在,自由便捷。
以 Clusternet 项目为基础实现多云多集群管理平台,为用户提供跨云、跨集群、跨 region/zone 的分布式容器服务,将更好的满足多种场景需求。
● 多租户
● 高可用与容灾
● 多云多中心服务
● 边缘计算
Clusternet 面向未来云原生多云多集群而设计,领先的架构支持用户以全局视角统一管理各个集群及应用,轻松地将用户业务发布至全球,一次发布处处运行。
Clusternet 遵循云原生理念,所有管理组件通过 Addon 的方式灵活部署在 Kubernetes 集群中,实现 K8s-on-K8s 集群管理集群。
对比社区其他多集群管理方案,无需学习和维护复杂的平台软件和系统,也无需维护额外的控制面的组件及 etcd。Clusternet 集群管理完全复用已有的 Kubernetes 集群及端口,通过 AA 的方式进行工作,方便灵活扩展,大大减轻运维复杂度和资源消耗。
Clusternet 架构上保证轻量化和精简,组件包括:
1、 clusternet-hub
组件 clusternet-hub 部署和运行在父集群中,通过 AA (Aggregated APIServer)的方式进行工作。
主要负责:
● 批准各个子集群的注册请求,并为其创建专属的资源,如命名空间(namespace)、服务帐户(ServiceAccount)和 RBAC 规则等。
● 维护父集群跟各个子集群的长链接
● 提供 Kubernetes 风格 的 REST API 用于访问各个子集群,尤其是对于边缘子集群的访问,同时还支持子集群的服务互访
● 支持多集群的应用分发及治理
2、clusternet-agent
组件 clusternet-agent 部署在各个子集群中。
主要负责:
● 将当前集群自动注册到父集群中作为子集群。
● 建立与父集群的 TCP 全双工的 websocket 安全隧道。支持通过 FeatureGate “SocketConnection” 选择是否要建立安全隧道。如果关闭该特性的话,即意味着父集群可以通过直连的方式访问子集群。
● 上报集群的心跳信息,包括 Kubernetes 版本、平台信息、healthz/readyz/livez 健康状态、集群容量、节点状态等
基于 Clusternet 轻量和灵活的架构,支持父集群自注册,Clusternet-hub 可向自身所在集群发布应用,该种方式最大化的利用父集群资源,并可以快速地扩展用户现有的集群,轻松具备管理海量公有云、私有云、边缘云集群的能力。
Clusternet 支持向不同集群分发和管理各种应用资源,包括原生 Kubernetes 各类资源(Deployment/StatefulSet/ConfigMap/Secret 等)、各类 CRD 资源,以及 HelmChart 应用等等。
下图是 Clusternet 的多集群应用分发模型,其中绿色的模块是需要用户去创建的,紫色的模块是 Clusternet 内部做流转的资源对象。Clusternet 提供了 kubectl 插件,可以通过 “kubectl clusternet apply” 命令来创建资源。
Clusternet 资源分发模型采用松耦合的设计,用户无须更改或重新编写已有的资源对象,仅需要额外定义分发策略 (Subscription)和差异化配置(Localization/Globalization)即可实现多集群的应用分发。
● 兼容任意资源类型
完全兼容 K8s 的标准资源,比如Deployment、StatefulSet、DaemonSet,以及各种自定义的 CRD 等,无需学习复杂的多集群资源的 CRD 定义。
● Subscription
定义希望安装到集群中的资源。对于每个匹配的集群,将在其专属的命名空间中创建相应的Base对象
● Localization & Globalization
在多集群应用分发的时,还可以利用 Localization 和 Globalization 差异化策略用于不同集群间的差异化配置。其中Localization描述 namespace-scoped (命名空间作用域)的差异化配置策略,Globalization 描述 cluster-scoped (集群作用域) 的差异化配置策略,两者均支持按照 Priority(优先级)进行管理和配置。这个特性对于面向多集群的蓝绿发布、金丝雀发布、版本升级等场景非常灵活实用。
● Base & Description
Clusternet 会自动生成 Base 和 Description 对象,用以观察和跟踪各个应用资源的分发情况。其中 Description 是 Base 对象通过 Localization 和 Globalization 差异化配置渲染后得到的对象,即描述着最终要部署到目标子集群的对象定义。
Clusternet 在项目设计之初,就全面兼容云原生生态。
Clusternet 提供了多平台的版本支持,包括常见的 Linux 各平台,比如 x86,arm64,armv6,ppc64le,s390x。
Clusternet 还提供了 kubectl 插件 (kubectl-clusternet),直接通过 kubectl 命令行进行操作,无需引入额外 CLI 工具,也无需切换 kubeconfig 的 context,即可进行多集群资源的创建、更新、编辑、删除、扩缩容等操作,方便兼容用户现有的 CICD 发布系统。
此外,Clusternet 还提供了对 client-go 的支持,完全兼容各版本的 client-go。Clusternet 通过 wrapperFunc 以无侵入的方式提供了 Clusternet 多集群对接能力。开发者可以参考文档指引,最快通过三行代码,就可在您的系统里实现多集群和应用管理能力。
Clusternet 支持云原生生态的软件和项目,从 v0.2.0 版本开始就支持对 Helm Charts 的多集群分发。基于 Clusternet 对任意 K8s 资源的原生支持,所有 K8s 生态的项目和软件都可通过 Clusternet 项目实现多集群能力。
注: kubectl-clusternet 即将添加成为 Kubectl 官方 plugin ,详细信息参考 PR ,未来可通过 “kubectl krew install clusternet” 一键安装该插件,现阶段可以先通过直接下载二进制文件的方式来使用。
Clusternet 是腾讯最新开源的多集群管理与应用治理项目,全新的架构设计遵循云原生理念,完全兼容原生 K8s 资源并扩展至多集群,支持用户快捷和低成本的对接 K8s 云原生生态,助力您的业务向未来分布式云的转型。
当前 Clusternet 仍在快速开发迭代中,即将发布 v0.4.0 版本,带来更多优秀的特性,欢迎大家持续关注。Clusternet 愿与各个领域的同仁一起,求实创新,砥砺前行,共同开创万物智联、虚实共生和全真互联的新时代。