当前位置: 首页 > news >正文

CNStack 云服务云组件:打造丰富的云原生技术中台生态

作者:刘裕惺

CNStack 相关阅读:

CNStack 多集群服务:基于OCM 打造完善的集群管理能力

CNStack 虚拟化服务:实现虚拟机和容器资源的共池管理

CNStack 云边协同平台:实现原生边缘竟能如此简单

01 前言

CNStack 2.0(以下简称 CNStack) 作为阿里云云原生最佳实践的输出载体,其目标是提供一个开放、共享、标准化的云原生生态系统,使企业能够更加轻松地构建和管理云原生应用。其中,在平台侧能力扩展方面,CNStack 基于“云服务” 及 “云组件”标准规范及相应工具链,提供了开放、标准、易用的能力。

目前,CNStack 已发布的云服务包括:多集群管理,分布式应用管理、分布式存储、虚拟化服务、云边协同、服务网格等,前面几篇文章中,也已陆陆续续的专文介绍了多集群、虚拟化、云边协同等云服务。后续也会有更多的云服务&云组件上架 CNStack 并专文介绍。

本文将针对云服务&云组件自身及其相关工具链进行一个系统的分享。

02 云服务&云组件简介

在具体介绍云服务&云组件之前,首先我们需要阐述一下云服务&云组件的定位以及其存在的意义。

在 CNStack 体系内,我们希望每个面向用户提供的服务既相互解耦又可无缝协作,同时还可以简单快速复用CNStack 平台提供的基础能力。针对此目标与期望,我们提出了云服务的概念,通过云服务:

  1. 基于 CNStack 平台,可在其上不断的增长新的云服务,以实现能力的扩展。

  2. 各云服务之间的生命周期与发布可完全解耦,包括与 CNStack 平台之间(实际上 CNStack 自身也是一个云服务)。

  3. 基于 CNStack 平台,可快速简单使用平台提供的用户、租户、鉴权、审计、许可证、多集群部署、UI 框架等基础能力,以及与平台既有能力或其他云服务无缝的协作能力。

云服务作为一个整体提供特定的服务,而其背后真正的实体还是由云组件组成。同时考虑到组件维度更细粒度的使用场景,在 CNStack 体系内,将云组件区分为如下几种类型:

  1. 云服务组件,作为云服务中组件的一员,其生命周期和云服务一致;云服务下的组件根据其部署特性又区分为控制面和数据面,其中:
    1. 控制面组件,即管控类组件,仅在主集群上部署。
    2. 数据面组件,即非管控类组件,可以在主集群/客用集群部署,其生命周期和健康状况,在集群之间相互独立。
  1. 集群组件,由集群管理员单独维护,生命周期由集群管理员负责,其往往集群维度内全局唯一。

  2. 项目组件,由项目管理员在项目命名空间中部署,其可与用户自研软件一起编排实现业务流程,其生命周期由具体使用者负责。

在这里插入图片描述

特殊声明:云服务&云组件自身与社区已存在的 Helm Chart、OAM(Open Application Model)等应用定义并不冲突,而是将这些应用定义做为云服务&云组件的其中一种支持方式(当前云服务&云组件仅支持 Helm Chart)。

03 基于 cn-app-operator,实现云服务&云组件的完整生命周期管理

针对云服务&云组件的生命周期管理,CNStack 基于 cn-app-operator 组件以 Kubernetes CRD 模式进行管理,对于云服务方来说,只需将云服务/云组件的定义丢到集群里,接下来就交给 cn-app-operator 组件即可。

在这里插入图片描述

