14、Horizontal Pod Autoscal

news2024/11/17 15:40:36

一、为何进行缩扩容?

    在实际生产中,经常会遇到某个服务需要扩容的场景,可能会遇到由于资源紧张或者工作负载降低而需要减少服务实例数量的场景。可以利用Deployment/RC的Scale机制来完成这些工作。

二、缩扩容模式

Kubernetes 对 Pod 扩容与缩容提供了手动和自动两种模式。
  • 一、手动扩容和缩容模式:手动模式通过执行 kubectl scale -- replicas=num 命令对一个Deployment/RC进行Pod副本数量的设置,可一键完成。
  • 二、自动扩容和缩容模式 :自动模式则需要用户根据某个性能指标或者自定义业务指标,并指定Pod副本数量的范围,系统将自动在这个范围内根据性能指标的变化进行调整。

三、手动缩扩容

伸缩(Scale Up/Down)是指在线增加或减少 Pod 的副本数。
方式1:
kubectl scale --replicas=2 deployments/httpd-deployment
方式2:直接修改deployment.yaml文件中的spec.replicas值然后kubectl apply -f httpd-deployment.yaml

三、自动缩扩容

3.1、HPA介绍

Kubernetes有一个 HPA(Horizontal Pod Autoscaler)的资源,可以 实现基于CPU使用率的Pod自动伸缩的功能。
Horizontal Pod Autoscal( Pod 横向扩容 简称 HPA)与 RC、 Deployment 一样, 也属于一种 Kubernetes 资源对象。 通过追踪分析 RC 控制的所有目标 Pod 的负载变化情况, 来确定是 否需要针对性地调整目标 Pod 的副本数, 这是 HPA 的 实现原理
Horizontal Pod Autoscaling仅适用于Deployment和ReplicaSet

3.2、HPA如何工作? 

    Horizontal Pod Autoscaler 由一个控制循环实现,循环周期由 controller manager 中的--horizontal-pod-autoscaler-sync-period标志指定(默认是 15 秒)。
    在每个周期内,controller manager会查询HorizontalPodAutoscaler中定义的metric指标的资源利用率。controller manager从resource metric API(针对每个pod的resource metric)或者自定义metric API(所有的metric)中获取metric指标。
  • 每个Pod的resource metric(例如CPU),controller通过resource metric API获取HorizontalPodAutoscaler中定义的每个Pod的metric;然后,如果设置了目标利用率,controller计算利用的值与每个Pod的容器里的resource request值的百分比。如果设置了目标原始值,将直接使用该原始 metric 值。然后 controller 计算所有目标 Pod 的利用率或原始值(取决于所指定的目标类型)的平均值,产生一个用于缩放所需 replica 数量的比率。 请注意,如果某些 Pod 的容器没有设置相关的 resource request ,则不会定义 Pod 的 CPU 利用率,并且 Aucoscaler 也不会对该 metric 采取任何操作。
  • 对于每个 Pod 自定义的 metric,controller 功能类似于每个 Pod 的 resource metric,只是它使用原始值而不是利用率值;
  • 对于 object metric,获取单个度量(描述有问题的对象),并与目标值进行比较,以产生如上所述的比率。
算法细节:
    desiredReplicas = ceil[currentReplicas * ( currentMetricValue / desiredMetricValue )]
直译为:(当前指标值 ➗ 期望指标值) ✖️ 当前副本数 ,结果再向上取整,最终结果就是期望的副本数量
假设一个nginx-deployment有4个pod,pod1的cpu利用率50%,pod2的cpu利用率60%,pod3的cpu利用率70%,pod4的cpu利用率80%
kubectl autoscale deployment nginx-deployment --min=1 --max=5 --cpu-percent=80
期望的cpu利用率是80%
((0.5 / 0.8) + (0.6 / 0.8) + (0.7 / 0.8) + (0.8 / 0.8)) / 4 *3 = 2.4375
向上取整为3,则该deployment需要缩容到3个pod(3在[1, 5]之间)。
kubectl autoscale deployment nginx-deployment --min=1 --max=5 --cpu-percent=30
期望的cpu利用率是30%
((0.5 / 0.3) + (0.6 / 0.3) + (0.7 / 0.3) + (0.8 / 0.3)) / 4 *3 = 6.500
向上取整为7,则该deployment需要扩展到7个pod,但7不在[1, 5]之间,所以扩展到5个pod。

3.3、实现HPA需要先部署metrics-server

部署metrics-server步骤:
 
