微服务应用视角解读如何选择K8S的弹性策略

这篇具有很好参考价值的文章主要介绍了微服务应用视角解读如何选择K8S的弹性策略。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

微服务架构的出现,拆分了庞大的单体应用,让业务之间的开发与协作变得更加灵活。当面临业务流量增加的场景时,往往需要对一些应用组件进行扩容。K8S在应用层面提供了HPA,围绕HPA开源社区延伸出了KEDA这样的弹性组件,为微服务应用以业务指标执行弹性策略提供了实现的可能性。但HPA正常工作的一个大前提是需要保证集群资源充足,为此用户必须提前对集群扩容或时常保持集群资源冗余。

对于集群资源弹性这一命题,K8S社区给出了Cluster Autoscaler(CA)和Virtual Kubelet(VK)两种解决方案。本文围绕着微服务应用的形态与特点,剖析了CA与VK各自适用的场景,并总结了微服务架构下应用该如何选择集群资源弹性。

微服务应用形态与特点

在微服务应用架构,微服务架构将一个庞大的应用系统拆分成了一个个离散的应用组件,这些组件通过RPC串在一起,对外提供完整的服务。每个组件是离散的,大部分组件可以通过水平扩缩从而调整服务容量。非核心链路上的组件,是允许延迟扩容或者不扩容,甚至是缩容让出资源。

微服务架构下在弹性场景存在五大特征点:

  • 水平伸缩可以调整系统容量:在外部资源充足的情况下,微服务应用组件水平扩容可以提升业务系统的容量。
  • 应用间存在依赖关系:单个微服务应用并不能提供完整的服务,扩容单个微服务组件,对系统容量的提升非常有限,往往需要和依赖的服务一起扩容才能有效提升系统容量。
  • 应用本身是无状态的:若微服务应用本身有状态,对于水平扩容是不利的,例如对磁盘有强依赖,在扩容场景下需要注意调度亲和性以打散Pod,避免同类型应用在同一节点对磁盘IO抢占,同时缩容时还需要考虑对于状态数据的处理。因此需要尽量改造成无状态应用。
  • 启动速度快且服务上下线流量无损:服务上下线流量无损对于自动扩缩容场景至关重要,尤其是在大流量高并发场景下扩容,冷启动的新Pod很容易被大流量击溃,并且在健康探针的作用下,扩容出的新Pod不断被K8s重启,最终实现的是无效扩容。
  • 流量具有周期性:绝大多数微服务架构应用面向的是在线服务,因此可以用二八定律来描述它,即20%的时间处理了80%的流量。对于业务流量而言,最显著的特征是存在周期性的变化,且往往这个变化是快速的,所以微服务应用容量扩缩的响应速度对于业务系统的稳定起重要作用。

在微服务应用架构中配置应用弹性时,我们所需要考虑的是选择合适的指标来衡量系统容量。在配置集群资源弹性时,我们所需要考虑的是扩容出的计算资源是否能够满足应用所需。

K8S 集群资源弹性技术方案

如前言中所提及,K8S社区给出了两份“标准答案”的框架,具体的资源弹性实现还依赖云厂商的技术形态与产品能力。

虚拟节点:VK

Virtual Kubelet是根据Kubelet定义提出的一个“虚拟节点”的概念,允许云厂商将云服务包装成一个“虚拟节点”,加入到Kubernetes集群中。虚拟节点的背后往往是云厂商的大资源池,因此理论上我们可以认为虚拟节点的资源是无限的,当然实际情况还要以云厂商的规模和产品能力来做判断。

微服务架构的出现,拆分了庞大,微服务,kubernetes,java,阿里云,云计算

节点伸缩:CA

Cluster Autoscaler是K8S社区给出的集群节点伸缩方案。CA监听集群中所有Pod事件,当有Pod因为资源不足而无法调度时,CA会根据伸缩组信息进行模拟扩容并调度计算,最后按照预设的节点扩张策略进行真实节点扩容。同时CA监听集群整体资源利用率,当利用率低于预设的缩容阈值时,CA进行模拟缩容调度计算,排除各种影响因素后,CA对可缩容节点执行打污点、排水、删除这一系列操作。

微服务架构的出现,拆分了庞大,微服务,kubernetes,java,阿里云,云计算

各方案特点比对

以CA技术形态为主的真实节点伸缩与以VK技术形态为主的虚拟节点,这两种主流技术手段有着各自特点,其中最主要的区别如下:

微服务架构的出现,拆分了庞大,微服务,kubernetes,java,阿里云,云计算

