草庐IT

一键构建分布式云原生平台

哪 吒 2023-11-09 原文


目录

专栏导读

🏆作者简介:哪吒,CSDN2022博客之星Top1、CSDN2021博客之星Top2、多届新星计划导师✌、博客专家💪 ,专注Java硬核干货分享,立志做到Java赛道全网Top N。

🏆本文收录于Java基础教程系列(进阶篇),本专栏是针对大学生、初级Java工程师精心打造,针对Java生态,逐个击破,不断学习,打通Java技术栈

🏆订阅后,可以阅读Java基础教程系列(进阶篇)中全部文章包含Java基础、Java高并发、Spring、MySQL等Java进阶技术栈

🏆还可以订阅其姐妹篇Java基础教程系列,包含全部Java基础知识点、Java8新特性、Java集合、Java多线程、Java代码实例理论结合实战,实现Java的轻松学习

🏆哪吒多年工作总结:Java学习路线总结,搬砖工逆袭Java架构师

🏆面试福音:10万字208道Java经典面试题总结(附答案)

大家好,我是哪吒。

一、分布式云原生平台

1、应用无所不能

包含Flink、Spark、mxnet、Pytorch、TIkv等。

2、运行无处不在

公有云、私有云、边缘站点、边缘节点等。

3、服务千行白业

金融、制造、互联网、交通、物流、能源

二、分布式云原生平台关键要素

分布式云是多云、混合云、私云的简称,云原生平台是我们多次在各种会议上反复提到的,云原生基础技术是以K8S、容器、服务网格为代表的,这是CNCF基金会定义的概念。

1、统一应用管理

  • 融合调度
  • 多云容器管理
  • 云边端一体

统一的应用管理我们看到CNCF很多项目,比如说Ago,F02:10:57…英文项目,一般是管理单云、单集群的应用。多云、多集群的应用管理,现在业界比较缺少开箱即用的方案,去年华为云也开源了KAWADA…的项目,李老师也讲了他们也用KAMADA管理。

2、统一流量自治

  • 互联网络
  • 服务网格治理

统一流量治理在业界主要是以服务网格为代表的技术,在CNCF基金会,现在主要有Istio,Istio正在捐基金会的过程中,由于历史原因,之前号称不捐,今年发起捐赠流程。

3、统一数据管理

  • 数据加速
  • 数据迁移

统一的数据管理,跨云、跨边缘的数据管理,这一块是比较缺乏的。

4、统一运维

  • 统一监控
  • 统一调用链
  • 统一日志

统一的运维监控调用日志,这一块有很多不少的成熟技术方案,比如说监控领域的实施标准普罗米修斯,解决多云多集群的监控。调用链现在也有一些,对多云的支持还不是很完善,统一的日志有以前的ERK,现在有一些(英文)02:12:45…开源了轻量级的日志数据。

三、多云多集群已经广泛应用

介绍一下大云多集群的使用调查,根据最新的(英文)一家调研机构调查的结果Flexera,看一下右边,现在有80%的企业采用混合云的方案,混合云完美的把原来企业自有的基础设施利用起来,7%的用户使用了多公有云,2%的用户采用了多私有云的方案,混合云我们看到是主流的方案。

左边的图我们看到整个多云已经很多了,89%,已经包含了多云、多公有云、多私有云和混合云,纯粹采用单云的企业比较少,大家为了高可用经常提的是两地多中心、两地三中心,大家用多云还是比较好的。

四、分布式云的优势:

1、避免厂商锁定

如果我只把服务部署在一家厂商里,这时候厂商的定价对我的限制很大,如果这个厂商有些技术是比较私有化的,比如说没有符合CNCF基金会做的一致性认证,用厂商私有的K8S解决方案,可能会面临被厂商锁定的风险。厂商锁定之后,作为客户来讲我的话语权就没有那么重了,我可能会受厂商控制,成本也可能居高不下,为了这方面我可能会更喜欢用多云的方案。

2、满足合规化要求

在合规性要求上面我们讲单云上只考虑首先采用单云安全的技术框架来解决合规性的问题,可能这种技术放在其他的环境中,比如说在私有云场景下,或者在其他云上面就会出现一些安全的漏洞。比如说是多云场景下的话,我部署的时候安全性就足够考虑,合规性就得到了完美充分的考虑,系统上线的风险就会大大降低。

3、增强系统韧性

系统的韧性是我们在稳定性方面很重要的要求。服务首先看稳定运行,要提供02:16:18…英文性能高都没有用。

4、提高灵活性和可扩展性

