HPA 自动水平伸缩 POD
前戏
我们知道,初始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相关推荐
- k8s Pod的自动水平伸缩(HPA)
HPA(Horizontal Pod Autoscaler ) pod的自动水平伸缩 有了HPA,我们就不用为上面的问题而烦恼,HPA会帮我们自动完成pod的扩缩容. 当资源需求过高时,会自动创建出p ...
- k8s HPA(HorizontalPodAutoscaler)-自动水平伸缩
Horizontal Pod Autoscaling in Kubernetes 写在前面 我们平时部署web服务,当服务压力大撑不住的时候,我们会加机器(加钱):一般没有上容器编排是手动加的,临时加 ...
- K8s --HPA容器水平伸缩
目录 一.什么是HPA 1.HPA伸缩过程 2.HPA进行伸缩算法 二.HPA实例 创建HPA 1.压力测试 2.同时监控cpu和memory 一.什么是HPA HPA的全称为(Horizontal ...
- 运维实操——kubernetes(十九)k8s中部署Prometheus、监控nginx、HPA自动伸缩
k8s中部署Prometheus.监控nginx.HPA自动伸缩 1.什么是Prometheus? 2.k8s中部署Prometheus监控 3.prometheus监控nginx 4.基于prome ...
- k8s-自动横向伸缩pod 根据CPU使用率,QPS访问数监控指标
k8s-自动横向伸缩pod 与节点 简述 我们可以通过调高ReplicationController. ReplicaSet. Deployment等可伸缩资源的rep让cas字段, 来手动实现pod ...
- 如何利用Kubernetes实现自动弹性伸缩
弹性伸缩是Kubernetes的核心功能之一,它允许Kubernetes根据应用程序的需求自动增加或减少容器实例的数量.这不仅可以提高应用程序的可用性和性能,还可以降低基础设施的成本和资源的浪费. 在 ...
- 测试Hpa自动扩缩容
一.Hpa设置 最大pod副本数为5,最小pod副本数为3 平均cpu为10% 二.查看当前pod资源消耗 `kubectl top pod -n test` 三.创建一个service服务,type ...
- 在阿里云上进行Docker应用的自动弹性伸缩
简介 上次介绍了通过监控集成实现容器的自定义弹性伸缩.最近阿里云Docker容器服务发布了自动弹性伸缩的支持,可以非常方便的支持容器的自动弹性伸缩,从而更好的支持应用的弹性管理.能够自动的监控容器应用 ...
- 架构垂直伸缩和水平伸缩区别_简单的可伸缩图神经网络
架构垂直伸缩和水平伸缩区别 巨型图上的深度学习 (Deep learning on giant graphs) TL;DR: One of the challenges that have so fa ...
最新文章
- 如何卸载sql2008,完全清除
- 无空头的链表代码:学生管理系统
- 201912-3 化学方程式
- CD(Continuous Deployment)实战问题之unable to read askpass解决
- 什么原数据更容易平稳_为什么老年人更容易患上艾滋病?
- ios 镜像_2020年微软MSDN原版系统镜像下载 包含Windows10/7/8/8.1/XP系统
- AS3文本框的操作,为密码框添加按钮
- mysql ocp 题库部分解析
- echart 三维可视化地图_ECharts实现三维可视化
- 西数服务器硬盘300G,特立独行 西数300G万转猛禽硬盘欣赏
- 模拟摄影测量和数字摄影测量
- 详解区块链(很详很长)
- Apache Hudi调研小记
- 笔记本换硬盘装系统完整教程(简单)
- Linux系统下查找最近修改过的文件
- SEAndroid安全机制框架分析
- 第二届安洵杯2019部分writeup
- 如何使用“GPU 呈现模式”进行卡顿问题定位
- 第三章、三元运算、文件处理、函数
- 笔记本电脑相关术语详解
热门文章
- JavaScript特殊转义字符(二十五)
- android actionbar 自定义布局,ActionBar 自定义布局定义
- HarmonyOS应用开发-基本控件
- 计算机应用研究英文翻译,英汉机器翻译中的长句切分处理问题研究
- 计算机的显示器作用是什么意思,电脑显示器上auto是什么意思知道的大神说下...
- 10 个免费的网络监控工具(转)
- NV21 图像旋转处理 ( 后置摄像头顺时针旋转 90 度 | 前置摄像头顺时针旋转 90 度 )
- 【VIM】搜索特殊字符
- Linux _学习——Centos8惨痛教训_木马入侵
- html link 怎么设置密码,D-Link路由器怎么设置密码?