简而言之,CA伸缩真实节点以提供完整K8S能力,但响应速度较慢;VK由云厂商资源池驱动,提供了秒级、无限资源的弹性能力,但不存在真实节点,从而失去了部分K8S特性。

云厂商解决方案

在VK和CA这两种主要资源弹性技术方向上,各个云厂商也纷纷推出了对应产品以提供相应的解决方案。

微服务架构的出现,拆分了庞大,微服务,kubernetes,java,阿里云,云计算

Serverless方向主要是Serverless Instance与Serverless Cluster。Serverless Instance产品有ECI、Fargate、ACI这类,以快速、无限资源为显著特点。Serverless Cluster产品有阿里云的ASK、谷歌的GKE Autopilot,由云厂商维护所有集群资源,对用户而言开箱即用免运维。

节点伸缩方向AWS还推出了开源组件Karpenter,它绕过了CA中伸缩组的概念,从而让扩缩容时对于资源的选择更加灵活。

资源弹性策略选择与考量因素

对于资源弹性问题,我们首要考虑的是能力。即新的计算资源是否能够满足业务使用需求。以VK技术形态为主的弹性方案,受限于架构设计、安全、性能等因素,天然地缺失了节点特性、容器特权等能力。对于有这部分诉求的业务应用应尽可能地进行改造,以移除相关依赖。

其次我们考虑的是成本效率。对于企业应用而言,成本预算是不可避免的话题,定价规则以及计费模式不同,最终带来的资源成本不同,势必会影响我们对于某项技术的偏好。在当前的Serverless场景下,计算资源大体上采用的还是按量计费模式,对于一些长时运行的应用上,采用预付费模式的计算资源是否能达到更节省成本,还需要我们进一步去调研与尝试。成本这一层面不仅包含资源成本,还包含运维成本、团队技术学习成本以及依赖具体云厂商所隐含的迁移成本等等,这些成本在当下可能对企业的收益影响有限,但从企业长远发展角度来看,这一部分不可忽视。同时对于技术团队而言,选择相应技术方案在节约运维成本和降低团队学习成本的同时,需要理性看待这部分成本节省与团队成长所带来的收益之间的关系。

效率是影响业务收益成本的重要因素之一,从流量来袭,到HPA根据指标做出响应,再到资源弹性做出动作,最后到应用启动服务上线。这之中每一个环节都存在时间成本,通常情况下这个时间成本越小越好,但也存在一些业务对于时间成本不敏感。对于扩容的每个环节,都延伸出了相应的技术解决方案。如HPA被动式响应,阿里云推出了AHPA带指标预测的提前扩容能力。如JAVA应用启动慢,GraalVM、Alibaba Dragonwell都在冷启动上做出了一些努力。对于明确业务周期的应用,设置好定时弹性提前扩容,这些问题自然引刃而解。

最后还有一些场景问题需要考虑,对当前应用架构进行升级、迁移、重建时,我们需要把高弹性因素纳入考虑范围,进行合适的技术选型。

综上所述,我们总结了一张资源弹性选择策略图,列举了通用场景下对集群弹性选型时需要考虑的因素点。

微服务架构的出现,拆分了庞大,微服务,kubernetes,java,阿里云,云计算

总结

在微服务架构中,我们需要从业务视角梳理与划分应用组件。对于核心链路组件,要尽可能的保证这些组件的健壮性,并调整成一个高可用、高弹性的架构,从而让核心业务长久运行。对于外围链路组件,需要权衡成本与高可用、高弹性带来的效益。

在K8S资源弹性问题上,现有技术手段中,我们需要考量兼容性、效率与成本,从而选择合适于自身业务的集群弹性策略。

阿里云的微服务应用托管平台 EDAS 在资源弹性场景下,不仅针对性的对于独享资源型业务虚拟机 ECS 集群,池化资源型业务 K8S 集群,以及全托管免运维的阿里云 Serverless 集群均做了很好的支持;同时基于结合阿里云容器服务和 ECI ,同时提供了针对池化资源 + Serverless Instance 的形态场景支撑,让我们微服务的业务在可以充分利用云技术所带来的技术红利。

原文链接

本文为阿里云原创内容,未经允许不得转载。文章来源地址https://www.toymoban.com/news/detail-781432.html

