云原生分布式操作系统营造法式-云平台提供商视角

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 云原生分布式操作系统营造法式-云平台提供商视角

编者按:《100页ppt讲清楚云原生 》一文作者投稿连载,待有缘人读完。上次找的ppt不少朋友可能不志在交流,志在使用素材内部汇报等。欢迎点赞在看转发三连,幸甚!


作者介绍:

高磊(曾用花名世忠、胤禛) ,16年工作经验,原阿里巴巴、华为架构师,专注于云原生领域的产品规划设计以及技术架构。


直接上图,下图是云原生分布式操作系统的数据模型,它是从抽象层面来表达控制逻辑的对象图。


image.png


我们都清楚K8S已经是事实的容器服务编排标准,它采用一种抽象层面的方式来纳管底层硬件资源并同时向上提供“应用”生命周期管理支持。比如K8S使用Pod对象来表达一个“服务实体”,并对应于一种Deployment的部署逻辑(控制器),并且它同时对应于一个或者多个控制器,主控制器监控API server中对象的变化并采取相应的动作。这是K8S这种复杂系统里面的最原子机制,基于这个机制实现所有自动化操作。后来又出现了Operator,使得基于CRD模型以及具体场景来拓展K8S就非常容易了。
所以上图实际上是和Pod这种对象一样的抽象,它的载体都是数据(存储在ETCD中),运行实体都是控制器,而控制器会具体调用外部模块或者系统完成具体的调整动作,比如Kubelet、或者其他外部服务(比如SaltStack)。如果我们能一开始建立正确的模型,也就是代表着有了正确的资源、应用治理的逻辑设计,对于云原生操作系统而言就成功了一半。最后基于这个模型去设计物理组件的架构就非常有章可循了。

  • Region和AZone
  • 云计算资源分别在全球多个数据中心。Region代表托管的地理位置。Region内网络是高带宽和低延迟的。应用可以对等部署在多个Region中,实现异地多活的能力。
  • AZone,即可用区,AZone之间物理隔离,具备独立的电源、网络等。用以提高Region内部的故障隔离性。
  • Rack和ComputeAsset
  • Rack,即机柜。其中存放的每台设备叫做ComputeAsset。一般Rack存放的是同一类型和同一型号的设备。ComputeAsset是个抽象概念,可能是计算机、也可能是路由器等设备。
  • SKU和Flavor
  • SKU是服务器硬件配置的定义,比如CPU、内存、磁盘大小等。Flavor从使用者角度详细定义了服务器应该满足的资源规范。一种SKU可以支持多种Flavor。
  • Cluster
  • Cluster代表一个K8S集群。每个AZone可以有多个集群。它定义了一个集群的AZone、NetworkZone、Master和Minion节点个数、使用的OsImage和Flavor等。
  • Cloud
  • Cloud代表一个类似联邦的统一控制层,它可以注册多个Cluster,它代表一种先进的方向,就是多集群管理,并可以拓展成多云管理模式(多云,就是底层资源来自于不同的供应商,云中立策略有利于优化成本和解除云供应商绑定问题)。
  • ComputeNode和NodePool
  • ComputeNode对应于运行了操作系统的物理机或者虚拟机。每一个ComputeNode都是K8S的一个计算节点。当新的ComputeNode对象被创建的时候,集群管理平面会根据其指定的Flavor选择合适的ComputeAsset安装和运行指定的操作系统。通过Tag来区分ComputeNode(比如,role=master或者role=minion)。
  • NodePool,定义了一组同类型ComputeNode的集合。NodePool定义了ComputeNode的副本数量和模版。NodePool控制器要负责N个ComputeNode始终保持健康,并通过重新创建或者修复有故障的计算节点来保证集群资源规模。NodePool有利于实现更高级的抽象,比如自动化伸缩组,可以基于实时资源利用率自动伸缩计算机节点池。
  • Unit
  • Unit就是单元化,所谓单元化就是将一个调用完全封闭在一个服务领域中,比如下单就只能落入一个下单这个单元中,防止多服务跨域调用的开销,导致整体性能不佳。另外利用单元化可以实现特殊的扩容操作,就是一个单元包含着一组为了完成下单的不同单元业务服务,它们一起扩容(比如向公有云弹出或者弹入),使得资源利用更加充分。另外一个单元故障,并不会影响同一个单元的其他实例单元集群。Unit是垂直上的逻辑切分,而NodePool是水平的切分。
  • OSImage
  • OSImage代表操作系统的家族、内核版本、发型说明以及下载地址。当创建集群的节点时,指定计算设备的操作系统,那么此ComputeAsset被外部运维系统安装好操作系统后就转换成ComputeNode,当要升级操作系统时,只需要在ComputeNode升级版本信息即可。控制器会调用外部运维系统进行升级操作的。


  • K8SImage、CNIImage等
  • 类似于OSImage,在控制器命令外部运维系统初始化节点后(比如安装和运行操作系统等),其他运维控制器发现了ComputeNode对象状态的改变,就执行在此节点上安装K8S组件或者指定的CNI插件等操作。此时请注意,这是K8S的基础机制,一个控制器完成一个动作后回写对象状态,会被其他类型的控制器Watch到,然后形成一种连锁反应,这是K8S自动化的奥秘所在。


  • OpsMaster和OpsMinion
  • 我们并不假定计算节点的运维一定是SaltStack,即便是Ansible也可以。不过我们把这种基于C/S架构的外部运维系统抽象成OpsMaster和OpsMinion。我们通过抽象它们来监控它们的运行状态。


  • Node
  • 这是K8S标准的对象,只不过我们通过ComputeNode的控制器将其转换成了K8S的Node。那么你会发现Node似乎是底层资源和K8S之间的纽带。实际是我们需要干掉原生的Node控制器,而采用ComputeNode的控制器代替之,但是对于K8S以及它的用户没有任何差异性感知。


  • App
  • 由多个Service构成,它代表了其拓扑和配置,通过服务市场或者镜像仓库可以进行集群封装式分发,提高自动化程度,降低交付成本。


