kubernetes之HPA

本文介绍了Kubernetes中的HorizontalPodAutoscaler(HPA)功能,它通过监控CPU使用率或其他指标自动调整Pod副本数量以实现负载均衡。文章详细讲解了HPA的工作原理、配置方法以及如何配合监控工具如Prometheus。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

HPA(Horizontal Pod Autoscaler)是 Kubernetes 中的一个功能,用于自动调整 Pod 的副本数量,以根据 CPU 使用率或其他指标来实现横向扩展和缩减。

HPA 的工作原理如下:

  1. 用户创建一个 HPA 对象,并指定要自动扩缩容的目标 Deployment、ReplicaSet 或 StatefulSet。
  2. 用户定义了 HPA 的基本配置,包括目标 CPU 使用率、最小/最大副本数量和调整策略等。
  3. HPA 控制器会以一定的时间间隔(默认为 15 秒)查询目标资源的当前 CPU 使用率。
  4. 根据当前的 CPU 使用率和定义的目标使用率,HPA 控制器计算出需要扩展或缩减的副本数量。
  5. 如果计算出的副本数量超过预定义的最小/最大副本数量范围,HPA 控制器会对目标资源进行调整,增加或减少副本的数量。
  6. 调整后的副本数量会导致集群进行自动缩放,以适应负载的变化。

HPA 支持根据 CPU 使用率以外的指标进行自动扩缩容,例如根据内存使用量、网络流量或自定义指标。可以使用 Prometheus、Heapster 等监控工具来收集和提供这些指标。

通过使用 HPA,Kubernetes 用户可以根据负载情况动态调整 Pod 的副本数量,以确保应用程序具有足够的资源来处理流量高峰,并减少资源浪费。这样可以提高应用程序的可伸缩性、性能和稳定性。

需要注意的是,在使用 HPA 之前,需要先部署正确配置的监控系统,并确保目标资源能够提供相应的指标数据供 HPA 控制器使用。

HPA 自动扩缩容

开启指标服务

# 下载 metrics-server 组件配置文件
wget https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml -O metrics-server-components.yaml

# 修改镜像地址为国内的地址
sed -i 's/k8s.gcr.io\/metrics-server/registry.cn-hangzhou.aliyuncs.com\/google_containers/g' metrics-server-components.yaml

# 修改容器的 tls 配置,不验证 tls,在 containers 的 args 参数中增加 --kubelet-insecure-tls 参数

# 安装组件
kubectl apply -f metrics-server-components.yaml

# 查看 pod 状态
kubectl get pods --all-namespaces | grep metrics


cpu,内存指标监控

实现 cpu 或内存的监控,首先有个前提条件是该对象必须配置了 resources.requests.cpu 或 resources.requests.memory 才可以,可以配置当 cpu/memory 达到上述配置的百分比后进行扩容或缩容

创建一个 HPA:
先准备一个好一个有做资源限制的 deployment
执行命令 kubectl autoscale deploy nginx-deploy --cpu-percent=20 --min=2 --max=5
通过 kubectl get hpa 可以获取 HPA 信息

测试:找到对应服务的 service,编写循环测试脚本提升内存与 cpu 负载
while true; do wget -q -O- http://<ip:port> > /dev/null ; done

可以通过多台机器执行上述命令,增加负载,当超过负载后可以查看 pods 的扩容情况 kubectl get pods

查看 pods 资源使用情况
kubectl top pods

扩容测试完成后,再关闭循环执行的指令,让 cpu 占用率降下来,然后过 5 分钟后查看自动缩容情况

自定义metrics

控制管理器开启–horizontal-pod-autoscaler-use-rest-clients
控制管理器的–apiserver指向API Server Aggregator
在API Server Aggregator中注册自定义的metrics API
### 设置和使用Kubernetes中的Horizontal Pod Autoscaler #### 创建具有可扩展性的部署 为了能够利用HPA,首先需要创建一个可以被水平扩展的应用程序。通常这涉及到创建一个Deployment对象。 ```yaml apiVersion: apps/v1 kind: Deployment metadata: name: example-app spec: replicas: 3 selector: matchLabels: app: example template: metadata: labels: app: example spec: containers: - name: example-container image: nginx resources: requests: cpu: "200m" memory: "512Mi" ``` 此YAML文件定义了一个名为`example-app`的Deployment,并指定了三个副本(replicas),以及容器所需的最小资源(cpu和memory)[^2]。 #### 定义HPA对象 一旦有了上述的Deployment,就可以为其配置HPA。下面是一个简单的例子: ```yaml apiVersion: autoscaling/v2beta2 kind: HorizontalPodAutoscaler metadata: name: example-hpa spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: example-app minReplicas: 3 maxReplicas: 10 metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: 70 ``` 这段代码片段设置了针对之前提到的`example-app`的一个HPA实例。它会监控CPU利用率并尝试保持平均利用率约为70%;如果超过这个阈值,则增加更多的pods直到达到最大允许的数量(`maxReplicas`)为止[^5]。 #### 应用配置到集群中 要使这些更改生效,需将上面两个YAML文档应用至Kubernetes集群内。可以通过命令行工具kubectl完成这项工作: ```bash $ kubectl apply -f deployment.yaml $ kubectl apply -f hpa.yaml ``` 这样就完成了基本的HPA设置过程。需要注意的是,实际环境中可能还需要考虑更多因素如网络流量、延迟等其他性能指标作为触发条件之一[^4]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@Saint

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值