到了这里,关于微服务应用视角解读如何选择K8S的弹性策略的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 企业级实战 Spring Boot + K8S 中的滚动发布、优雅停机、弹性伸缩、应用监控、配置分离

    下面为大家介绍我司生产环境使用了3年的基于K8S的dev ops 配置实现 K8s + SpringCloud实现零宕机发版,优雅重启:健康检查+滚动更新+优雅停机+弹性伸缩+Prometheus监控+配置分离(镜像复用) 业务层面 项目依赖 pom.xml 使用 spring-boot-starter-actuator 镜像 存活、就绪检查 使用 prometheus

    2024年02月06日
    浏览(43)
  • 深入微服务架构 | 微服务与k8s架构解读

    微服务项目架构解读 ① 什么是微服务? 微服务是指开发一个单个小型的但有业务功能的服务,每个服务都有自己的处理和轻量通讯机制,可以部署在单个或多个服务器上。 微服务也指一种种松耦合的、有一定的有界上下文的面向服务架构。也就是说,如果每个服务都要同时

    2024年02月05日
    浏览(22)
  • Kubernetes (K8s) 解读:微服务与容器编排的未来

    🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🐅🐾猫头虎建议程序员必备技术栈一览表📖: 🛠️ 全栈技术 Full Stack : 📚 MERN/MEAN/MEVN Stack | 🌐 Jamstack | 🌍 GraphQL | 🔁 RESTful API | ⚡ WebSockets | 🔄 CI/CD | 🌐 Git Version Control | 🔧 DevOps 🌐 前端技术 Frontend : 🖋️ HTML CSS |

    2024年02月09日
    浏览(30)
  • K8s项目实战笔记获阿里技术大咖力荐,深入浅出解读容器编排原理与应用

    一、前言 Kubernetes,简称K8s,宛如一位技艺高超的舞台导演,优雅地指挥着容器集群的华丽表演。它不仅仅是一个开源的容器集群管理系统,更是自动化部署、智能扩缩容与维护等功能的集大成者。作为领军的容器编排工具,Kubernetes展现了基于容器技术的分布式架构的无尽魅

    2024年03月10日
    浏览(37)
  • 滴滴弹性云基于 K8S 的调度实践

    上篇文章详细介绍了弹性云混部的落地历程,弹性云是滴滴内部提供给网约车等核心服务的容器平台,其基于 k8s 实现了对海量 node 的管理和 pod 的调度。本文重点介绍弹性云的调度能力,分为以下部分: 调度链路图 :介绍当前弹性云调度体系链路,对架构体系有一个初步的

    2024年02月05日
    浏览(32)
  • 【k8s、云原生】基于metrics-server弹性伸缩

    第四阶段 时  间:2023年8月18日 参加人:全班人员 内  容: 基于metrics-server弹性伸缩 目录 一、Kubernetes部署方式 (一)minikube (二)二进制包 (三)Kubeadm 二、基于kubeadm部署K8S集群 (一)环境准备 (二)部署kubernetes集群 (三)安装Dashboard UI (四)metrics-server服务部署 (

    2024年02月12日
    浏览(28)
  • K8s(健康检查+滚动更新+优雅停机+弹性伸缩+Prometheus监控+配置分离)

    前言 快速配置请直接跳转至汇总配置 K8s + SpringBoot实现零宕机发布:健康检查+滚动更新+优雅停机+弹性伸缩+Prometheus监控+配置分离(镜像复用) 配置 健康检查 业务层面 定义访问端口、路径及权限 application.yaml 将暴露/actuator/health/readiness和/actuator/health/liveness两个接口,访问方

    2024年02月14日
    浏览(26)
  • 基于k8s Deployment的弹性扩缩容及滚动发布机制详解

    k8s第一个重要设计思想:控制器模式。k8s里第一个控制器模式的完整实现:Deployment。它实现了k8s一大重要功能:Pod的“水平扩展/收缩”(horizontal scaling out/in)。该功能从PaaS时代开始就是一个平台级项目必备编排能力。 若你更新了Deployment的Pod模板(如修改容器的镜像),则

    2024年02月03日
    浏览(46)
  • 在Kubernetes(k8s)上部署整个SpringCloud微服务应用

    视频教程地址:https://www.bilibili.com/video/BV1Xh4y1q7aW/ 这次我准备了一个微服务项目,是依照RuoYi-Cloud(http://doc.ruoyi.vip/ruoyi-cloud/)进行了一些修改所得到的微服务项目。重点是修改了如图根据不同环境添加了不同的配置文件: 项目代码地址为:https://gitcode.net/m0_51510236/yueyang-cloud 我

    2024年02月05日
    浏览(27)
  • k8s服务发现之第五弹--使用 Service 连接到应用

    通过前面教程的学习,我们已经可以将容器化的应用程序在 Kubernetes 中运行起来,并且发布到 Kubernetes 内/外的网络上。 通常,Docker 使用一种 host-private 的联网方式,在此情况下,只有两个容器都在同一个节点(主机)上时,一个容器才可以通过网络连接另一个容器。为了使

    2024年02月15日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包