AI Agent、AI Infra、RAG 、出海合规,2024 前瞻性和实用性技术案例都在这里了 了解详情
写点什么

Expedia 开源针对 Kubernetes 工作负载的容器启动自动扩缩器(CSA)

Claudio Masolo

  • 2024-05-28
    北京
  • 本文字数:1721 字

    阅读完需:约 6 分钟

大小:886.72K时长:05:02
Expedia 开源针对 Kubernetes 工作负载的容器启动自动扩缩器(CSA)

Expedia 的性能和可靠性团队最近 开源了 其 容器启动自动扩缩器(container-startup-autoscaler,CSA)。CSA 是一个 Kubernetes 控制器,利用 Pod 资源的原地资源更新(In-Place Update of Pod Resources)特性,在启动过程中基于用户定义的启动时 / 启动后配置动态调整容器的 CPU 和 / 或内存资源。


Pod 资源的原地资源更新特性自 Kubernetes 1.27.0 进入 alpha 状态。该功能能够修改 Pod 资源(请求和限制),而无需重启 Pod。在此之前,对 Pod 的所有调整都必须重启 Pod 才能实现。


在 Kubernetes 工作负载的管理中,有一个长期存在的问题,那就是如何优化容器资源,以便于适应在启动阶段和启动后阶段展现出截然不同资源使用模式的工作负载。在原地资源更新特性引入之前,在启动密集型工作负载时,需要在实现一致的启动时间和尽量减少启动后资源浪费之间做出权衡:


  1. 突发的服务质量(Quality of Service,QoS):


a.设置高于请求的限制,在启动期间预留超出请求的资源

b.由于依赖于集群节点的负载情况,启动时间无法预测

c.启动后的性能也可能不稳定,原因在于额外回收(scavenged)资源的不确定性,尤其是在集群联合的机制中

2.确保 QoS(1):

a.建立与请求相等的限制,优先考虑启动时间

b.可预测的启动时间和启动后性能,但是可能会造成浪费,尤其是在 Pod 副本数量过多的情况下

3.确保 QoS(2):

a.设置与请求相等的限制,强调正常工作负载服务的性能

b.可预测和可接受的启动后性能,但代价是启动时间较慢,从而会延长部署的持续时间和水平扩展的反应时间,影响运行效率


容器启动自动扩缩器(CSA)在 Pod 级别运行。它与各种工作负载管理 API(如 Deployments、StatefulSets 和 DaemonSets)集成,确保不同 Pod 管理方法之间的兼容性。它既支持初始的容器启动,也支持 Kubernetes 启动的重启操作。


CSA 的逻辑模式


CSA 可关注 Pod 中的单个 non-init/ephemeral 容器。目标容器的名称和所需的启动时 / 启动后资源配置等细节信息都封装在特定 Pod 的注解中。


CSA 在监控要用于扩展的 Pod(通过标签识别)时,会对这些 Pod 中的变化做出响应。当探测出符合条件的 Pod 发生变化,CSA 就会评估目标容器的当前状态,并根据其状态执行如下所示的某个操作:


  1. 命令其执行启动资源设置(当目标容器处于非活动状态,并且已经应用过了启动后设置)

  2. 命令其执行启动后资源设置(当目标容器处于活动状态,并且已经应用过了启动期设置)

  3. 评估先前执行的缩放命令的状态并生成相应报告。确认成功的缩放已执行。


CSA 会在其 Pod 创建目标容器时以及 Kubernetes 重新启动目标容器时进行干预。CSA 在不必要时会避免执行扩缩操作。例如,如果目标容器在准备就绪前反复启动失败(促使 Kubernetes 以 CrashLoopBackOff 的方式重新启动),在这种情况下,CSA 只会应用一次启动资源。此外,CSA 还会生成度量指标、Kubernetes Pod 事件和详细的状态更新,所有的这些内容都会纳入到扩展的 Pod 注解中。


CSA 有一些限制:


  • 最初声明的目标资源必须得到保证(请求 == 限制),以便于符合启动资源能够得到保证的特点。当前的 Kube API 拒绝改变资源的服务质量(QoS)。随着 Pod 资源原地更新特性的发展,这一限制应该会得到解决。

  • 如上所述,启动后的资源也必须得到保证(请求 == 限制),以便于符合启动资源能够得到保证的特点。

  • 缩放目标容器尝试失败后不会进行重试。


