Clusternet - 新一代开源多集群管理与应用治理项目
作者
徐迪,腾讯云容器技术专家。
汝英哲,腾讯云高级产品经理。
摘要
在过去的数年里,云计算领域经历了多次巨大的变革,当前越来越多的组织将应用部署在本地和云上的多个基础设施平台上,这些平台可能是两个公共云服务提供商,或者两个私有云,或者多地域的边缘云。
新的形态导致基础设施的管理和应用治理的方式发生变化,传统的技术架构与管理方式增加了复杂性和风险,难以满足跨多个平台的应用服务部署和治理的挑战,代表业内最新理念的 Clusternet 项目应运而生。
开源 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 (Aggregated APIServer) 的方式进行工作,方便灵活扩展,大大减轻运维复杂度和资源消耗。
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 愿与各个领域的同仁一起,求实创新,砥砺前行,共同开创万物智联、虚实共生和全真互联的新时代。
加入我们
Clusternet 项目开源进行时,欢迎关注 https://github.com/clusternet/clusternet 点赞支持。
我们正在限量召集 Clusternet 的第一批开源技术粉丝,只要你对 Clusternet 及相关技术感兴趣,都欢迎加入,参与方式:关注-公-众-号:【腾讯云原生】,添加小助手进群。
我们的开源技术粉丝将可以享受到以下特殊福利哦~
1、 专属开源技术粉丝交流群
2、 与项目作者、业内专家等直接交流
3、 更多社区活动和福利等你来参加
【腾讯云原生】云说新品、云研新术、云游新活、云赏资讯,扫码关注同名公众号,及时获取更多干货!!
Clusternet - 新一代开源多集群管理与应用治理项目的更多相关文章
- 基于 Clusternet 与 OCM 打造新一代开放的多集群管理平台
背景 随着 5G.物联网设备的爆炸性增长以及智能终端不断增强的计算能力,带来了前所未有的数据量,传统的中心集中式计算捉襟见肘."新基建"战略的实施,工业互联网.车联网/自动驾驶.智 ...
- 腾讯发布 K8s 多集群管理开源项目 Clusternet
11月4日,在腾讯数字生态大会上,腾讯宣布了云原生领域一项重磅开源进展-- K8s 多集群管理项目 Clusternet 正式开源. Clusternet 由腾讯联合多点生活.QQ音乐.富途证券.微众 ...
- 美团点评Kubernetes集群管理实践
背景 作为国内领先的生活服务平台,美团点评很多业务都具有非常显著.规律的”高峰“和”低谷“特征.尤其遇到节假日或促销活动,流量还会在短时间内出现爆发式的增长.这对集群中心的资源弹性和可用性有非常高的要 ...
- [转载] 一共81个,开源大数据处理工具汇总(下),包括日志收集系统/集群管理/RPC等
原文: http://www.36dsj.com/archives/25042 接上一部分:一共81个,开源大数据处理工具汇总(上),第二部分主要收集整理的内容主要有日志收集系统.消息系统.分布式服务 ...
- 一共81个,开源大数据处理工具汇总(下),包括日志收集系统/集群管理/RPC等
作者:大数据女神-诺蓝(微信公号:dashujunvshen).本文是36大数据专稿,转载必须标明来源36大数据. 接上一部分:一共81个,开源大数据处理工具汇总(上),第二部分主要收集整理的内容主要 ...
- Docker集群管理工具 - Kubernetes 部署记录 (运维小结)
一. Kubernetes 介绍 Kubernetes是一个全新的基于容器技术的分布式架构领先方案, 它是Google在2014年6月开源的一个容器集群管理系统,使用Go语言开发,Kubernete ...
- 集群管理工具Salt
集群管理工具Salt 简介 系统管理员(SA)通常需要管理和维护数以百计的服务器,如果没有自动化的配置管理和命令执行工具,那么SA的工作将会变得很繁重.例如,要给集群中的每个服务器添加一个系统用户,那 ...
- 一步到位分布式开发Zookeeper实现集群管理
说到分布式开发Zookeeper是必须了解和掌握的,分布式消息服务kafka .hbase 到hadoop等分布式大数据处理都会用到Zookeeper,所以在此将Zookeeper作为基础来讲解. Z ...
- elasticsearch系列八:ES 集群管理(集群规划、集群搭建、集群管理)
一.集群规划 搭建一个集群我们需要考虑如下几个问题: 1. 我们需要多大规模的集群? 2. 集群中的节点角色如何分配? 3. 如何避免脑裂问题? 4. 索引应该设置多少个分片? 5. 分片应该设置几个 ...
随机推荐
- python08篇 发邮件和异常处理
一.发邮件 import yamail smtp = yamail.SMTP(host='smtp.qq.com', # 改成自己邮箱的服务器即可,其他的比如smtp.163.com user='65 ...
- python使用笔记18--写日志
1 import nnlog 2 import traceback 3 #level:输出日志级别,debug:把所有的日志都打印出来,info:打印info以上的日志, 4 # warning:打印 ...
- asp网页防止乱码
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%> <%Session.CodePage=65001%> ...
- svo论文随手记
论文链接:http://rpg.ifi.uzh.ch/docs/ICRA14_Forster.pdf 论文提出了一种半直接单目视觉里程计,在精确性.鲁棒性和速度方面都有较大的优势.将基于特征的方法(包 ...
- 小 W 离职了
今天这篇是架构师大刘的系列故事 小W要离职了,大刘并没有挽留,甚至有点庆幸. 小W离职的原因比较简单,这次升职加薪,大刘提拔了和他同期进来,并且工作年限和他差不多的小L,而小W则是原地没动,薪水也没有 ...
- 如何让Spring Boot 的配置动起来?
前言 对于微服务而言配置本地化是个很大的鸡肋,不可能每次需要改个配置都要重新把服务重新启动一遍,因此最终的解决方案都是将配置外部化,托管在一个平台上达到不用重启服务即可一次修改多处生效的目的. 但是对 ...
- Oracle执行计划总结
一.ORACLE中常见执行计划 表访问的执行计划 1.table access full:全表扫描.它会访问表中的每一条记录. 2.table access by user rowid:输入源rowi ...
- 微信小程序云开发-云存储-上传文件(word/excel/ppt/pdf)到云存储
说明 word/excel/ppt/pdf是从客户端会话选择文件.使用chooseMessageFile中选择文件. 一.wxml文件 上传按钮,绑定chooseFile <!--上传文件(wo ...
- java String转List<Device>集合
// 从Redis中获得正常设备的数量 String success = redisService.get(RedisKey.CULTIVATION_RECORD_SUCCESS); //建立一个li ...
- JS 实现一个 LRU 算法
LRU 是 Least Recently Used 的缩写,即最近最少使用,是一种常用的页面置换算法,选择内存中最近最久未使用的页面予以淘汰. 可用的 NodeJS 库见node-lru-cache ...