上述是 cn-app-operator 在用户提交一个云服务/云组件后,其针对云服务/云组件的生命周期的管理 注:所有云服务&云组件的声明都是在主集群中

  1. 根据云服务&云组件声明自动到达终态
    1. 根据云服务+云服务配置声明,自动创建出对应的云组件(注:也可单独提交云组件)
    2. 针对云服务,允许提供单独的云服务配置,针对云组件部分参数进行覆盖(云组件默认参数与覆盖参数的 merge 由 cn-app-operator 自动完成),以实现定义和配置的解耦
    3. 针对集群组件(即集群范围内唯一的云组件),其生命周期独立于云服务。其部署行为为:如果集群内未部署该组件,则进行部署;如果集群内已部署该组件,则仅在更高版本被声明时,进行升级;否则不做任何行为改变
    4. 根据云组件声明,通过 helm install/upgrade/rollback 等方式,使其达到云组件定义的期望状态
    5. 具体 action 会执行 helm install/helm upgrade / helm rollback, 由 cn-app-operator 自动判断
    6. 监听云服务配置,多集群信息等触发上述行为的自动变更
  1. 针对云服务&云组件的每次变更,基于 Kubernetes ControllerRevision 记录历史变更

  2. 维护云服务&云组件的状态信息

    1. 通过 LabelMarker,将所有属于云服务/云组件的 workload 打标,workload 列表通过解析 helm manifest 获取
    2. 云服务&云组件 status 控制器,会根据云服务&云组件相关标签,获取并聚合 workload 的状态信息,作为云服务&云组件的真实状态
  1. 高扩展能力支持,如通过扩展云组件部署器,支持多集群,边缘节点等复杂场景部署
    1. 基于 OCM(open-cluster-management),扩展 cn-app-operator 组件部署器,将 helm release 下发到相应的集群中。其中决定云服务组件需要部署到哪些集群上,通过匹配云服务中组件的 ClusterLabelSelector 定义与多集群 ManagedCluster 对象的 Labels来决定。
    2. 云边协同云服务,通过扩展 cn-app-operator 组件部署器,支持将 helm release 部署至边缘节点上

同时为保证云服务服务质量,cn-app-operator 为云服务提供授权保护服务,主要为云服务提供 License 信息的加密保护以及基础部署控制(CNStack 自身的商务 License 也是基于该方式进行管控)。云服务提供方,需要针对授权环境,提供相应的服务质量保证。

  1. 云服务无需关心 License 的生成、校验等基础能力,会由 cn-app-operator 统一提供

  2. 可通过 ServiceMonitor 暴露当前使用用量,cn-app-operator 会自动与 License 中授权用量做对比,如果超出用量,则拒绝云服务的部署/变更

  3. 云服务也可通过 cn-app-operator 提供的接口获取授权信息并实现云服务自身的授权保护逻辑

04 基于Sealer,实现云服务&云组件的 build,share,run

Sealer[ˈsiːlər] 是云原生 PaaS 团队贡献给 CNCF 基金会的开源项目,其核心目标在于实现分布式软件的 Build、Share、Run 能力,探索分布式软件更好的协作与交付方式。其使用类似 Docker Image 的方式,将分布式软件部署所需的所有依赖统一在 Build 阶段打包在 Sealer Image 中, 并在 Run 节点可通过 Clusterfile 配置来描述/覆盖启动 Sealer Image 中的分布式软件的默认配置,其中 Sealer Image 自身是符合 OCI 规范的,其可基于已有 Docker Registry/OCI Registry 进行存储&分发。

在这里插入图片描述

云服务&云组件的发布包规范遵循 Sealer 项目,通过 Sealer Image,将云服务/云组件(包含定义、附件等)、cn-app-operator 甚至是 K8s 集群自身以及部署依赖所有的 container images 等统一构建打包,在部署阶段通过 sealer run 命令可实现一键部署 K8s 集群 + 所有云服务以及一键增量部署云服务&云组件,使 CNStack 自身(包含 K8s 集群)与云服务云组件的交付方式统一且简单。

在这里插入图片描述

05 基于 CNStack 能力中心,实现云服务&云组件的白屏化管理

基于 CNStack 平台部署的云服务&云组件,便可无缝对接 CNStack 平台提供的的能力中心(白屏化管理),IAM(账号管理,身份认证,访问控制,操作审计等),UI 框架等基础能力。其中,IAM 和 UI 框架等会在后续专文介绍。

在白屏化管理方面,通过 CNStack 能力中心,管理员将云服务/云组件交付包(即前面提到的打包了云服务/云组件的 Sealer Image )导入能力中心,即可实现云服务/云组件的部署,升级,变配,卸载等一系列生命周期管理能力及日志监控告警等运维能力。其中:

  1. 除通过交付包(即 Sealer Image)导入外,云组件交付包也可以基于一个标准的 Helm Chart 包,通过能力中心白屏直接导入并使用

  2. 云组件的日志接入,无需额外配置即可直接使用,其中相关 Pod 的 stdout 会默认被采集

  3. 云服务&云组件的监控告警也只需做简单的配置,就可快速接入,具体接入方式及使用后续会有专文介绍

云服务列表&云服务运维:

在这里插入图片描述

在这里插入图片描述

云组件列表&云组件运维:

在这里插入图片描述

在这里插入图片描述

如上所述,在客户局点中,所有的云服务&云组件当前都需要通过手动导入包的方式进行导入,而如果在满足单向出网络的局点中,能够打通外部云服务&云组件市场,从而实现在线安装,更新等服务,将会使云服务&云组件的使用更加便捷。能力中心目前也已经正在规划该项能力,敬请期待。

