当前位置:首页 > 技术文章 > 正文内容

如何在 Kubernetes 中实现自动扩缩容(HPA)

arlanguage3个月前 (01-31)技术文章30

如何在 Kubernetes 中实现自动扩缩容(HPA)

Kubernetes 的自动扩缩容功能(Horizontal Pod Autoscaler,简称 HPA)是运维和开发人员管理应用负载的重要工具。通过 HPA,Kubernetes 可以根据 CPU 使用率、内存使用率或其他自定义指标,自动调整 Pod 的数量,从而确保应用在高负载时能够扩展,在低负载时能够收缩,既提高了资源利用率,又保证了应用的稳定性。


本文将详细介绍如何在 Kubernetes 中配置和使用 HPA,并结合实际示例帮助您快速上手。


1. HPA 的工作原理


HPA 的核心原理是通过监控目标 Pod 的资源使用情况(如 CPU、内存)或自定义指标,动态调整 Pod 的副本数量。HPA 的工作流程如下:

  1. 监控指标:HPA 从 Metrics Server 或其他监控系统中获取目标 Pod 的资源使用情况。
  2. 计算期望副本数:根据当前指标值和目标值,计算所需的 Pod 副本数。
  3. 调整副本数:通过 Kubernetes API 更新 Deployment 或 ReplicaSet 的副本数。
  4. 持续监控:HPA 会定期检查指标,并根据需要调整副本数。

2. 前提条件

在配置 HPA 之前,请确保您的 Kubernetes 集群满足以下条件:

  • Metrics Server:HPA 依赖于 Metrics Server 来获取 Pod 的资源使用情况。如果您的集群尚未安装 Metrics Server,可以通过以下命令安装:
  • kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
  • 资源请求配置:HPA 需要 Pod 配置资源请求(requests),例如 CPU 和内存。如果未配置资源请求,HPA 将无法正常工作。

3. 配置 HPA

3.1 创建 Deployment

首先,我们需要创建一个 Deployment 作为 HPA 的目标。以下是一个简单的 Nginx Deployment 示例:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        resources:
          requests:
            cpu: "200m"  # 配置 CPU 请求
            memory: "128Mi"

使用以下命令创建 Deployment:

kubectl apply -f nginx-deployment.yaml

3.2 创建 HPA

接下来,我们为 Deployment 创建一个 HPA。以下是一个基于 CPU 使用率的 HPA 示例:

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: nginx-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: nginx-deployment
  minReplicas: 2  # 最小副本数
  maxReplicas: 10  # 最大副本数
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 50  # 目标 CPU 使用率

使用以下命令创建 HPA:

kubectl apply -f nginx-hpa.yaml

3.3 验证 HPA

创建 HPA 后,可以通过以下命令查看 HPA 的状态:

kubectl get hpa

输出示例:

NAME         REFERENCE                     TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
nginx-hpa    Deployment/nginx-deployment   50%/50%   2         10        2          1m
  • TARGETS:当前指标值与目标值的比率。
  • REPLICAS:当前的 Pod 副本数。

4. 测试 HPA

为了测试 HPA 的效果,我们可以通过增加负载来触发自动扩容。

4.1 增加负载

使用 kubectl run 创建一个临时的 Pod 来模拟负载:

kubectl run -i --tty load-generator --image=busybox --restart=Never -- /bin/sh -c "while true; do wget -q -O- http://nginx-deployment; done"

4.2 观察 HPA 变化

通过以下命令观察 HPA 的变化:

kubectl get hpa -w

当 CPU 使用率超过目标值(50%)时,HPA 会自动增加 Pod 的副本数。

4.3 减少负载

停止负载生成 Pod:


kubectl delete pod load-generator

当负载降低后,HPA 会自动减少 Pod 的副本数。

  1. 高级配置
    5.1 基于内存的自动扩缩容
    除了 CPU,HPA 还支持基于内存的自动扩缩容。只需在 HPA 的 metrics 部分添加内存指标即可:
metrics:
- type: Resource
  resource:
    name: memory
    target:
      type: Utilization
      averageUtilization: 50

5.2 自定义指标

HPA 还支持基于自定义指标的自动扩缩容。例如,可以根据请求量或队列长度来调整 Pod 的副本数。具体配置需要结合 Prometheus 和 Kubernetes Custom Metrics API 实现。

6. 总结

通过 HPA,Kubernetes 可以自动调整应用的 Pod 数量,确保应用在

高负载时能够扩展,在低负载时能够收缩。本文介绍了如何配置基于 CPU 和内存的 HPA,并提供了测试方法和高级配置建议。

扫描二维码推送至手机访问。

版权声明:本文由AR编程网发布,如需转载请注明出处。

本文链接:http://www.arlanguage.com/post/1671.html

标签: nginx 1.6.2
分享给朋友:

“如何在 Kubernetes 中实现自动扩缩容(HPA)” 的相关文章

高端Linux 脚本很有用,赶紧学起来!

Linux 脚本?准确的说叫 Linux Shell 脚本,Shell 脚本是一种被设计用来运行命令行解释器,他是 Linux 系统的一大特色之一。命令行是 Linux 系统中一种非常重要的交互方式,而它的实现基于 Linux 内核和 Shell 程序,为用户提供了强大和灵活的操作方式。使用 Lin...

到 2024 年了,全球仍有 76.4% 的网站在用「已死」的 PHP!

如今资历稍长的程序员,提到 PHP 可能都会联想到一个梗:“PHP 是最好的语言。”这个梗并非出自别处,正源自于 PHP 自己的官方文档:早在 2001 年 7 月,PHP 文档中就有一句“PHP is the best language for web programming(PHP 是世界上最好...

nginx 解决 readv() failed (104: Connection reset by peer)

查看nginx error错误,发现上传接口报以下错:2019/10/10 19:58:25 [error] 299784#0: *5967188 readv() failed (104: Connection reset by peer) while reading upstream, clien...

nginx配置静态资源服务器 nginx配置静态资源服务器的方法

nginx服务器搭建在这就不过多的说明了,本内容主要是nginx静态资源服务器配置相关说明nginx配置location / :指所有的url请求都会去访问static下面的文件;指定url后缀要与文件目录后面的后缀一一对应有两种用法:root:绝对路径;alias: nginx安装目录中的stat...

大数据分析工程师入门15-数据收集

数据与智能 本公众号关注大数据与人工智能技术。由一批具备多年实战经验的技术极客参与运营管理,持续输出大数据、数据分析、推荐系统、机器学习、人工智能等方向的原创文章,每周至少输出10篇精品原创。同时,我们会关注和分享大数据与人工智能行业动态。欢迎关注。 作者:凯凯连导语上一篇文章我们简单介绍了下大数...

nginx-UrlRewrite 实现URL重写转发

URL重写在前后端分离的开发模式中,会遇到这样一个需求:前端通过特定路由前缀来访问后端接口,例如:http://localhost/api/getUser,这里 api 即是每一个前端 request 所多加的前缀。nginx 需要把http://localhost/api/getUser 转换成后...