当前位置: 首页 > news >正文

Kubernetes HPA(Pod 水平自动伸缩)部署与资源限制全流程

目录

一、HPA 核心概念

二、部署 metrics-server(资源监控组件)

1. 准备镜像(所有 Node 节点)

2. 安装 metrics-server(使用 Helm)

3. 验证 metrics-server 部署

三、部署 HPA 并测试自动扩缩容

1. 准备测试镜像(所有 Node 节点)

2. 创建测试 Deployment 和 Service

3. 创建 HPA 控制器

4. 模拟负载并观察扩缩容

(1)创建负载生成器

(2)观察 HPA 动态扩缩容

(3)停止负载并观察缩容

四、资源限制配置(扩展)

1. Pod 级资源限制

2. 命名空间级资源限制

(1)资源配额(ResourceQuota)

(2)默认资源限制(LimitRange)

总结


一、HPA 核心概念

HPA(Horizontal Pod Autoscaler)通过监控 Pod 的 CPU / 内存利用率,自动调整 Deployment/RC/RS 的 Pod 副本数量,实现:

  • 动态扩缩容:负载高时增加副本,负载低时减少副本
  • 依赖组件:需部署 metrics-server 提供资源监控数据
  • 默认周期:每 30 秒检测一次 Pod 负载(可通过 kube-controller-manager 配置调整)

二、部署 metrics-server(资源监控组件)

metrics-server 是集群资源数据的聚合器,为 HPA、kubectl top 等提供数据支持。

1. 准备镜像(所有 Node 节点)

# 上传镜像包到 /opt 目录并加载
cd /opt
docker load -i metrics-server.tar

2. 安装 metrics-server(使用 Helm)

# 创建工作目录
mkdir -p /opt/metrics && cd /opt/metrics# 添加稳定仓库(国内镜像)
helm repo remove stable  # 清理旧仓库
helm repo add stable http://mirror.azure.cn/kubernetes/charts
helm repo update# 拉取 Chart 包
helm pull stable/metrics-server# 创建自定义配置(解决证书和地址问题)
vim metrics-server.yaml
args:- --logtostderr- --kubelet-insecure-tls  # 忽略 kubelet 证书验证(测试环境)- --kubelet-preferred-address-types=InternalIP  # 使用节点内网 IP 通信
image:repository: k8s.gcr.io/metrics-server-amd64tag: v0.3.2  # 镜像版本# 安装 metrics-server 到 kube-system 命名空间
helm install metrics-server stable/metrics-server -n kube-system -f metrics-server.yaml

3. 验证 metrics-server 部署

# 查看 Pod 状态(确保 Running)
kubectl get pods -n kube-system | grep metrics-server# 验证资源监控(需等待 1-2 分钟)
kubectl top node  # 查看节点资源使用率
kubectl top pods --all-namespaces  # 查看所有命名空间 Pod 资源使用率

三、部署 HPA 并测试自动扩缩容

以 hpa-example 镜像(含 CPU 密集型测试代码)为例,测试 HPA 功能。

1. 准备测试镜像(所有 Node 节点)

cd /opt
docker load -i hpa-example.tar  # 加载测试镜像

2. 创建测试 Deployment 和 Service

# 创建部署文件
vim hpa-pod.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: php-apachelabels:run: php-apache
spec:replicas: 1selector:matchLabels:run: php-apachetemplate:metadata:labels:run: php-apachespec:containers:- name: php-apacheimage: gcr.io/google_containers/hpa-exampleimagePullPolicy: IfNotPresentports:- containerPort: 80resources:requests:cpu: 200m  # 必须设置请求资源,HPA 基于此计算使用率
---
apiVersion: v1
kind: Service
metadata:name: php-apache
spec:ports:- port: 80targetPort: 80selector:run: php-apache# 部署资源
kubectl apply -f hpa-pod.yaml# 验证部署
kubectl get pods  # 确保 php-apache  Pod 处于 Running 状态

3. 创建 HPA 控制器

# 创建 HPA:CPU 使用率阈值 50%,最小 1 副本,最大 10 副本
kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10# 查看 HPA 状态(TARGETS 列需等待 metrics-server 采集数据,约 1 分钟)
kubectl get hpa
# 正常输出:NAME         REFERENCE               TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
#           php-apache   Deployment/php-apache   0%/50%    1         10        1          1m

4. 模拟负载并观察扩缩容