另外在白屏能力上值得一提的就是云服务的多集群部署能力,前文提到,通过匹配云服务中组件的 ClusterLabelSelector 定义与多集群 ManagedCluster 对象的 Labels 来决定云服务组件部署到的集群。这就需要操作人员来手动维护 ManagedCluster 对象的 Label 使其满足云服务组件 ClusterLabelSelector 的声明,而通过能力中心, 无需关心上述声明,仅需通过能力中心操作部署/卸载即可,能力中心会自动完成 ManagedCluster 相应 Label 的变更操作。

在这里插入图片描述

06 总结

通过云服务&云组件,使 CNStack 作为输出载体,可在其之上不断的丰富其生态系统。围绕云服务&云组件,我们:

  1. 结合 Sealer,完成了模型规范,并在支持 Helm Chart 的基础上,保留了其未来支持 OAM 等应用定义的扩展性。
  2. 构建了生命周期管理工具,cn-app-operator,其完整的支持云服务&云组件的全生命周期管理,并在未来会扩展支持如多集群灰度等更高阶的能力。
  3. CNStack 平台内置了白屏化管理平台, CNStack 能力中心,使云服务&云组件的操作&管理&运维成本大幅降低,并可无缝对接 UI 框架,身份&访问管理等基础能力。
  4. 甚至打造了阿里云公有云产品 - 云原生应用交付平台(Application Delivery Platform,简称 ADP)(实现了云服务&云组件的 CI/CD,常用中间件云组件的支持,基于公有云环境在线验证,一键产出云服务&云组件 Sealer 交付包,License 授权管理等能力),方便云服务&云组件的集成,测试和发布。

另外除了由阿里云官方来提供云服务&云组件外,我们也希望将这个扩展能力交给用户以及社区。目前所有用户皆可通过 ADP 平构建自己的云服务&云组件,同时我们也正在着手准备将云服务&云组件模型的定义、生命周期管理工具 cn-app-operator 以及相关完整的工具链逐步在 CNStack 社区进行开源。

相关链接:

  • CNStack 产品官网
    https://www.aliyun.com/activity/middleware/cnstack

  • CNStack 社区版(免费下载使用)
    https://github.com/alibaba/CNStackCommunityEdition

  • ADP(Application Delivery Platform) 产品官网
    https://help.aliyun.com/product/191542.html

  • CNCF Sealer 项目
    https://github.com/sealerio/sealer

  • CNCF OCM 项目
    https://open-cluster-management.io/

  • Helm
    https://helm.sh/

  • OAM(Open Application Model)
    https://oam.dev/

  • Kubernetes ControllerRevision
    https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/controller-revision-v1/

相关文章:

CNStack 云服务云组件:打造丰富的云原生技术中台生态

作者:刘裕惺 CNStack 相关阅读: CNStack 多集群服务:基于OCM 打造完善的集群管理能力 CNStack 虚拟化服务:实现虚拟机和容器资源的共池管理 CNStack 云边协同平台:实现原生边缘竟能如此简单 01 前言 CNStack 2.0…...

#PythonPytorch 1.如何入门深度学习模型

我之前也写过一篇关于Keras的深度学习入门blog,#Python&Keras 1.如何从无到有在自己的数据集上实现深度学习模型(入门),里面也有介绍了一下一点点机器学习的概念和理解深度学习的输入,如果对这方面有疑惑的朋友可以…...

[API]节点流和处理流字节流和字符流(七)

java将流分为节点流和处理流两类: 节点流:也称为低级流,是真实连接程序和另一端的"管道",负责实际读写数据的流,读写一定是建立在节点流的基础之上进行的。节点流好比家里的"自来水管"&#xff0c…...

开心档之C++ 模板

C 模板 目录 C 模板 函数模板 实例 类模板 实例 模板是泛型编程的基础,泛型编程即以一种独立于任何特定类型的方式编写代码。 模板是创建泛型类或函数的蓝图或公式。库容器,比如迭代器和算法,都是泛型编程的例子,它们都使用…...

拥抱还是革命,ChatGPT时代 AI专家给出15条科研生存之道

来源:专知 微信号:Quan_Zhuanzhi 你是学术机构的人工智能研究员吗?你是否担心自己无法应对当前人工智能的发展步伐?您是否觉得您没有(或非常有限)访问人工智能研究突破所需的计算和人力资源?你并不孤单; 我们有同样的感觉。越来越多的人工智能学者不…...

