网络平台 策划方案,四川seo推广方案,烟台食品公司中企动力提供网站建设,昆明体育城微网站建设文章目录 前言HPA简介简单理解详细解释HPA 的工作原理监控系统负载模式HPA 的优势使用 HPA 的注意事项应用类型 应用环境1.metircs-server部署2.HPA演示示例#xff08;1#xff09;部署一个服务#xff08;2#xff09;创建HPA对象#xff08;3#xff09;执行压测 前言… 文章目录 前言HPA简介简单理解详细解释HPA 的工作原理监控系统负载模式HPA 的优势使用 HPA 的注意事项应用类型 应用环境1.metircs-server部署2.HPA演示示例1部署一个服务2创建HPA对象3执行压测 前言
有任何疑问或不懂的地方均可评论或私信欢迎交流
HPA简介
简单理解
HAP全称 Horizontal Pod Autoscaler
简单来说就是根据指标来对pod副本数量进行自动控制 比如说cpu和内存使用率
HPA 定期检查内存和 CPU 使用率高就会自动创建多个副本(上限取决于自定义的数量) 使用率低就会关闭多个副本(下限取决于自定义的数量)
实际生产中广泛使用这四类指标 1、Resource metrics - CPU和内存利用率指标 2、Pod metrics - 例如网络利用率和流量 3、Object metrics - 特定对象的指标比如Ingress, 可以按每秒使用请求数来扩展容器 4、Custom metrics - 自定义监控比如通过定义服务响应时间当响应时间达到一定指标时自动扩容 详细解释
在 Kubernetes (k8s) 中HPA 指的是 Horizontal Pod Autoscaler水平 Pod 自动伸缩。这是 Kubernetes 中用于自动调整 Pod 副本数量的机制以应对负载的变化确保应用程序的高可用性和资源的有效利用。 HPA 的工作原理
监控指标 HPA 通过 Kubernetes Metrics Server 或者其他自定义的指标如 Prometheus定期获取当前的负载情况。常见的指标包括 CPU 使用率、内存使用率、自定义指标例如 QPS查询每秒等。
调整策略 根据定义的策略HPA 会判断是否需要增加或减少 Pod 的数量。例如如果 CPU 使用率超过预设的阈值HPA 会增加 Pod 的数量如果 CPU 使用率低于预设的阈值HPA 会减少 Pod 的数量。 监控系统
HPA 依赖于监控系统提供的指标数据常见的监控系统包括
Kubernetes Metrics Server 提供基础的 CPU 和内存使用率数据。
Prometheus 一个更强大的监控系统可以自定义多种指标并与 Kubernetes 集成。
Datadog、New Relic 等第三方监控工具 可以提供更详细的应用监控数据。 负载模式
根据应用的负载模式配置 HPA 的策略
周期性负载 如果应用负载有明显的周期性变化如电商网站的流量在白天和晚上波动可以根据历史数据调整 HPA 策略。
突发负载 对于突发性负载如新闻网站在重大事件发生时流量激增需要配置更灵活的伸缩策略以快速响应负载变化。
持续增长负载 对于持续增长的负载如新产品发布后的用户增长需要确保 HPA 能够持续扩展并保持应用性能。
HPA 的优势
自动化伸缩 根据负载自动调整 Pod 数量确保应用在高负载下能够提供足够的计算资源而在低负载下又不浪费资源。
高可用性 通过及时增加 Pod 数量防止应用因为资源不足而出现性能问题。
节约成本 通过在低负载时减少 Pod 数量节省资源和成本。 使用 HPA 的注意事项
监控数据源 确保 Metrics Server 或者其他指标数据源的稳定性和准确性否则 HPA 的调整可能不准确。
冷启动时间 在负载激增时新增的 Pod 可能需要一些时间启动应用需要考虑这一点避免在短时间内出现资源不足的情况。
阈值设置 合理设置指标阈值避免频繁的伸缩操作造成系统的不稳定。 应用类型
HPA 适用于以下类型的应用
Web 应用 具有高并发请求特点的应用可以通过 HPA 在流量高峰时增加 Pod 数量保证响应速度。
后台处理服务 如数据处理、消息队列消费者等根据任务队列的长度或处理速度进行伸缩。
微服务架构 每个服务可以独立伸缩HPA 可以根据每个服务的负载情况动态调整 Pod 数量
应用
虚拟机
环境
Ip主机名cpu内存硬盘192.168.10.11master012cpu双核4G100G192.168.10.12worker012cpu双核4G100G192.168.10.13worker022cpu双核4G100G
版本 centos7.9 已部署k8s-1.27
1.metircs-server部署
master上操作
wget https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/high-availability-1.21.yamlkubelet 证书需要由集群证书颁发机构签名
(或者通过向 Metrics Server 传递参数 --kubelet-insecure-tls 来禁用证书验证)。
更改文件
vim high-availability-1.21.yaml149行添加 解释 因为是虚拟机环境这条命令是允许 kubelet 使用不安全的 TLS 连接生产环境不建议使用这里是便于快速部署和测试已看到效果。
kubectl apply -f high-availability-1.21.yaml
watch kubectl get pods -n kube-system 耐心等待如果一直起不来就先删除pod再重启个节点docker。
kubectl top nodeskubectl top pods -n kube-system这里就部署好了让我们来演示一下
2.HPA演示示例
1部署一个服务
mkdir hpa
cd hpa/
vim 01-nginx.yamlapiVersion: apps/v1
kind: Deployment
metadata:labels:app: nginxname: nginxnamespace: default
spec:replicas: 2selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:latestimagePullPolicy: IfNotPresentresources:requests:cpu: 200mmemory: 100Mi
---
apiVersion: v1
kind: Service
metadata:name: nginxnamespace: default
spec:type: NodePortports:- port: 80targetPort: 80selector:app: nginxkubectl apply -f 01-nginx.yaml
kubectl get pods如果没有镜像可能会慢点耐心等待即可 这是不是报错是再重新拉取镜像再耐心等待一下即可
好了
2创建HPA对象
这是一个 HorizontalPodAutoscaler (HPA) 对象的配置它将控制 Deployment “nginx” 的副本数量。当 CPU 使用率超过 50% 时HPA 将自动增加 Pod 的副本数量最高不超过 10 个。
vim 02-nginx-hpa.yamlapiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:name: nginx-hpanamespace: default
spec:scaleTargetRef:apiVersion: apps/v1kind: Deploymentname: nginxminReplicas: 1maxReplicas: 10metrics:- type: Resourceresource:name: cputarget:type: UtilizationaverageUtilization: 50kubectl apply -f 02-nginx-hpa.yaml
kubectl get hpa3执行压测
下载工具查看服务ip yum -y install httpd-toolskubectl get svcab -c 1000 -n 100000000000 http://192.168.10.11:32435/打开另一个终端查看 可以看到正在增加
kubectl get hpa可以看到再不断变多
kubectl get hpa指标会越来越小
10个是因为最高设置的10个
压力测试停止一段时间后查看
kubectl get podspod会越来越少 直到设置的最小数量
kubectl get hpa大约5分钟以后
kubectl get hpa
kubectl get pods可以看到pod数量已经到设置最小数量
至此 完成