我们的服务在应对一些突发流量的时候,我们能够灵活的扩展。当我的一个区域,比如说因为运营商的网络挖断了,这是时有发生的,我的流量能够自动切换,我的应用能够自动部署到另一个区域,另一个集群,并且我的流量能够自动弹过去,这是分布式运营的优势。

分布式云原生是云原生以应用为中心发展的必然方向,是企业泛在业务的最终形态。

五、云原生的现状

讲一下什么是KAMADA,这是分布式云原生,背景是这样的,云原生以应用为中心发展的必然方向是企业的泛在形式,原来我们的云原生都是典型的,每个边缘是割裂的单独集群形式存在的,这时候我们会面临这么多的问题。首先是体验分析,我们管理需要单集群的管理,没有统一的管理入口。算力是由单独的,每个云的计算资源受限,比如说我们在华北每个机房里部署集群,可能这个集群的资源在公有云上也是有限制的,不是无限扩展的。当这个单独的资源面临到没有资源的情况下,机房已经完全占完了,这时候我们再扩容是扩不了的,算力是受限制的。

然后是流量,流量是我们在业务的体现形式,当我们的流量需要根据不同区域,尤其是南北向的流量,不同区域需要网关一层感知底层不同集群的负载数量的时候,感知实际能力进行切分。在原来的云原生平台,单云的时候是很难做到的。

我们现在提出的一个概念叫分布式云原生,分布式云原生是将中心云、专属云、边缘运、本地自己IDC统一管理起来,做到算力、数据和流量的统一管理,这种方案的好处是比较显而易见的,刚才讲的四点体验,应用算力、应用流量、应用数据能够得到充分的发挥。

六、Karmada一键管理多集群

1、K8s原生API兼容

  • K8s原生API + 扩展策略
  • 零改造,开箱即用

2、丰富的多集群调度

  • 支持集群亲和性,多维度HA等算法
  • 支持静态、动态权重拆分引用

3、集群资源空间隔离

不同集群资源分别存放,隔离权限

4、多种模式集群同步

  • 支持中心管理和分布式管理
  • 结合KubeEdge实现边缘集群管理

管理多集群的架构,karmada通过多种方式

  1. 主动push的方式,另外是主动获取我们要部署的worklod资源对象,第三种类型是管理边缘集群的情况。边缘集群助理KubeEdge里面的工作负载,Service,策略,RBAC等等策略都是完全兼容的,我们不需要进行任何改造。
  2. 调度的能力现在还是比较丰富的,支持集群的亲和性,支持动态权重的拆分,这个主要是针对workload那种。
  3. 集群资源的隔离,可以对不同的集群资源分别存放,隔离一些租户可以通过这个做到。

七、Kurator:打造统一的分布式云原生基础设施

  • 业界收个分布式云原生开源套件,开箱即用
  • 开源开放的分布式云原生平台,助力企业业务跨云跨边、分布式化升级
  • 整合Karmada、KubeEdge、Volcano、Kubernetes、Istio、Prometheus等业界主流开源技术栈
  • 提供多云、多集群统一编排,统一调度,统一流量治理,边云协同,统一监控运维等核心能力。

八、KubeEdge:一键构建云原生边缘计算平台

  • 边缘侧提供原生的Kubernetes API。
  • 边云一体资源调度和流量协同
  • 边缘离线自治
  • 极致轻量
  • 支持海量边缘设备管理

九、Volcana:一键构造云原生批量计算平台

  • 丰富的高级调度能力
  • 主流计算框架支持
  • 增强作业管理(应用感知的作业生命周期管理、支持队列概念)
  • 异构设备支持,异构设备调度,包含x86、ARM、GPU等

一键支持构建云原生的批量计算,这是通过部署Volcano实现,相对于K8S提供了更加高级的调度能力,比如说在大数据、批量计算等领域,我们w需要(英文)分级调度,这种更适合大数据离线计算这种,从这里看出支持的主流计算框架包括离线的作业计算和大数据计算。第三个是通过V可以增强作业的管理,V内部是可以感知应用生命周期的spark、Flink、TensorFlow、PyTorch、MindSpore、PaddlePaddl,
可以异构设备,包括CPU、GPU,又包括X86、ARM、GPU、昇腾资源调度。

十、istio:一键构建分布式流量统一管理

  • 通过Sidecar透明代理工作负载进出口流量
  • 统一管理分布式云平台流量的路由、负载均衡、故障转移等
  • 统一策略管理,宝藏跨云、跨集群的流量安全

也支持通过Istio一键式分布流量管理,Istio支持多集群流量治理,但是安装Istio等等还是比较麻烦的,因为Istio多集群有很多模式,这里举了一个例子,多集群的prima—remotew,其中一个做主集群,在remote集群安装Istio的组件,比如说在非扁平网络模式下需要安装东西向的gateway,安装很复杂,有很多Istio的模式,Istio非常复杂。

