Kubernetes HorizontalPodAutoscaler 实战演练:自动扩缩应用实例

Kubernetes HorizontalPodAutoscaler 实战演练:自动扩缩应用实例

website Kubernetes website and documentation repo: website 项目地址: https://gitcode.com/gh_mirrors/webs/website

前言

在现代云原生应用中,自动扩缩是一个核心功能,它能够根据应用负载动态调整资源分配。Kubernetes 提供了 HorizontalPodAutoscaler(HPA)这一强大工具,可以自动调整工作负载(如 Deployment 或 StatefulSet)的 Pod 数量,以匹配不断变化的负载需求。

本文将带你深入了解 HPA 的工作原理,并通过一个完整的实战演练展示如何为 PHP+Apache 应用配置和使用 HPA。

HPA 基础概念

水平扩缩 vs 垂直扩缩

  • 水平扩缩(Horizontal Scaling):通过增加或减少 Pod 数量来应对负载变化
  • 垂直扩缩(Vertical Scaling):通过调整单个 Pod 的资源(CPU/内存)分配来应对负载变化

Kubernetes 的 HPA 实现了水平扩缩,这种方式通常比垂直扩缩更灵活可靠。

HPA 工作原理

HPA 控制器定期(默认每15秒)检查目标工作负载的度量指标,并根据预定义的规则计算所需的 Pod 数量。它会:

  1. 从 Metrics Server 获取当前度量值
  2. 与用户定义的目标值比较
  3. 计算需要调整的副本数量
  4. 更新工作负载的副本数

环境准备

在开始演练前,请确保:

  1. 运行 Kubernetes 1.23 或更高版本
  2. 已安装 Metrics Server(用于收集资源指标)
  3. 如果使用 Minikube,执行 minikube addons enable metrics-server

实战演练

第一步:部署示例应用

我们使用一个运行 PHP 代码的 Apache 服务器作为示例应用:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: php-apache
spec:
  selector:
    matchLabels:
      run: php-apache
  template:
    metadata:
      labels:
        run: php-apache
    spec:
      containers:
      - name: php-apache
        image: registry.k8s.io/hpa-example
        ports:
        - containerPort: 80
        resources:
          requests:
            cpu: 200m

应用这个配置:

kubectl apply -f php-apache.yaml

第二步:创建 HPA

现在为这个 Deployment 创建 HPA:

kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10

这个命令创建了一个 HPA,它会:

  • 监控 php-apache Deployment
  • 保持 CPU 平均利用率在 50% 左右
  • Pod 数量在 1 到 10 个之间自动调整

第三步:验证初始状态

检查 HPA 状态:

kubectl get hpa php-apache

初始状态应显示 CPU 利用率为 0%,因为还没有负载。

第四步:生成负载

在另一个终端中运行负载生成器:

kubectl run -i --tty load-generator --rm --image=busybox:1.28 --restart=Never -- /bin/sh -c "while sleep 0.01; do wget -q -O- http://php-apache; done"

第五步:观察扩缩过程

观察 HPA 如何响应增加的负载:

kubectl get hpa php-apache --watch

你会看到 CPU 利用率上升,随后 HPA 开始增加 Pod 数量。

第六步:停止负载并观察缩容

按 Ctrl+C 停止负载生成器,观察 HPA 如何减少 Pod 数量。

高级配置

多指标扩缩

HPA 支持基于多个指标进行扩缩决策。例如,你可以同时基于 CPU 和内存利用率进行扩缩:

metrics:
- type: Resource
  resource:
    name: cpu
    target:
      type: Utilization
      averageUtilization: 50
- type: Resource
  resource:
    name: memory
    target:
      type: Utilization
      averageUtilization: 50

自定义指标

HPA 还支持 Pod 指标和对象指标等自定义指标:

metrics:
- type: Pods
  pods:
    metric:
      name: packets-per-second
    target:
      type: AverageValue
      averageValue: 1k
- type: Object
  object:
    metric:
      name: requests-per-second
    describedObject:
      apiVersion: networking.k8s.io/v1
      kind: Ingress
      name: main-route
    target:
      type: Value
      value: 10k

最佳实践

  1. 合理设置资源请求:HPA 基于资源请求计算利用率,确保设置合理的 requests 值
  2. 选择合适的度量指标:根据应用特点选择 CPU、内存或自定义指标
  3. 设置合理的边界:避免 minReplicas 过小或 maxReplicas 过大
  4. 考虑冷却时间:频繁扩缩可能导致系统不稳定
  5. 监控 HPA 行为:定期检查 HPA 决策是否符合预期

总结

通过本文的实战演练,你应该已经掌握了:

  1. 如何为 Deployment 创建 HPA
  2. HPA 如何根据 CPU 利用率自动扩缩
  3. 如何基于多个指标和自定义指标进行扩缩
  4. HPA 的最佳实践

HPA 是 Kubernetes 自动化的核心组件之一,合理使用可以显著提高资源利用率和应用可用性。建议在实际生产环境中结合监控告警系统,持续优化 HPA 配置。

website Kubernetes website and documentation repo: website 项目地址: https://gitcode.com/gh_mirrors/webs/website

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

资源下载链接为: https://pan.quark.cn/s/3d8e22c21839 随着 Web UI 框架(如 EasyUI、JqueryUI、Ext、DWZ 等)的不断发展与成熟,系统界面的统一化设计逐渐成为可能,同时代码生成器也能够生成符合统一规范的界面。在这种背景下,“代码生成 + 手工合并”的半智能开发模式正逐渐成为新的开发趋势。通过代码生成器,单表数据模型以及一对多数据模型的增删改查功能可以被直接生成并投入使用,这能够有效节省大约 80% 的开发工作量,从而显著提升开发效率。 JEECG(J2EE Code Generation)是一款基于代码生成器的智能开发平台。它引领了一种全新的开发模式,即从在线编码(Online Coding)到代码生成器生成代码,再到手工合并(Merge)的智能开发流程。该平台能够帮助开发者解决 Java 项目中大约 90% 的重复性工作,让开发者可以将更多的精力集中在业务逻辑的实现上。它不仅能够快速提高开发效率,帮助公司节省大量的人力成本,同时也保持了开发的灵活性。 JEECG 的核心宗旨是:对于简单的功能,可以通过在线编码配置来实现;对于复杂的功能,则利用代码生成器生成代码后,再进行手工合并;对于复杂的流程业务,采用表单自定义的方式进行处理,而业务流程则通过工作流来实现,并且可以展出任务接口,供开发者编写具体的业务逻辑。通过这种方式,JEECG 实现了流程任务节点和任务接口的灵活配置,既保证了开发的高效性,又兼顾了项目的灵活性和可展性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

任翊昆Mary

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

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

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

打赏作者

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

抵扣说明:

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

余额充值