14、Horizontal Pod Autoscale

news2024/11/25 11:40:30

一、为何进行缩扩容?

    在实际生产中,经常会遇到某个服务需要扩容的场景,可能会遇到由于资源紧张或者工作负载降低而需要减少服务实例数量的场景。可以利用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

四、自动缩扩容

4.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

4.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。
4.3、实现HPA需要先部署metrics-server,部署metrics-server步骤:
# 查看autoscalers列表
kubectl get hpa
# 查看具体描述
kubectl describe hpa
# 删除autoscaler
kubectl delete hpa
手动扩容和缩容:
     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 # 必填,在selector字段中指定了为哪一个标签的pod进行负载均衡
  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阈值

五、参考

http://carey.akhack.com/2019/05/28/kubernetes-hpa/  kubernetes中Horizontal Pod Autoscaler的理解

https://www.cnblogs.com/cjsblog/p/12266093.html   Horizontal Pod Autoscaler(Pod水平自动伸缩)

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

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

相关文章

【Android Framework系列】第6章 AMS原理之Launcer启动流程

1 前言 我们在上一章节【Android Framework系列】第5章 AMS启动流程中简单的分析了AMS的启动流程,这一章节我们来了解一下,通过AMS是怎么完成Activity的启动 下面我们通过Launcher启动一起来看看Activity的启动流程 本文基于Android10(Q&a…

不同语言采集【淘宝1688拼多多API】平台数据的方式

首先我们以taobao商品页面采集商品详情数据为例: 请求方式:HTTPS POST GET 请求地址:API接口 请求参数 请求参数:num_iid669646899650&is_promotion1参数说明:num_iid:淘宝商品ID is_promotion:是否获取取促销…

Space Saving算法

用于大数据中统计元素数量最多的元素的算法。 SpaceSaving算法是一种近似计数算法,它在大多数情况下能够提供准确的结果。然而,它并不是完全准确的,因为它使用了一些近似技巧来降低内存使用。具体来说,SpaceSaving算法通过牺牲一定…

基于STM32CUBEMX驱动TOF模块VL6180与VL6180X(4)----测量环境光

基于STM32CUBEMX驱动TOF模块VL6180与VL6180X----4.测量环境光 概述样品申请VL6180X传感器的测量流程ALS动态范围ALS动态范围测量流程光强计算公式配置vl6180x测试结果 概述 在本章中,我们将介绍如何配置VL6180X传感器以测量环境光,并获取环境光的强度值…

I.MX8MM系统构建 -- 2.linux内核编译烧录

准备源码 源码位置:/source/myir-imx-linux.tar.gz解压源码 tar zxf myir-imx-linux.tar.gz 编译 进入源码目录后,依次执行下列指令 myirmyir-server1:$ make distclean myirmyir-server1:$ make myd_imx8mm_defconfig myirmyir-server1:$ LDFLAG…

代码随想录刷题第53天|Leetcode1143最长公共子序列

1、Leetcode1143最长公共子序列 题目链接:1143最长公共子序列 本题不要求连续,求最长公共子序列。 1、确定dp数组及下标的含义 dp[i][j]:长度为[0, i - 1]的字符串text1与长度为[0, j - 1]的字符串text2的最长公共子序列为dp[i][j]。 2、…

volatile原理剖析和实例讲解

一、是什么 volatile是Java的一个关键字,是Java提供的一种轻量级的同步机制, 二、能做什么 保证了不同线程对这个变量进行操作时的可见性,有序性。 三、可见性 可见性主要是指一个线程修改了共享变量的值,另一个线程可以看见…

PreparedStatement 相比于 Statement的优点

PreparedStatement 相比于 Statement,有以下几个优点: 1. 预编译:PreparedStatement 对象在执行 SQL 语句之前会进行预编译,这意味着数据库管理系统可以提前解析和编译 SQL 语句,以优化执行计划,从而提高查…

【C语言初阶(15)】操作符1

文章目录 Ⅰ操作符的分类Ⅱ 算术操作符Ⅲ 移位操作符⒈左移操作符⒉右移操作符 Ⅳ 位操作符⒈按位取⒉按位与⒊按位异或⒋按位或⒌位操作符练习题 Ⅴ赋值操作符Ⅵ 单目操作符 Ⅰ操作符的分类 算术操作符移位操作符位操作符赋值操作符单目操作符关系操作符逻辑操作符条件操作符…

【ElasticSearch】ES集群搭建、监控、故障转移

文章目录 1、ES集群介绍2、搭建ES集群3、集群状态监控4、集群职责及脑裂5、分布式新增和查询流程6、ES故障转移 1、ES集群介绍 单机的ES做数据存储与搜索,必然面临两个问题: 海量数据存储问题单点故障问题 因此,考虑使用ES集群&#xff1a…

AIGC浪潮席卷,亚马逊云科技携手海尔设计、Nolibox加速工业设计转型

从机器学习算法到深度学习再到强化学习,AI创新浪潮奔流不息。而AIGC(AI-generated Content,人工智能生成内容)的到来,更是让AI成为众多企业的得力助手,开拓了文本、图像、音视频等领域的天花板。 在洞悉到…

x86架构ubuntu18下运行mgba模拟器

0. 环境 i7 ubuntu18 1. 准备源码 到https://github.com/mgba-emu/mgba/releases下载源码 mgba-0.10.2.tar.gz tar -zvxf mgba-0.10.2.tar.gz cd mgba0.10.2 2. 编译 mkdir build cd build cmake -DCMAKE_INSTALL_PREFIX/home/xxjianvm/work/mgba-0.10.2/install .. make -j…

PROFINET转TCP/IP网关TCP/IP协议的含义是

大家好,今天要和大家分享一款自主研发的通讯网关,远创智控YC-PN-TCPIP。这款网关可是集多种功能于一身,PROFINET从站功能,让它在通讯领域独领风骚。想知道这款网关如何实现PROFINET和TCP/IP网络的连接吗?一起来看看吧&…

【GeoDa实用技巧100例】004:绘制长沙市宾馆热度图

文章目录 一、加载宾馆分布数据二、绘制热度图三、加载范围数据四、加载底图数据 一、加载宾馆分布数据 加载专栏配套的案例数据data004.rar中的长沙市宾馆酒店.shp,如下图,选择Shapefile格式: 选择长沙市宾馆酒店,加载如下&…

完全平方数(力扣)动态规划 JAVA

给你一个整数 n ,返回 和为 n 的完全平方数的最少数量 。 完全平方数 是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。例如,1、4、9 和 16 都是完全平方数,而 3 和 11 不是。 示…

【指针进阶】(题目练习)

这篇文章的思维导图在这里:思维导图 一维数组: int a[] {1,2,3,4}; printf("%d\n",sizeof(a)); printf("%d\n",sizeof(a0)); printf("%d\n",sizeof(*a)); printf("%d\n",sizeof(a1)); printf("%d\n"…

Vit 实战营 Class2:图像与Transformer基础

文章目录 数组图像:图像与像素图像分类:机器如何学习?NMT:Neuron Machine TranslationTransformerVision Transformer代码实战 数组图像:图像与像素 什么是数字图像?在计算机图像的图像格式。每一个点叫pix…

全国节能宣传周丨物通博联智慧能源解决方案助力节能降碳

今年7月10日至16日,为全国第33个节能宣传周。今年全国节能宣传周活动主题是“节能降碳,你我同行”。 全国节能宣传周活动是在1990年国务院第六次节能办公会议上确定的活动周,开展该活动是实施全面节约战略、开展节能降碳宣传教育、推动形成绿…

ros系统生成kinova双臂机器人moveit配置包方法,详细过程,亲测有效!

环境:ubuntu18.04 ros:melodic 此博客前提你已经安装了moveit,如果未安装,可参考链接 一、启动MoveIt Setup Assistant roslaunch moveit_setup_assistant setup_assistant.launch点击:Create New MoveIt Configurat…

听产品大佬谈大语言模型的商业化价值

今年 3 月以来,全球各大厂商陆续发布大语言模型,无数人欢欣鼓舞,庆祝沉寂了几年的 AI 领域重新焕发生机。 然而热闹过后,一个现实的问题摆在面前:大语言模型的商业化价值该如何挖掘? 来自美洽的资深产品经…