这种方式的好处是为了管理分布式流量,通过sidecar…利用Istio东西向跨集群的能力,现在常常讲的南北向流量进入云上面的时候,我们的流量是从LB那一层走到每个集群里,流量往这个集群发30%还是50%,往那个流量发50%还是70%,其实只是解决了南北向流量的问题。实际上在同一个应用往往会部署在跨集群部署,跨云部署,有时候会涉及到A服务和B服务,首先我们更期望A服务是在同一个集群里调用B服务,但是有时候当Service B在集群里故障了之后,能够自动切到另外一个集群吗?南北向的负载均衡LB已经无能为力了,我们只能用Istio切换到另外一个集群,实现故障转移。

十一、Prometheus:一键构建分布式云监控

  • Prometheus定期收集Metrics,并可以提供告警
  • Metrics采集可以来源于Kubernetes集群本身,也可以来自应用、节点
  • 通过级联,可以提高大规模处理能力,应对数十个集群的监控
  • 级联拓扑是一个树状结构,顶层的Prometheus负责查询和汇聚所有下面集群的指标

再看一下prometheus,一键构建分布式云监控,kurator把整个prometheus来自于节点和应用,另外p支持级联,类似于树状结构负责暴露分布式运营平台所有下面的集群指标。
这里我们有时候在分布式云,不同的集群里会涉及到我们打通两个集群网络,打通网络要不通过VPN的方式,要不通过公有云厂商专线的能力,提供专线的服务,有时候成本很高。如果我们想用开源的方法怎么做呢?可以通过submariner,帮助我们打通打集群的容器网络,通过安装submariner我们可以把多集群pod和pod网络打通,打通成扁平的网络,这时候pod和pod通过IP可以直接访问。如果了解K8S集群的话,没有这个东西的话,跨集群的pod网络是不通的,因为pod IP地址是私有的,外部不可见。


Java学习路线总结,搬砖工逆袭Java架构师

10万字208道Java经典面试题总结(附答案)

Java基础教程系列

Java基础教程系列(进阶篇)

