【从入门到放弃-Kubernetes】Kubernetes进阶-pod水平自动伸缩(hpa)
前言
前面 Kubernetes入门 系列,我们学习了k8s的基础知识和简单用法,今天开始我们继续进一步学习,了解一些复杂和高级用法。本文我们学习pod水平自动扩缩容即hpa。
hpa全称是Horizontal Pod Autoscaler,可以基于CPU的利用率或其它指标自动伸缩replication controller、deployment和 replica set 中的 pod 数量。
我们可以根据标准应用系统的CPU等指标的周期性变化情况,通过HPA进行动态扩缩容以此来提高集群的资源利用率。
准备
hpa通过metrics-server,监控集群运行指标触发扩缩容的,使用前需要先确保metrics-server是可用状态。
minikube addons list
观察metrics-server是否是可用状态,如果是disabled。则需要执行以下命令开启。
minikube addons enable metrics-server
此时执行kubectl top命令即可查看pod、node的cpu、memory的使用消耗情况。
如果想禁用metrics-server,disable即可
minikube addons disable metrics-server
启动应用并暴露服务
我们参考官方demo,使用PHP提供http服务,进行CPU密集型计算。观察CPU和pod自动扩缩容情况。
准备镜像
这里创建一个CPU密集型PHP脚本,并打成镜像。
也可以直接用我打好的镜像 registry.cn-hangzhou.aliyuncs.com/larswang/php-hpa:1.0,跳过这一步,直接看Deployment。
文件及源码地址见:AloofJr
# Dockerfile FROM php:7.4.6-apache ADD index.php /var/www/html/index.php RUN chmod a+rx index.php
// index.php <?php $x = 0.0001; for ($i = 0; $i <= 1000000; $i++) { $x += sqrt($x); } echo "OK!"; ?>
Deployment
apiVersion: apps/v1 kind: Deployment metadata: name: php-hpa-deployment labels: app: php-hpa spec: replicas: 1 selector: matchLabels: app: php-hpa template: metadata: labels: app: php-hpa spec: containers: - name: php-hpa image: registry.cn-hangzhou.aliyuncs.com/larswang/php-hpa:1.0 ports: - containerPort: 80 resources: requests: cpu: 200m
Service 暴露服务
apiVersion: v1 kind: Service metadata: name: php-hpa-service spec: type: ClusterIP selector: app: php-hpa ports: - port: 80
HPA
创建HPA
创建hpa设置pod扩缩最多和最少的数量以及执行扩缩容的条件。
apiVersion: autoscaling/v1 kind: HorizontalPodAutoscaler metadata: name: php-hpa spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: php-hpa-deployment minReplicas: 1 #pod最小数量 maxReplicas: 10 #pod最大数量 targetCPUUtilizationPercentage: 10 #cpu使用率超过10%进行扩容,小于10%缩容
观察HPA运行情况
kubectl get hpa
可以看到以下指标
TARGETS:目前CPU使用率是0%,10%是我们设置的扩缩容阙值。
MINPODS:pod最小数量
MAXPODS:pod最大数量
REPLICAS:当前副本数,因为我们的cpu使用率是0%,当前副本数是1。
增加负载
我们使用busybox,不断的对php-hpa-service发起http调用,增加服务端压力。
# 使用busybox并进入容器 kubectl run -i --rm --tty load-generator --image=busybox /bin/sh # 不断发起http请求 while true; do wget -q -O- http://php-hpa-service; done
查看hpa情况
cpu利用率143%了,此时REPLICAS还是1,再等一会儿
可以看到REPLICAS已经扩到了10个pod,cpu负载平均到了35%,虽然比我们配置的10%高,但是扩到了最多MAXPODS 10个,所以不会继续扩容了
降低负载
停掉load-generator发压,等几分钟(可以通过--horizontal-pod-autoscaler-downscale-stabilization设置缩容冷却时间,默认五分钟)。
可以看到REPLICAS缩到了1个pod。
总结
上面介绍了根据CPU利用率进行HPA的操作,其实在实际工作中,HPA是一个非常复杂的课题,因为影响应用运行状态的不单单是CPU,会和内存、ERROR数、线程数等多项指标相关。
在扩容时,还要考虑资源额度、数据库连接数等。
在缩容时则需要更小心了,要时刻关注应用的运行状态,是很容易引发容量故障的。
更复杂的还有,应用系统是否非标、是CPU密集型还是内存密集型应用、系统的流量变化周期、如何应对突发流量等等。
欢迎感兴趣或有实战经验的大神们来交流探讨。
文件用到的yaml配置可以在AloofJr找到。
更多文章
见我的博客:https://nc2era.com
written by AloofJr,转载请注明出处
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
把中小企业数据安全困局解脱出来势在必行
互联网、大数据等信息技术的应用虽然促进了企业的发展,但同时也带来了一定的弊端。比如,数据信息泄露,企业数据一旦泄露不仅会带来一定的负面影响,也会带来一定的经济损失。因此,中小型企业在发展的过程中也要注重数据安全的建设。 从华住酒店集团近6亿条数据被暴露,到点评类网站数据造假,再到微盟公司程序员删库跑路,无数血淋淋的案例告诉我们:对于今天的商业组织,数据就是核心资产和命脉;甚至可以说:“企业经营的本质即数据运营”。与核心数据资产相比,精干的管理人员好像没那么重要,昂贵的设备好像没那么重要,华美的办公楼好像也没那么重要。 同步地,在国家政策不断明晰和行业监管持续引导的大背景下,数据安全已经成为网络安全行业的投融资热点,更是全社会焦点话题。但不尽如人意的是,参与数据安全相关法律法规和行业标准制定的多是部委机关、科研院所以及行业寡头;试点落实数据安全防护技术多是监管单位和大型企业;数据安全保护技术亦呈现出技术壁垒极高,成本造价极高的态势。数据安全似乎与中小企业关系甚少。 事实上,一方面,中小企业是国民经济的重要组成。根据国家经济统计局数据,中小企业占比中国企业总数90%,GDP贡献达全国65%...
- 下一篇
你必须知道的云计算知识(上)
最近订阅学习了《深入浅出云计算》专栏,一口气学完之后,做了一些总结笔记形成此文,特分享与你,希望对你有所帮助!本文为上半部分,主要总结了IaaS篇的核心要点。 零、开篇词 1、开发者为何要学习云计算? (1)历经多年发展已成熟并成为一种潮流,企业数字化转型的组成部分。 (2)产业的发展必然影响个体: 未来更多的应用都会运行在云上,架构模式和思维方式也会更多地与云契合共生! (3)很多人对云的特性还不够熟悉,对云产品存在误解甚至偏见。 2、开发者应该如何学习云计算? 尽可能多地结合应用场景来解析云的概念和能力,学习“用云”而非“做云”;对于我们程序员学习者而言,也是如此,重点放在用云上即可! 不进行“厂商绑定”而是同时观察运用多个主流云厂商的服务,了解共性和差异性;对于我们学习者而言,先了解共性和差异,再重点放在企业所选择的云服务商提供的产品上重点关注! 一、Iaas篇 IaaS 的本质,是对云数据中心和各类 IT 基础设施的抽象,是基于软件技术对物理硬件进行的封装和虚拟。 1、区域和可用区 区域对应云厂商在某个地理位置提供的所有云服务的组合=>对外提供云服务的基本单位和容器;区域...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- 2048小游戏-低调大师作品
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS8安装Docker,最新的服务器搭配容器使用
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Windows10,CentOS7,CentOS8安装Nodejs环境
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- 设置Eclipse缩进为4个空格,增强代码规范
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16