大咖说|Kubernetes 自动伸缩实现方式深度讲解
本篇文章将从三个方面探讨如何利用 K8S 实现自定义指标的自动伸缩。第一方面主要了解自动伸缩的原理以及其重要性。第二方面主要会介绍如何通过 K8S 实现自动化伸缩能力。第三方面实战演示如何使用自定义指标的方式来实现自动伸缩能力。
作者:马若飞。大型跨国互联网公司首席工程师。 AWS Container Hero,《Istio 实战指南》作者,极客 时间 《Service Mesh 实战》专栏作者。中国最大的服务网格社区 ServiceMesher.com 管理委员会核心成员, 云原生 社区 VIP,Istio.io contributor。研究方向为微服务、Service Mesh、云原生技术。
自动伸缩能力的重要性
从可扩展性说起
自动伸缩能力是设计软件时必备的一个非常重要的质量属性,通常用英文 Scalability 这个词来代表。著名论文《The Art of Scalability》中对伸缩性做了非常详细的描述,并在里边提出了一个业界非常重要且知名的理论——扩展性立方体。扩展性立方体理论认为当应用软件需要进行扩展时,通常有三个维度,即如下图所示。
第一个维度 X 轴:X 轴是最基本的一个伸缩能力,属于是水平复制,即 replicate 能力。换句话说,就是复制服务然后负载均衡,这也是最简单最基础的扩展。
第二个维度 Y 轴:指的是功能性的扩展。即在 Y 轴上可以看到随着一个应用的演进以及不断地开发,该应用在功能上也是可以扩展的。如针对 X 轴扩展产生的问题,需要将大型服务进行拆解,把分割的工作指责和数据分配至多个实体,这也是微服务理论诞生的基础。
第三个维度 Z 轴:主要指的是数据分区。即应用在数据量急剧增长的情况下,客户希望通过数据分区的方式来使得应用在持久层的维度进行的扩展。通常,最简单的扩展方式就是所谓的散库散表或者叫分库分表,英文名加 Sharding。即像水平扩展一样,将数据以水平的方式或者垂直的方式进行 Sharding。一般来说水平方式是指将原来一个数据库拆分成多个,每一个库的表结构均相同,但承载的存储数据同。垂直方式是指将不同的表散列到不同的 DB 上。
什么是自动伸缩(Auto-scaling)
自动伸缩通常将其它翻译成 Auto-scaling。伸缩指的是在不同的维度上可以有复制与扩展,自动伸缩顾名思义就是可以将上述扩展以自动化的方式实现。自动伸缩是一种自动扩展计算资源的云计算技术。在手动方式部署阶段,Auto-scaling 的能力尚未被开发出来,随着 PaaS 平台的不断的演进,自动扩展的需求也越来越明显,故特别强调了自动伸缩是一种云计算技术。
自动伸缩的重要性
更好的容错性(Fault-tolerance) :及时、快速应对负载压力
更好的可用性(High Availability) :高可用的本质:冗余
更好的成本管理(Cost saving) :按需付费
云原生应用的必备能力
缺点:难以识别非正常流量(Ddos 攻击)
常见的自动伸缩实现
云提供商的基本服务
Serverless
Kubernetes HPA
HPA 工作原理及基本用法
Kubernetes 里的自动伸缩实现— HPA
HPA 与 RC, Deployment, Pod 的关系如下图所示:
HPA 通过 Scale sub-resource 接口,对 RC 和 Deployment 的 replicas 进行控制。
HPA 最终对 Pod 副本数的控制终归还是通过 RC 和 Deployment 控制器。
HPA 工作原理
HPA 具体的工作原理如下图所示:
基于默认资源指标实现的 HPA
默认指标:CPU、内存
检查间隔:默认 15s
公式:ceil[当前副本数 * (当前指标 / 期望指标)]
基于自定义指标的 HPA 实现
为什么需要自定义指标实现自动伸缩?
默认指标单一,不能反映真实的负载
无法满足定制需要
基于多指标扩
自定义指标实现及原理
自定义指标指 HPA 是支持自定义指标的,即我们可以根据个人需要自己去定义指标,将指标编写出来,然后纳入到 K8S 管理之中,这样 HPA 便可以识别出指标。整个工作原理与默认的类似,具体工作原理如下图所示:
K8S 中指标收集主要支持以下三大类,具体工作原理如下图所示:
Resource Metrics API
Custom Metrics API
External Metrics API
基于 QPS 的 HPA 实现
接下来以代码片段讲解基于 QPS 的 HPA 实现方式。
第一步:定义指标
第二步:为 Adapter 定义规则
第三步:定义 HPA
开源福利
现如今,云智慧已开源数据可视化编排平台 FlyFish 。通过配置数据模型为用户提供上百种可视化图形组件,零编码即可实现符合自己业务需求的炫酷可视化大屏。 同时, FlyFish 也提供了灵活的拓展能力,支持组件开发、自定义函数与全局事件等配置, 面向复杂需求场景能够保证高效开发与交付。
点击下方地址链接,欢迎大家给 FlyFish 点赞送 Star。参与组件开发,更有万元现金等你来拿。
GitHub 地址: https://github.com/CloudWise-OpenSource/FlyFish
Gitee 地址:https://gitee.com/CloudWise/fly-fish
万元现金福利: http://bbs.aiops.cloudwise.com/t/Activity
微信扫描识别下方二维码,备注【飞鱼】加入 AIOps 社区飞鱼开发者交流群,与 FlyFish 项目 PMC 面对面交流~
评论