python算法中的数学算法(详解下)

目录 一. 学习目标: 二. 学习内容: Ⅰ. 数值优化 ①、均值 ②、方差 ③、协方差...

Docker Desktop使用PostgreSql配合PGAdmin的使用

在看此教程之前,请先下载安装Docker Desktop 安装成功可以查看版本 然后拉取postgresql的镜像:docker pull postgres:14.2 版本可以网上找一个版本,我的不是最新的 发现会报一个问题 no matching manifest for windows/amd64 10.0.19045 i…...

大佬入局AI,职场人有新机会了?

卸任搜狗CEO一年半后,王小川宣布在AI大模型领域创业,与前搜狗COO茹立云联合成立人工智能公司百川智能,打造中国版的OpenAI,并对媒体表示:“追上ChatGPT水平,我觉得今年内可能就能够实现,但对于G…...

《攻防演练》在没有基础安全能力的情况下如何做好蓝队防守

目的: 1、净化企业或机构的网络环境、强化网络安全意识; 2、防攻击、防破坏、防泄密、防重大网络安全故障; 3、检验企业关键基础设施的安全防护能力; 4、提升关键基础设施的网络安全防范能力和水平。 现状: 那么问…...

SLAM 十四讲(第一版)疑难排查

SLAM 十四讲(第一版)疑难排查 记录《SLAM 十四讲(第一版)》学习过程遇到的疑难杂症和排查结果,包括数学上的和编程环境上的,欢迎补充。 0. 使用软件环境 WSL:windows 下的 linux 子系统&…...

JavaScript的基础语法学习

文章目录 一、JavaScript let 和 const二、JavaScript JSON三、javascript:void(0) 含义四、JavaScript 异步编程总结 一、JavaScript let 和 const let 声明的变量只在 let 命令所在的代码块内有效。 const 声明一个只读的常量,一旦声明,常量的值就不…...

大语言模型Prompt工程之使用GPT4生成图数据库Cypher

