前戏

我们知道,初始Pod的数量是可以设置的,同时业务也分流量高峰和低峰,那么怎么即能不过多的占用K8s的资源,又能在服务高峰时自动扩容pod的数量呢,在K8s上的答案是Horizontal Pod Autoscaling,简称HPA 自动水平伸缩,这里只以我们常用的CPU计算型服务来作为HPA的测试,这基本满足了大部分业务服务需求,其它如vpa纵向扩容

动水平伸缩,是指运行在k8s上的应用负载(POD),可以根据资源使用率进行自动扩容、缩容,它依赖metrics-server服务pod使用资源指标收集;我们知道应用的资源使用率通常都有高峰和低谷,所以k8s的HPA特性应运而生;它也是最能体现区别于传统运维的优势之一,不仅能够弹性伸缩,而且完全自动化

我们在生产中通常用得最多的就是基于服务pod的cpu使用率metrics来自动扩容pod数量,下面来以生产的标准来实战测试下(注意:使用HPA前我们要确保K8s集群的dns服务和metrics服务是正常运行的,并且我们所创建的服务需要配置指标分配)

# pod内资源分配的配置格式如下:
# 默认可以只配置requests,但根据生产中的经验,建议把limits资源限制也加上,因为对K8s来说,只有这两个都配置了且配置的值都要一样,这个pod资源的优先级才是最高的,在node资源不够的情况下,首先是把没有任何资源分配配置的pod资源给干掉,其次是只配置了requests的,最后才是两个都配置的情况,仔细品品resources:limits:   # 限制单个pod最多能使用1核(1000m 毫核)cpu以及2G内存cpu: "1"memory: 2Girequests: # 保证这个pod初始就能分配这么多资源cpu: "1"memory: 2Gi

先直接创建hpa会产生什么情况:

# 为deployment资源web创建hpa,pod数量上限3个,最低1个,在pod平均CPU达到50%后开始扩容
kubectl  autoscale deployment web --max=3 --min=1 --cpu-percent=50#过一会看下这个hpa资源的描述(截取这下面一部分)
# 下面提示说到,HPA缺少最小资源分配的request参数
Conditions:Type           Status  Reason                   Message----           ------  ------                   -------AbleToScale    True    SucceededGetScale        the HPA controller was able to get the target's current scaleScalingActive  False   FailedGetResourceMetric  the HPA was unable to compute the replica count: missing request for cpu
Events:Type     Reason                        Age                     From                       Message----     ------                        ----                    ----                       -------Warning  FailedComputeMetricsReplicas  3m46s (x12 over 6m33s)  horizontal-pod-autoscaler  invalid metrics (1 invalid out of 1), first error is: failed to get cpu utilization: missing request for cpuWarning  FailedGetResourceMetric       89s (x21 over 6m33s)    horizontal-pod-autoscaler  missing request for cpu

我们现在以上面创建的deployment资源web来实践下hpa的效果,首先用我们学到的方法导出web的yaml配置,并增加资源分配配置增加

# cat web.yaml
apiVersion: apps/v1
kind: Deployment
metadata:labels:app: webname: webnamespace: default
spec:replicas: 1selector:matchLabels:app: webtemplate:metadata:labels:app: webspec:containers:- image: nginxname: nginxresources:limits:   # 因为我这里是测试环境,所以这里CPU只分配50毫核(0.05核CPU)和20M的内存cpu: "50m"memory: 20Mirequests: # 保证这个pod初始就能分配这么多资源cpu: "50m"memory: 20Mi

更新web资源:

# kubectl  apply -f web.yaml
deployment.apps/web configured

然后创建hpa:

# kubectl  autoscale deployment web --max=3 --min=1 --cpu-percent=50
horizontalpodautoscaler.autoscaling/web autoscaled# 等待一会,可以看到相关的hpa信息(K8s上metrics服务收集所有pod资源的时间间隔大概在60s的时间)
# kubectl get hpa -w
NAME   REFERENCE        TARGETS         MINPODS   MAXPODS   REPLICAS   AGE
web    Deployment/web   <unknown>/50%   1         3         1          39s
web    Deployment/web   0%/50%          1         3         1          76s

我们来模拟业务流量增长,看看hpa自动伸缩的效果:

# 我们启动一个临时pod,来模拟大量请求
# kubectl run -it --rm busybox --image=busybox -- sh
/ # while :;do wget -q -O- http://web;done# 等待2 ~ 3分钟,注意k8s为了避免频繁增删pod,对副本的增加速度有限制
# kubectl get hpa web -w
NAME   REFERENCE        TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
web    Deployment/web   0%/50%    1         3         1          11m
web    Deployment/web   102%/50%   1         3         1          14m
web    Deployment/web   102%/50%   1         3         3          14m# 看下hpa的描述信息下面的事件记录
# kubectl describe hpa web
Events:Type     Reason                        Age                From                       Message----     ------                        ----               ----                       -------
...Normal   SuccessfulRescale             62s                horizontal-pod-autoscaler  New size: 3; reason: cpu resource utilization (percentage of request) above target

HPA的自动扩容已经测试了,现在停掉压测,观察下HPA的自动收缩功能:

# 可以看到,在业务流量高峰下去后,HPA并不急着马上收缩pod数量,而是等待5分钟后,再进行收敛,这是稳妥的作法,是k8s为了避免频繁增删pod的一种手段
# kubectl get hpa web -w
NAME   REFERENCE        TARGETS    MINPODS   MAXPODS   REPLICAS   AGE
web    Deployment/web   102%/50%   1         3         3          16m
web    Deployment/web   0%/50%     1         3         3          16m
web    Deployment/web   0%/50%     1         3         3          20m
web    Deployment/web   0%/50%     1         3         1          21m

HPA 自动水平伸缩 POD相关推荐

  1. k8s Pod的自动水平伸缩(HPA)

    HPA(Horizontal Pod Autoscaler ) pod的自动水平伸缩 有了HPA,我们就不用为上面的问题而烦恼,HPA会帮我们自动完成pod的扩缩容. 当资源需求过高时,会自动创建出p ...

  2. k8s HPA(HorizontalPodAutoscaler)-自动水平伸缩

    Horizontal Pod Autoscaling in Kubernetes 写在前面 我们平时部署web服务,当服务压力大撑不住的时候,我们会加机器(加钱):一般没有上容器编排是手动加的,临时加 ...

  3. K8s --HPA容器水平伸缩

    目录 一.什么是HPA 1.HPA伸缩过程 2.HPA进行伸缩算法 二.HPA实例 创建HPA 1.压力测试 2.同时监控cpu和memory 一.什么是HPA HPA的全称为(Horizontal ...

  4. 运维实操——kubernetes(十九)k8s中部署Prometheus、监控nginx、HPA自动伸缩

    k8s中部署Prometheus.监控nginx.HPA自动伸缩 1.什么是Prometheus? 2.k8s中部署Prometheus监控 3.prometheus监控nginx 4.基于prome ...

  5. k8s-自动横向伸缩pod 根据CPU使用率,QPS访问数监控指标

    k8s-自动横向伸缩pod 与节点 简述 我们可以通过调高ReplicationController. ReplicaSet. Deployment等可伸缩资源的rep让cas字段, 来手动实现pod ...

  6. 如何利用Kubernetes实现自动弹性伸缩

    弹性伸缩是Kubernetes的核心功能之一,它允许Kubernetes根据应用程序的需求自动增加或减少容器实例的数量.这不仅可以提高应用程序的可用性和性能,还可以降低基础设施的成本和资源的浪费. 在 ...

  7. 测试Hpa自动扩缩容

    一.Hpa设置 最大pod副本数为5,最小pod副本数为3 平均cpu为10% 二.查看当前pod资源消耗 `kubectl top pod -n test` 三.创建一个service服务,type ...

  8. 在阿里云上进行Docker应用的自动弹性伸缩

    简介 上次介绍了通过监控集成实现容器的自定义弹性伸缩.最近阿里云Docker容器服务发布了自动弹性伸缩的支持,可以非常方便的支持容器的自动弹性伸缩,从而更好的支持应用的弹性管理.能够自动的监控容器应用 ...

  9. 架构垂直伸缩和水平伸缩区别_简单的可伸缩图神经网络

    架构垂直伸缩和水平伸缩区别 巨型图上的深度学习 (Deep learning on giant graphs) TL;DR: One of the challenges that have so fa ...

最新文章

  1. 如何卸载sql2008,完全清除
  2. 无空头的链表代码:学生管理系统
  3. 201912-3 化学方程式
  4. CD(Continuous Deployment)实战问题之unable to read askpass解决
  5. 什么原数据更容易平稳_为什么老年人更容易患上艾滋病?
  6. ios 镜像_2020年微软MSDN原版系统镜像下载 包含Windows10/7/8/8.1/XP系统
  7. AS3文本框的操作,为密码框添加按钮
  8. mysql ocp 题库部分解析
  9. echart 三维可视化地图_ECharts实现三维可视化
  10. 西数服务器硬盘300G,特立独行 西数300G万转猛禽硬盘欣赏
  11. 模拟摄影测量和数字摄影测量
  12. 详解区块链(很详很长)
  13. Apache Hudi调研小记
  14. 笔记本换硬盘装系统完整教程(简单)
  15. Linux系统下查找最近修改过的文件
  16. SEAndroid安全机制框架分析
  17. 第二届安洵杯2019部分writeup
  18. 如何使用“GPU 呈现模式”进行卡顿问题定位
  19. 第三章、三元运算、文件处理、函数
  20. 笔记本电脑相关术语详解

热门文章

  1. JavaScript特殊转义字符(二十五)
  2. android actionbar 自定义布局,ActionBar 自定义布局定义
  3. HarmonyOS应用开发-基本控件
  4. 计算机应用研究英文翻译,英汉机器翻译中的长句切分处理问题研究
  5. 计算机的显示器作用是什么意思,电脑显示器上auto是什么意思知道的大神说下...
  6. 10 个免费的网络监控工具(转)
  7. NV21 图像旋转处理 ( 后置摄像头顺时针旋转 90 度 | 前置摄像头顺时针旋转 90 度 )
  8. 【VIM】搜索特殊字符
  9. Linux _学习——Centos8惨痛教训_木马入侵
  10. html link 怎么设置密码,D-Link路由器怎么设置密码?