以上,我们通过解释各种对象的定义含义,也同时解释了它们的核心动态关系。那么为什么这么设计呢?主要是我们在落地云原生操作系统时遇到以下的挑战


K8S对OS以及OS级别依赖的管理毫无能力,那么落地时就无法大规模部署


  • 节点手工初始化,效率太差并且容易出错。OS的升级是个可怕的噩梦。K8S本身没有运维体系支撑。K8S组件的升级,处理不好就导致服务宕机。

  • 网络环境差异,部署繁琐并容易出错不同集群之间可能是不同的网络环境,比如有些支持GBP、有些支持VXLan等,集群之间存在打通的问题,还有就是入口与出口流量如何打通的问题。

  • 扩容集群时无法自动化同步网络组件和配置,都需要手工操作,非常繁琐并容易出错,传统ITOM系统和新型的云原生操作系统是两个独立的运维领域,需要两个团队来管理,并且之间很难根据实际业务量联动,完全靠人肉沟通和人肉资源容量评估来实施,时效慢并且成本非常高。



所以,思路就是在抽象层面上将从底层ITOM到K8S,以及K8S以上等的实体技术组件通过K8S资源对象的形式上浮到可度量、可观察、可控制的一体化机制上来,幸好K8S支持Resource Object这种抽象形式,也正好有可以自定义控制器的CRD这种拓展形式存在,我们变相的把技术实体全部变成RO形态并顺带暴露成声明行API。带来的就是我们可以从APP级别的资源负载需求通过一系列控制器的计算和转换形成了以下机制:
在集群规模不变的情况下,根据APP资源需求自动扩容或者收缩Pod,这是标准化K8S HPA控制器干的事情。


在集群中容器规模突破集群容量保护阀值时,有Cluster等控制器下发资源Offer到NodePool对象上,NodePool对象通过Flavor匹配对应的ComputeAsset并自动安装操作系统和K8S kublet等,自动加入加入集群。而无需关心对底层IaaS如何扩容的问题。并且更加精准,成本更加可视化。


NodePool和Unit对应的控制器可以保证通过间接激发OpsMinion控制器来实现扩容时自动下载和安装CNI插件(比如Calico、Cilium等)、CRI插件(Kata、Docker等等)、CSI(ceph、NFS等),并同时同步相关配置,使得集群网络、计算、存储配置保持一致。在NodePool资源隔离情况下,通过更高级控制器协调网络配置,达到混合集群之间的网络打通。比如线上集群加入线下,或者线下集群接入线上,或者自研集群接入标准化集群,或者边缘计算集群接入线上集群等等。


对于K8S上层平台,比如PaaS,一切都没有变化。照样可以集成istio、抽象应用治理能力、一体化交付等等。


我们根据以上的抽象层面的资源对象抽象,实际上已经设计了一个高度自动化的云原生操作系统一体机。而我们仅仅需要通过Operator(CRD)来完成这些拓展,对K8S本身没有侵入,保持独立性的同时(也就是说可以跟着K8S社区来做升级)满足通用化云原生底座的需求。


image.png


我们已经知道以上如何把自动化进行到底的,比如上图【基于抽象对象模型的各类控制器】就是我们的“大脑”,它把从多云、集群、资源、网络、存储等全部自动化管理起来了。剩下的就是围绕这个模型的“物理化”建设了,“精神文明和物质文明都要硬”!在接下来的第三部分文章中我们将讲述:


  1. CICD Worker架构,被集成策略的CI和CD


  1. 分区日志汇总机制,超大规模日志采集和存储的秘诀。


  1. 各类基于上述抽象模型对象的控制器,它们是如何完全自动化的完成复杂动作的?而PaaS层只是部署一个应用镜像这么简单。(自动化一体机,或者叫做自驾驶治理机制)


  1. 应用状态控制器,通过以实际应用流量预测资源来实际激发一系列自动化操作。


  1. 网络打通细节,入网、线上线下打通、边缘打通等如何实现。(包治各种网络疑难杂症)


  1. 外部ITOM自动化联动


  1. 集群打包交付,一种完全自动化的交付体验。


  1. 大规模镜像仓库实践,稳定性、吞吐量以及性能保证,尤其是安全策略对资源管理负面影响的解决方案(基于时效的自动白名单)。