有关一键构建分布式云原生平台的更多相关文章

  1. ruby - 分布式事务和队列,ruby,erlang,scala - 2

    我有一个涉及多台机器、消息队列和事务的问题。因此,例如用户点击网页,点击将消息发送到另一台机器,该机器将付款添加到用户的帐户。每秒可能有数千次点击。事务的所有方面都应该是容错的。我以前从未遇到过这样的事情,但一些阅读表明这是一个众所周知的问题。所以我的问题。我假设安全的方法是使用两阶段提交,但协议(protocol)是阻塞的,所以我不会获得所需的性能,我是否正确?我通常写Ruby,但似乎Redis之类的数据库和Rescue、RabbitMQ等消息队列系统对我的帮助不大——即使我实现某种两阶段提交,如果Redis崩溃,数据也会丢失,因为它本质上只是内存。所有这些让我开始关注erlang和

  2. ruby - 在 Ruby 中构建长字符串的简洁方法 - 2

    在编写Ruby(客户端脚本)时,我看到了三种构建更长字符串的方法,包括行尾,所有这些对我来说“闻起来”有点难看。有没有更干净、更好的方法?变量递增。ifrender_quote?quote="NowthatthereistheTec-9,acrappyspraygunfromSouthMiami."quote+="ThisgunisadvertisedasthemostpopularguninAmericancrime.Doyoubelievethatshit?"quote+="Itactuallysaysthatinthelittlebookthatcomeswithit:themo

  3. ruby - 使用 rbenv 和 ruby​​-build 构建 ruby​​ 失败,出现 undefined symbol : SSLv2_method - 2

    我正在尝试在配备ARMv7处理器的SynologyDS215j上安装ruby​​2.2.4或2.3.0。我用了optware-ng安装gcc、make、openssl、openssl-dev和zlib。我根据README中的说明安装了rbenv(版本1.0.0-19-g29b4da7)和ruby​​-build插件。.这些是随optware-ng安装的软件包及其版本binutils-2.25.1-1gcc-5.3.0-6gconv-modules-2.21-3glibc-opt-2.21-4libc-dev-2.21-1libgmp-6.0.0a-1libmpc-1.0.2-1libm

  4. ruby-on-rails - 如何构建复杂的 Rails 系统 - 2

    关闭。这个问题需要更多focused.它目前不接受答案。想改进这个问题吗?更新问题,使其只关注一个问题editingthispost.关闭8年前。Improvethisquestion我们有以下(以及更多)系统,我们将数据从一个应用推送/拉取到另一个:托管CRM(InsideSales.com)Asterisk电话系统(内部)横幅广告系统(openx,我们托管)潜在客户生成系统(自行开发)电子商务商店(spree,我们托管)工作板(本土)一些工作网站抓取+入站工作提要电子邮件传送系统(如Mailchimp,自主开发)事件管理系统(如eventbrite,自主开发)仪表板系统(大量图表和

  5. ruby-on-rails -/usr/local/lib/libz.1.dylib,文件是为 i386 构建的,它不是被链接的体系结构 (x86_64) - 2

    在我的mac上安装几个东西时遇到这个问题,我认为这个问题来自将我的豹子升级到雪豹。我认为这个问题也与macports有关。/usr/local/lib/libz.1.dylib,filewasbuiltfori386whichisnotthearchitecturebeinglinked(x86_64)有什么想法吗?更新更具体地说,这发生在安装nokogirigem时日志看起来像:xslt_stylesheet.c:127:warning:passingargument1of‘Nokogiri_wrap_xml_document’withdifferentwidthduetoproto

  6. 【云原生】SpringCloud-Spring Boot Starter使用测试 - 2

    目录SpringBootStarter是什么?以前传统的做法使用SpringBootStarter之后starter的理念:starter的实现: 创建SpringBootStarter步骤在idea新建一个starter项目、直接执行下一步即可生成项目。 在xml中加入如下配置文件:创建proterties类来保存配置信息创建业务类:创建AutoConfiguration测试如下:SpringBootStarter是什么? SpringBootStarter是在SpringBoot组件中被提出来的一种概念、简化了很多烦琐的配置、通过引入各种SpringBootStarter包可以快速搭建出一

  7. ruby - Ruby 语言可以用来构建操作系统吗? - 2

    Ruby语言是否可以用于创建全新的移动操作系统或桌面操作系统,即是否可以用于系统编程? 最佳答案 嗯,现在有一些操作系统使用比C更高级的语言。基本上,ruby解释器本身需要用一些低级的东西来编写,并且需要一些引导加载代码将功能齐全的ruby​​解释器作为独立内核加载到内存中。一旦ruby​​解释器被引导并以内核模式(或innerrings之一)运行,就没有什么可以阻止您在其上构建整个操作系统。不幸的是,它可能会很慢。每个操作系统功能的垃圾收集可能会相当引人注目。ruby解释器将负责任务调度和网络堆栈等基本事情,使用垃圾收集框架会大大

  8. ruby-on-rails - 无法构建 gem native 扩展 (mkmf (LoadError)) - Ubuntu 12.04 - 2

    这个问题在这里已经有了答案:Unabletoinstallgem-Failedtobuildgemnativeextension-cannotloadsuchfile--mkmf(LoadError)(17个答案)关闭9年前。嘿,我正在尝试在一台新的ubuntu机器上安装rails。我安装了ruby​​和rvm,但出现“无法构建gemnative扩展”错误。这是什么意思?$sudogeminstallrails-v3.2.9(没有sudo表示我没有权限)然后它会输出很多“获取”命令,最终会出现这个错误:Buildingnativeextensions.Thiscouldtakeawhi

  9. ruby-on-rails - 如何使用 ruby​​ on rails 构建 openid 提供程序 - 2

    我尝试了一些关于ruby​​onrails中openid利用率的搜索。然而,尽管出现了一组选项,例如omniauth、authlogic等,但这些gem通常用于构建接受openid身份验证的站点。换句话说,它们用于openid消费者设置。我也想构建自己的openid服务器。AssuggestedhereinOpenIdsite我发现了像Masquerade和local-openid这样的东西,不幸的是,它们不是非常活跃的项目,下载量很少。自建openidprovider服务器有没有其他设施可以推荐?非常感谢!!干杯,叶 最佳答案 虽

  10. ruby - 使用 Ruby 构建聊天应用程序 - 2

    我正在尝试构建一个纯粹使用Ruby的聊天应用程序。有一个similarquestion较早发布,但我有不同的相关查询。我看过thisexample(与之前发布类似问题的人所提到的相同)。示例中的代码似乎对我不起作用。在终端上运行ruby​​脚本,并连接到url:http://localhost:1234在我的浏览器中,我无限期地遇到“正在从本地主机传输数据...”消息。此处的1234是所提供示例中使用的端口号。我无法弄清楚我运行失败的原因是什么。可能是我需要在执行脚本时在命令行中指定一些东西,或者我应该通过其他地方(可能是浏览器)开始聊天(输入输出)。我无法弄清楚到底该做什么。你能帮我

随机推荐