# 查看autoscalers列表
kubectl get hpa
# 查看具体描述
kubectl describe hpa
# 删除autoscaler
kubectl delete hpa

3.4、缩扩容实现

手动扩容和缩容:
kubectl autoscale deployment nginx-deployment --min=1 --max=10 --cpu-percent=50  
# 当CPUUtilizationPercentage的值超过50%时会触发自动动态扩容行为,扩容或缩容时必须满足的一个约束条件是Pod的副本数要介于1与10之间
自动扩容和缩容:
apiVersion: v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 1
  template:
    metadata:
      name: nginx
      labels:
       app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        resources:
          requests:
            cpu: 50m
        ports:
        - containerPort: 80
         
---
apiVersion: v1
kind: Service
metadata:
  name: nginx-svc # service名称
spec:
selector:
    app: nginx-deployment # 必填,在selector字段中指定了为哪一个标签的app进行负载均衡
  ports:
    - port: 80
 
---
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler # 根据kubectl api-resources查到
metadata:
  name: nginx-hpa
spec:
  scaleTargetRef:
    apiVersion: v1
    kind: Deployment
    name: nginx-deployment
  minReplicas: 1                       # 最小副本数
  maxReplicas: 10                      # 最大副本数
  targetCPUUtilizationPercentage: 50   # CPU阈值

四、参考

kubernetes中Horizontal Pod Autoscaler的理解 | Carey的博客  

Horizontal Pod Autoscaler(Pod水平自动伸缩) - 废物大师兄 - 博客园   

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/11781.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

mysql-Innodb解析

一.计算机不同介质操作速度 相对于CPU和内存操作, 我们可以看到磁盘的操作延时明显要大得多, 一次磁盘搜索的延时需要10ms。 假入我们某一个业务操作进行了大量磁盘读写, 那可以预料到这个服务的性能肯定是非常差的, 那么到底是什…

3.2文法与语言

1、文法生成语言 推导 定义:当αAβ直接推导出αγβ,即αAβ⇒αγβ,仅当A→γ是一个产生式,且α,β∈(VT∪VN)*。 注:按照我的理解是两个字符串的推导。如果α1⇒α2⇒…⇒αn,则我们称这个序列是从α1到αn的一个…

动态规划01 背包问题(算法)

上篇文章说了,查找组成一个偶数最接近的两个素数算法: 查找组成一个偶数最接近的两个素数https://blog.csdn.net/ke1ying/article/details/127872594 本篇文章题目是 动态规划01 背包问题: 背包容量5kg,现在有三个物体&#xf…

BVH动捕文件导入到E3D骨骼树

BVH动捕文件导入到E3D骨骼树 1. BVH动捕文件 BVH动作捕捉文件有两部分组成,第一部分描述了静止状态下角色的基本骨骼结构,角色通常处于Apose或Tpose姿态下.文本用树状结构描述了各个关节点的相对位置(OFFSET xyz),连接两关节点的…

学好MySQL增删查改,争取不做CURD程序员【下篇(六个小时肝MySQL万字大总结)】

✨✨hello,愿意点进来的小伙伴们,你们好呐! 🐻🐻系列专栏:【MySQL初阶】 🐲🐲本篇内容:一套打通MySQL基础操作. 🐯🐯作者简介:一名现大二的三非编…

解决小程序-wx.canvasGetImageData()-RGB取色盘苹果手机获取颜色慢问题

简介 最近做了一个微信小程序控制蓝牙设备,通过小程序中的RGB取色盘,获取当前的RGB颜色,通过蓝牙发送给设备,设备接收到RGB以后,做出相应的调整。 图1:RGB取色盘 在安卓手机上运行正常,能够迅速…

企业实战项目rsync+inotify实现实时同步

目录 一、inotify安装和介绍 1. 安装inotify 2. inotify-tools常用命令 3. rsync inotify 实践 3.1 服务端配置 3.2 客户端配置 一、inotify安装和介绍 1. 安装inotify yum install epel-release -y yum install inotify-tools -y 2. inotify-tools常用命令 inotify-to…

C++ 使用哈希表封装模拟实现unordered_map unordered_set

一、unordered_map unordered_set 和 map set的区别 1. map set底层采取的红黑树的结构,unordered_xxx 底层数据结构是哈希表。unordered_map容器通过key访问单个元素要比map快,但它通常在遍历元素子集的范围迭代方面效率较低。 2. Java中对应的容器名…

vivo和oppo通知权限弹窗