未完待续

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
1月前
|
Cloud Native 持续交付 云计算
云端新纪元:探索云原生技术的奥秘在当今数字化时代,云计算已成为推动企业创新和增长的关键动力。随着云平台的不断成熟,云原生技术应运而生,以其独特的优势引领着一场新的技术革命。本文将深入探讨云原生的核心概念、主要特点以及它如何改变现代软件开发和部署的方式,为您揭开云原生这一神秘面纱。
云原生是一种构建和运行应用程序的方法,充分利用了云平台的弹性、分布式本质以及声明式基础设施。本文将解析云原生的十二要素,微服务架构的优势,以及容器化、持续集成与持续部署(CI/CD)等核心技术的实践应用。通过深入浅出的方式,让读者理解云原生不仅是一种技术,更是一种文化和方法论,它正在重塑软件开发流程,提高资源利用率和应用系统的可扩展性与容错性。
|
2月前
|
人工智能 Kubernetes Cloud Native
阿里云容器服务,智算时代云原生操作系统
今年是Kubernetes十周年,在这10年间。我们已经看到其成长为云原生操作系统,向下高效调度多种算力资源,屏蔽基础设施差异,向上提供统一编程接口,支持多样化工作负载。阿里云容器服务产品已经覆盖了从公共云、边缘云、到本地数据中心的各个场景。让所有需要云能力的地方,都有统一的容器基础设施。
阿里云容器服务,智算时代云原生操作系统
|
2月前
|
人工智能 Kubernetes Cloud Native
深度对话 解锁阿里云分布式云原生技术落地新姿势
深度对话 解锁阿里云分布式云原生技术落地新姿势
深度对话 解锁阿里云分布式云原生技术落地新姿势
|
3月前
|
Kubernetes Cloud Native 安全
探索操作系统的心脏:内核与用户空间的交互云原生之旅:Kubernetes 的弹性魔法
【8月更文挑战第27天】在数字世界的海洋中,操作系统是那艘承载着无数数据与应用的巨轮。本文将带你潜入这艘巨轮的机舱——内核,揭示它如何与甲板上的用户空间互动。通过浅显的语言和生动的比喻,我们一同解锁操作系统的秘密,从内核的设计哲学到用户空间的应用实现,再到二者间的数据传递机制,逐步揭开这一神秘面纱。让我们开始这场深入浅出的技术之旅,一探操作系统背后的奥秘。
|
3月前
|
运维 安全 Cloud Native
核心系统转型问题之保障云原生分布式转型中的基础设施和应用层面如何解决
核心系统转型问题之保障云原生分布式转型中的基础设施和应用层面如何解决
|
3月前
|
监控 Cloud Native 容灾
核心系统转型问题之API网关在云原生分布式核心系统中的功能如何解决
核心系统转型问题之API网关在云原生分布式核心系统中的功能如何解决
|
3月前
|
运维 Cloud Native 安全
核心系统转型问题之确保核心系统云原生分布式转型的安全可靠性如何解决
核心系统转型问题之确保核心系统云原生分布式转型的安全可靠性如何解决
|
3月前
|
弹性计算 Cloud Native Windows
核心系统转型问题之核心系统需要转型到云原生分布式架构的原因如何解决
核心系统转型问题之核心系统需要转型到云原生分布式架构的原因如何解决
|
3月前
|
机器学习/深度学习 分布式计算 Cloud Native
云原生架构下的高性能计算解决方案:利用分布式计算资源加速机器学习训练
【8月更文第19天】随着大数据和人工智能技术的发展,机器学习模型的训练数据量和复杂度都在迅速增长。传统的单机训练方式已经无法满足日益增长的计算需求。云原生架构为高性能计算提供了新的可能性,通过利用分布式计算资源,可以在短时间内完成大规模数据集的训练任务。本文将探讨如何在云原生环境下搭建高性能计算平台,并展示如何使用 PyTorch 和 TensorFlow 这样的流行框架进行分布式训练。
128 2
|
3月前
|
Cloud Native 云计算 微服务
云原生时代:企业分布式应用架构的惊人蜕变,从SOA到微服务的大逃亡!
【8月更文挑战第8天】在云计算与容器技术推动下,企业分布式应用架构正经历从SOA到微服务再到云原生的深刻变革。SOA强调服务重用与组合,通过标准化接口实现服务解耦;微服务以细粒度划分服务,增强系统灵活性;云原生架构借助容器化与自动化技术简化部署与管理。每一步演进都为企业带来新的技术挑战与机遇。
123 6