大语言模型Prompt工程之使用GPT4生成图数据库Cypher 大语言模型Prompt工程之使用GPT4生成图数据库Cypher Here’s the table of contents: 大语言模型Prompt工程之使用GPT4生成图数据库Cypher 使用GPT4测试了生成Cypher的能力,没想到大型语言模型(LLM,La…...

ChatGPT已死?AutoGPT太强?

今天聊聊 AutoGPT。 OpenAI 的 Andrej Karpathy 都大力宣传,认为 AutoGPT 是 prompt 工程的下一个前沿。 近日,AI 界貌似出现了一种新的趋势:自主人工智能。 这不是空穴来风,最近一个名为 AutoGPT 的研究开始走进大众视野。特斯拉…...

Java基础总结(二)

文章目录 一、ObjectObject中的成员方法(11个)toStringequalsclone 二、Objects三、BigInteger和BigDecimaBigIntegerBigDecima 四、正则表达式五、DateJDK7前时间相关类SimpleDateFormat类Calendar类 JDK8新增时间相关类 六、包装类异常 一、Object 没…...

大数据-玩转数据-oracle创建dblink及应用

一、创建DBLINK的应用场景 oracle在进行跨库访问时,可以通过创建dblink实现。 二、创建DBLINK应用场景 在tnsnames.ora中配置两个数据库别名:orcl(用户名:wangyong 密码:1988)、orcl2(用户名:wangyong 密码&#xf…...

冯诺依曼体系结构

冯诺依曼体系结构 目录 冯诺依曼体系结构引入1、冯诺依曼体系结构1.1 内存1.2 操作系统预加载 2、操作系统2.1 理解管理2.2 系统调用接口2.3 操作系统四大基本功能 引入 冯诺依曼体系结构(von Neumann architecture)是现代计算机体系结构的基础&#xf…...

Axios请求(对ajax的二次封装)——Axios API、Axios实例、请求配置、Axios响应结构

axios起步——介绍和使用基本用例post请求 场景复现核心干货axios APIaxios(config)axios(url[,config])请求方式别名 axios实例创建一个axios实例axios.create([config])实例方法 axios请求配置axios响应结构 场景复现 最近学习与前端相关的小程序时,接触了异步请…...

Scrum of Scrums规模化敏捷开发管理全流程

Scrum of Scrums是轻量化的规模化敏捷管理模式,Leangoo领歌可以完美支持Scrum of Scrums多团队敏捷管理。 Scrum of Scrums的场景 Scrum of Scrums是指多个敏捷团队共同开发一个大型产品、项目或解决方案。Leangoo提供了多团队场景下的产品路线图规划、需求管理、…...

BP神经网络原来就是曲线拟合

本站原创文章,转载请说明来自《老饼讲解-BP神经网络》bp.bbbdata.com 在初学BP神经网络的时候,总是非常抽象和难理解 但是,学久了会发现,BP神经网络原来就是曲线拟合! 一下子才具体、深入的理解到BP神经网络是什么 本文…...

Oracle数据库查看与修改内存配置

Oracle数据库查看与修改内存配置 Oracle内存管理模式查看Oracle内存分配修改Oracle内存分配 Oracle内存管理模式 Oracle数据库的内存管理模式从自动管理化程度由高到低依次可以分为: 自动内存管理:完全由Oracle自动管理内存分配。DBA只需设置MEMORY_TA…...

Jenkins自动拉取SVN源代码构建打包vue前端项目

目录 1.功能需求 2.安装插件 2.1 安装NodeJS插件 2.2 安装SVN插件 3.配置环境 3.1 NodeJS环境 4.新建任务配置部署信息 4.1 源代码管理 4.2 构建触发器 4.3 构建环境 4.4 构建步骤 5.构建项目 5.1 点击查看控制台日志 1.功能需求 使用Jenkins从SVN上拉取Vue项…...

MySQL表的操作

文章目录: 创建表查看表结构修改表删除表 在使用 MySQL 数据库时,操作表是最基本和最重要的任务之一。表是 MySQL 数据库的核心对象,用于存储数据,并且可以通过 SQL 语句进行查询、插入、更新和删除等操作。因此,熟练掌…...

MySQL索引数据结构入门

之前松哥写过一个 MySQL 系列,但是当时是基于 MySQL5.7 的,最近有空在看 MySQL8 的文档,发现和 MySQL5.7 相比还是有不少变化,同时 MySQL 又是小伙伴们在面试时一个非常重要的知识点,因此松哥打算最近再抽空和小伙伴们…...

《低代码PaaS驱动集团企业数字化创新白皮书》-低代码PaaS应对行业集团企业数字化应用的需求(制造)

低代码PaaS应对行业集团企业数字化应用的需求 制造 制造业是我国重要的经济支柱之一,随着经济结构的调整,产业链的转移,劳动密集型制造业的利润已大不如前。在数字经济的大环境下,诸多制造业企业选择数字化转型,通过…...

深度学习实战26-(Pytorch)搭建TextCNN实现多标签文本分类的任务

大家好,我是微学AI,今天给大家介绍一下深度学习实战26-(Pytorch)搭建TextCNN实现多标签文本分类的任务,TextCNN是一种用于文本分类的深度学习模型,它基于卷积神经网络(Convolutional Neural Networks, CNN)实现。TextCNN的主要思想…...

还在精神内耗?还在焦虑?可以看看这个

作为一个即将毕业的本科生,总是会不由自主的焦虑。因为不考研,所以显得和同学们格格不入,每天都在进行精神内耗,但是我不经意间看到了一个东西-《邓宁克鲁格效应》 上述的四个阶段刻画出了一条典型的“大师养成之路”。但大师毕竟…...

Event Camera (事件相机)

1.传统相机的缺点 1.随着计算机视觉领域的不断发展,目标检测的算法也越来越多样化,特别是近些年深度学习在计算机视觉领域的进步,已经产生了很多优秀的目标检测方法,这些基于帧的方法对于图片的质量有一定的要求,比如合…...

藏经阁(七)有源蜂鸣器和无源蜂鸣器 解析

文章目录 特征区别场景选型实战应用 特征 有源蜂鸣器特征: 又被称为直流蜂鸣器包含了一个多谐振荡器只要额定直流电压可以在两端发出声音具有驱动控制简单价格略高 无源蜂鸣器特征: 又被称为交流蜂鸣器内部没有振荡器需要在两端施加特定频率的方波电…...

配置FTP/TFTP协议的ASPF

在多通道协议和NAT的应用中,ASPF是重要的辅助功能。通过配置ASPF功能,实现内网正常对外提供FTP和TFTP服务,同时还可避免内网用户在访问外网Web服务器时下载危险控件。 组网需求 如图1所示,FW部署在某公司的出口,公司提…...

泛型基本说明

使用传统方法的问题分析 不能对加入到集合ArrayList中的数据类型进行约束(不安全)遍历的时候,需要进行类型转换,如果集合中的数据量较大,对效率有影响。泛型的好处 编译时,检查添加元素的类型,提…...