在vivo和oppo部分手机上,首次安装app时,会弹出一个系统级的通知权限弹窗,(部分一加手机也会出现,是因为一加手机使用了OPPO的colorOS系统)如图。 这个通知权限弹窗比较坑,一来可能不符合产品对…

Word控件Spire.Doc 【文本】教程(21) ;如何在 C# 中用 Word 文档替换文本

Spire.Doc for .NET是一款专门对 Word 文档进行操作的 .NET 类库。在于帮助开发人员无需安装 Microsoft Word情况下,轻松快捷高效地创建、编辑、转换和打印 Microsoft Word 文档。拥有近10年专业开发经验Spire系列办公文档开发工具,专注于创建、编辑、转…

ARM pwn 入门 (4)

3. callme 本题有多个文件,根据题意来看是需要依次调用callme_one、callme_two、callme_three这3个库函数。这三个函数会进行flag的解密,但是需要满足前三个参数等于特定值。这就需要我们去elf文件中寻找合适的gadget了。 而本题正好给出了一个不能再合…

为什么模板的声明与定义不能分离?

目录 一、模板的好处与注意事项 二、 声明定义为什么不能不放一起&#xff1f; 一、模板的好处与注意事项 模板的好处从下面代码可以体现&#xff1a; template<typename T> void Swap(T& left, T& right) {T temp left;left right;right temp; } int main…

IDEA+MapReduce+Hive综合实践——搜狗日志查询分析

1.下载数据源 打开搜狗实验室链接&#xff1a;搜狗搜索引擎 - 上网从搜狗开始&#xff0c;由于搜狗实验室链接打不开了&#xff0c;所有这里自己制作一份数据进行实验。 SogouQ.txt: 2.上传下载文件至HDFS 2.1将下载的文件通过FinalShell工具上传到Linux系统 2.2SogouQ.txt并…

dev_I_II笔记

dev1 问题 1.model创建不了&#xff1f; 2.从开发界面双击进入后&#xff0c;如何返回&#xff1f; 3.一个客户端界面的所有东西就是一个项目吗&#xff1f;多个项目的数据全部储存在开发界面的aot中&#xff1f; 4.最终的测试是需要完成一个什么东西&#xff1f; 1.学习…

企业微信自定义客户画像

OpenAPI基本介绍 微伴助手开放接口对接文档 version: 0.4 注1&#xff1a;微伴助手开放接口已经开放公测&#xff0c;进入微伴后台-应用管理-API接入以获取企业标识&#xff08;corp_id&#xff09; &#xff0c;企业API调用凭据&#xff08;secret&#xff09; 注2&#xff…

视图相关知识的汇总

重点大纲 描述视图创建&#xff0c;改变视图的定义&#xff0c;删除视图通过视图重新找回数据通过视图插入&#xff0c;更新和删除数据创建和使用inline视图执行Top-N 分析什么是视图&#xff1f; 视图是基于一张表或者另一张视图的逻辑表。 视图本身不包含数据。视图被存储在…

[数据结构]什么是树?什么是二叉树?

作者&#xff1a; 华丞臧. 专栏&#xff1a;【数据结构】 各位读者老爷如果觉得博主写的不错&#xff0c;请诸位多多支持(点赞收藏关注)。如果有错误的地方&#xff0c;欢迎在评论区指出。 文章目录一、树1.1 树的概念及结构1.2 树的相关概念1.3 树的表示1.4 树在实际中的运用二…

JavaEE——Http请求和响应,https的加密

请求 报头 里面是一系列键值对&#xff0c;有的是标准定义的&#xff0c;有的是自定义的 典型的有以下几个 Host 代表服务器的主机地址和端口 也就是当我们访问浏览器时&#xff0c;可以知道从哪里获取数据 端口号如果省略就代表是默认值&#xff0c;http是80&#xff0c;h…

c++好用的网站

目录 洛谷www.luogu.com.cn 有道小图灵https://oj.youdao.com/csp 维基https://oi-wiki.org/ 1&#xff0c;洛谷 他的网址是www.luogu.com.cn。 这是一个好用的刷题网站&#xff0c;题库里有大约有2000多道题。 洛谷有题里有csp往年的题。 题库&#xff1a; 有题&#x…

怎么把PDF调方向保存?这几个方法值得收藏

小伙伴们在工作的时候&#xff0c;有时候领导会发PDF文件要你查阅重要内容&#xff0c;但不是每次收到的PDF文件都是无损的&#xff0c;有时候打开后发现里面内容杂乱并且页面方向不一致&#xff0c;这个时候有些小伙伴不知道怎么办&#xff0c;那么我们应该怎么把PDF调方向保存…