(1)创建负载生成器
# 创建一个客户端 Pod,持续发送请求压测
kubectl run -it load-generator --image=busybox /bin/sh# 在客户端 Pod 内执行循环请求(增加负载)
while true; do wget -q -O- http://php-apache.default.svc.cluster.local; done
(2)观察 HPA 动态扩缩容
# 实时监控 HPA 状态(新开终端)
kubectl get hpa -w
# 现象:CPU 使用率超过 50% 后,副本数逐渐增加(最大 10 个)# 查看 Pod 数量变化
kubectl get pods -w
(3)停止负载并观察缩容
# 在负载生成器终端按 Ctrl+C 停止请求
# 观察 HPA:CPU 使用率下降后,副本数逐渐减少(缩容速度较慢,避免频繁波动)
kubectl get hpa -w

四、资源限制配置(扩展)

Kubernetes 通过 requests(初始分配)和 limits(最大限制)控制 Pod 资源使用,避免单个 Pod 耗尽节点资源。

1. Pod 级资源限制

在 Deployment 中为容器配置资源限制:

spec:containers:- name: appimage: nginxresources:requests:  # 初始请求资源(调度依据)cpu: 100m    # 100 毫核(0.1 CPU)memory: 128Mi  # 128 MB 内存limits:     # 最大资源限制(超限时可能被终止)cpu: 500m    # 500 毫核(0.5 CPU)memory: 512Mi  # 512 MB 内存

2. 命名空间级资源限制

通过 ResourceQuota 和 LimitRange 限制命名空间内所有资源的总配额和默认值。

(1)资源配额(ResourceQuota)

限制命名空间内资源总量:

# resource-quota.yaml
apiVersion: v1
kind: ResourceQuota
metadata:name: compute-resourcesnamespace: test  # 目标命名空间
spec:hard:pods: "20"                   # 最大 Pod 数量requests.cpu: "2"            # 总 CPU 请求上限requests.memory: 1Gi         # 总内存请求上限limits.cpu: "4"              # 总 CPU 限制上限limits.memory: 2Gi           # 总内存限制上限

应用:kubectl apply -f resource-quota.yaml

(2)默认资源限制(LimitRange)

为未指定资源限制的 Pod 设置默认值:

# limit-range.yaml
apiVersion: v1
kind: LimitRange
metadata:name: default-resourcesnamespace: test
spec:limits:- default:  # 默认 limits(最大限制)cpu: 500mmemory: 512MidefaultRequest:  # 默认 requests(初始分配)cpu: 100mmemory: 256Mitype: Container  # 作用于容器

应用:kubectl apply -f limit-range.yaml

总结

  1. HPA 工作流:部署 metrics-server → 创建带资源请求的 Deployment → 配置 HPA 规则 → 自动根据负载扩缩容。
  2. 关键配置:HPA 依赖 Pod 的 requests.cpu 计算使用率,需确保配置正确。
  3. 资源限制:通过 Pod 级 requests/limits 和命名空间级 ResourceQuota/LimitRange 避免资源滥用。
  4. 扩缩容特性:扩容快、缩容慢,防止负载波动导致的频繁调整。
http://www.dtcms.com/a/508201.html

相关文章:

  • 4-Spring SPI机制解读
  • 汕头公众号建设网站设计一个网站页面需要多少钱
  • 山西太原建设厅官方网站合肥到黄山旅游攻略
  • 基于Pika的RabbitMQ 消费者异常消息消费问题分析
  • 宁波网站关键词排名推广深圳网站设计兴田德润简介
  • 网站 概念设计提供网站制作
  • w666学习平台
  • 币股同权的创新与前瞻
  • Java 大视界 -- Java 大数据在智慧文旅虚拟场景构建与沉浸式体验增强中的技术支撑
  • ctfshow pwn44
  • 二层通讯中的MAC地址介绍
  • ppt模板去哪个网站下载百度关键词搜索排行
  • 网站版面设计方案旅行网站开发意义
  • 【Go】--gin的binding内置规则
  • 关于手机电子商务网站建设网站点击排名优化
  • html源码之家在线工具seo
  • 微信克隆人,聊天记录训练专属AI(2.WeClone训练模型)
  • 【深度学习新浪潮】如何用图像生成模型绘制逼真太空卫星?
  • 【生活】风寒感冒和风热感冒
  • 怎么提高网站百度权重合同下载网站
  • AI重塑产业研发:数据驱动下的技术落地与方法论指南
  • 新化网站建设虚拟主机网站怎么上传文件
  • 性能测试 | 性能测试工具JMeter线程组和参数化的使用
  • jianshe导航网站网站关键词不稳定
  • 深圳建设商城网站营销手机系统安装
  • 深度优先遍历策略
  • Xshell效率实战系列一:多服务器基础高效管理——从定位到批量执行
  • 外部资源延迟交付时,如何保证进度
  • 建网站需要买些什么广州微信网站建设公司
  • 天津网站建设开发维护wordpress完整中文免费主题下载