CSA 的主要目标是让 Kubernetes 工作负载管理员在启动过程中精细调整容器资源,而不必在启动后进行资源配置,从而减少相关的权衡。这种方法有助于实现如下目标:


  1. 通过分离启动阶段和启动后阶段的资源设置,减少资源浪费。

  2. 提高启动性能和可预测性,实现更快的横向扩展操作。


到 Kubernetes 1.29 为止,CSA 所依赖的 Pod 资源原地更新特性还处于 alpha 阶段。因此,CSA 功能需要启用 InPlacePodVerticalScaling 特性门控(feature gate)。鉴于该特性和 CSA 实现都在持续开发中,建议谨慎使用。在达到稳定状态之前,Expedia 团队建议仅将 CSA 用于本地或非生产 Kubernetes 环境中进行预览。


查看英文原文:


Expedia Opensourced Its Container-Startup-Autoscaler (CSA) for Kubernetes Workloads (https://www.infoq.com/news/2024/04/expedia-startup-autoscaler/)


声明:本文为 InfoQ 翻译,未经许可禁止转载。

2024-05-28 14:413302

评论

发布
暂无评论

共助数据自主创新生态|DataPipeline实时数据融合平台与华为云GaussDB数据库完成兼容互认证

DataPipeline数见科技

双赞的一体机主板能应用到哪些行业?

双赞工控

阿里大牛肝出的443页TCP/IP协议趣谈笔记,竟然在GitHub标星27k+

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

发布半小时登上GitHub首页的Spring Boot实战笔记,竟是京东T8编写

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

牛皮了!阿里大佬总结的图解Java手册在GitHub火了,完整版开源中

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

DataPipeline助力国际知名物流服务商,打造供应链改革新样本!

DataPipeline数见科技

Vite + Vue3 + OpenLayers 弹窗

德育处主任

大前端 地图 vite Vue3 openlayers

Alibaba内部最新Java架构核心宝典 (全彩版小册开源)

Java 程序员 架构 面试 计算机

选择低代码应用程序开发框架的5个关键标准

低代码小观

程序员 低代码 企业开发 低代码开发 开发框架

对象存储手把手教五 | 数据存取与加密

QingStor分布式存储

对象存储 分布式存储 数据加密

Python基础综合练习1

在即

9月日更

ResNet-50 在 ImageNet-1k 上的实验笔记

毛显新

人工智能 神经网络 深度学习 卷积神经网络 PyTorch

KubeVirt with YRCloudFile 擦出创新的火花

焱融科技

云原生 文件存储 虚拟化 高性能, 分布式存储,

盘点 | 主流云原生数据库技术方案

RadonDB

数据库 云原生

web技术分享| 前端秘籍之“易容”术

anyRTC开发者

人工智能 大前端 音视频 web技术分享

浅谈百度阅读/文库NA端排版技术

百度Geek说

大前端 百度文库

AD域是什么意思?有什么用?

行云管家

服务器 内网 AD域

小红书严惩刷量行为:如何才能优雅的种草

石头IT视角

程序员35岁后的发展,欢迎一起来讨论

hanaper

vue3,对比 vue2 有什么优点?

华为云开发者联盟

Vue Vue3 vue2 diff算法 渲染API

你的工作谁做主?

产品运营心经

工作效率 职场成长

OpenMetric与时序数据库模型之主流TSDB分析

华为云开发者联盟

Prometheus Influxdb 时序数据库 tsdb OpenMetric

企业级数据融合平台上线,DataPipeline助力中国最大保险公司海外业务再创佳绩!

DataPipeline数见科技

新基建+新科技,智慧港口船舶抢抓数字化转型先机

一只数据鲸鱼

数据可视化 智慧港口 智慧船舶 智慧码头

全链路压测流量模型

FunTester

性能测试 全链路压测 FunTester 灰度分流 流量回放

什么是运维?怎样快速做好运维工作?

行云管家

云计算 运维 服务器 云运维

阿里内部进阶资料:24w字的Java面试宝典,竟然在GitHub霸榜月余

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

意外发现GitHub 星标35k+ 435页网络协议深度笔记,出自华为架构师

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

一萌妹子的面试经历,美团四面三小时,成功拿到Java岗offer

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

Python中使用定时调度任务(Schedule Jobs)的5种方式

Regan Yue

Python 调度 9月日更

小白都能看懂的JVM知识,一文带你学会JVM内存模型!

华为云开发者联盟

Java JVM 内存管理 Java虚拟机 JVM内存模型

Expedia 开源针对 Kubernetes 工作负载的容器启动自动扩缩器(CSA)_后端_InfoQ精选文章