千家信息网

Kubernetes集群中HPA实现pod副本数量的自动扩容与缩容

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,Kubernetes集群可以通过Replication Controller的scale机制完成服务的扩容或缩容,实现具有伸缩性的服务。Kubernetes集群自动伸缩分为:sacle手动伸缩:可参考
千家信息网最后更新 2026年11月02日Kubernetes集群中HPA实现pod副本数量的自动扩容与缩容

Kubernetes集群可以通过Replication Controller的scale机制完成服务的扩容或缩容,实现具有伸缩性的服务。

Kubernetes集群自动伸缩分为:

  • sacle手动伸缩:可参考K8s资源对象的基本管理之使用命令行的方式(升级、回滚、扩容、缩容);
  • autoscale自动伸缩:也就是本篇博文所介绍的HPA;

Kubernetes自动扩展主要分为:

  • 水平扩展:针对实例数目的增减;
  • 垂直扩展:也就是单个实例就可以使用的资源的增减,比如增加CPU、内存;

一、HPA简介

HPA的全称为(Horizontal Pod Autoscaling)它可以根据当前pod资源的使用率(如CPU、磁盘、内存等),进行副本数的动态的扩容与缩容,以便减轻各个pod的压力。当pod负载达到一定的阈值后,会根据扩缩容的策略生成更多新的pod来分担压力,当pod的使用比较空闲时,在稳定空闲一段时间后,还会自动减少pod的副本数量。

若要实现自动扩缩容的功能,还需要部署heapster服务,用来收集及统计资源的利用率,支持kubectl top命令,heapster服务集成在prometheus(普罗米修斯) MertricServer服务中,所以说,为了方便,我这里基于prometheus服务的环境上进行部署HPA(动态扩缩容)的服务。

可以参考博文Kubernetes的三种可视化UI界面中的第三个部署Prometheus服务,来运行prometheus服务,如果不想部署prometheus,那么可以参考github上来单独部署heapster服务。

说这么多,总之就是想要使用HPA,就必须保证,可以在master节点上执行如下命令:

[root@master ~]# kubectl top node      #查看节点的资源使用情况NAME     CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%   master   1317m        65%    1383Mi          80%       node01   1237m        61%    1082Mi          62%       node02   1146m        57%    1045Mi          60%   

二、实现pod自动扩容与缩容

1)生成HPA控制器

[root@master ~]#  kubectl run php-apache --image=mirrorgooglecontainers/hpa-example --requests=cpu=200m --expose --port=80#运行hpa资源,名称为php-apache,并设置请求CPU的资源为200m并暴露一个80端口[root@master ~]# kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10#当hpa资源的deployment资源对象的CPU使用率达到50%时,就进行扩容,最多可以扩容到10个[root@master ~]# kubectl get svc | grep php-apache    #查看php-apache对应的svc群集IPphp-apache   ClusterIP   10.97.45.108           80/TCP    44m[root@master ~]#  kubectl get pod | grep php-apa    #确定当前的pod正常运行php-apache-867f97c8cb-9mpd6   1/1     Running   0          44m

2)模拟消耗php-apache的资源,并验证pod是否会自动扩容与缩容

新开启多个终端(也可使用node节点),对php-apache的pod进行死循环请求,如下(如果你的系统资源比较充足,可以选择开启多个终端,对pod进行死循环请求,我这里开启了两个node的终端,同时请求php-apache的pod):

[root@node01 ~]# while true; do wget -q -O- 10.97.45.108; done              #一直返回ok属于正常现象#模拟多用户对php-apache的pod造成的并发请求
[root@master ~]# kubectl get  hpa   #查看hpa资源对cpu的占用情况#也可使用"-w"选项对CPU资源占用情况实时监控NAME         REFERENCE               TARGETS    MINPODS   MAXPODS   REPLICAS   AGEphp-apache   Deployment/php-apache   416%/50%   1         10        10         56m[root@master ~]#  kubectl get pod#在运行死循环请求一段时间后,查看pod数量,当然使用-w选项对pod的变化进行实时的监控NAME                          READY   STATUS    RESTARTS   AGEphp-apache-867f97c8cb-6jsjq   1/1     Running   0          4m9sphp-apache-867f97c8cb-7xd5x   1/1     Running   0          51sphp-apache-867f97c8cb-9mpd6   1/1     Running   0          56mphp-apache-867f97c8cb-dhng7   1/1     Running   0          3m8sphp-apache-867f97c8cb-qc9hr   1/1     Running   0          2m22sphp-apache-867f97c8cb-rj494   1/1     Running   0          3m38sphp-apache-867f97c8cb-sbn9n   1/1     Running   0          3m38sphp-apache-867f97c8cb-vzfbg   1/1     Running   0          4m9sphp-apache-867f97c8cb-vzfbg   1/1     Running   0          5m19sphp-apache-867f97c8cb-vzfbg   1/1     Running   0          3m39s#当然最大也就只可以产生10个pod,因为我们之前规定最多产生10个pod

当停止死循环请求后,也并不会立即减少pod数量,会等一段时间后减少pod数量,防止流量再次激增。

资源 服务 数量 循环 运行 命令 情况 时间 终端 节点 副本 集群 也就是 使用率 内存 动态 压力 多个 实例 实时 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 湖南永感互联网科技有限公司 重庆互联网络科技 与互联网科技公司 互联网未来科技 互联网科技媒体 世界互联网领先科技成果 佩信高科技互联网 深圳市运趣互联网科技有限公司 中盈科技互联网信息有限公司 阿里巴巴算科技企业还是互联网 重庆威客帮互联网科技 乌鲁木齐新华智原互联网科技学校 西安小鹰速贷互联网科技有限公司 区块链结合互联网科技 上海科技产业互联网平台 上海京穆互联网科技有限公司 小米互联网科技园入驻 抖集互联网科技技术咨询 互联网科技创新方面的资料 株洲百竞科技的互联网营销顾问 银优互联网科技有限公司 苏州大垚互联网科技 山东吉时兔互联网科技有限公司 华中科技有哪些互联网大佬 卫星互联网科技股票 昊天互联网科技有限公司 互联网科技扶贫时间 每天都有哪些好的互联网科技 互联网时代科技型公司的机会 好易买互联网科技
0