Linux K8s 自动扩展实现指南
一 核心机制与适用场景
- HPA(Horizontal Pod Autoscaler):按指标自动增减 Pod 副本数,常用于 Deployment/ReplicaSet/StatefulSet。指标来源默认由 Metrics Server 提供,支持 CPU/内存利用率,结合 Custom Metrics API / External Metrics API 可扩展到 QPS、连接数、消息堆积等业务指标。HPA 是 Kubernetes 的标准 API 对象,使用前需确保集群已部署指标组件并能通过 kubectl top 查询到节点/Pod 指标。
- VPA(Vertical Pod Autoscaler):按指标自动调整 Pod 的 CPU/内存 requests/limits,适合突发型负载或资源配置长期不匹配的场景。通常与 HPA 分开使用(同一 Pod 上不建议同时启用 HPA 与 VPA)。
- 集群自动扩缩(Cluster Autoscaler):当节点资源不足时自动 新增/回收 Node,为 HPA 扩容提供“物理资源”。适用于云上或具备可扩容节点池的环境。
二 快速落地步骤 HPA
- 前置检查
- 部署并验证 Metrics Server:kubectl -n kube-system get deployment/metrics-server;kubectl top nodes;kubectl top pods。若未部署,先安装 Metrics Server。
- 部署示例应用(含资源 requests)
- 示例(php-apache):kubectl apply -f https://k8s.io/examples/application/php-apache.yaml
- 关键:容器需设置 resources.requests(HPA 依赖 Pod 资源请求计算利用率)。
- 创建 HPA
- 命令方式:kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10
- 期望:平均 CPU 利用率超过 50% 时扩容,最多 10 个副本。
- 制造负载并观察
- 生成负载:kubectl run -it --rm load-generator --image=busybox /bin/sh
- 在容器内循环:while true; do wget -q -O- http://php-apache; done
- 观察扩缩容:kubectl get hpa(目标列会显示如 250%/50% → 扩容);kubectl get deployment php-apache(副本数上升);负载停止后一段时间利用率回落,副本数会逐步回到稳定值。
三 常用 HPA 配置示例 v2
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: app-hpa
namespace: default
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: app
minReplicas: 2
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 50
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: app-hpa-mem
namespace: default
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: app
minReplicas: 2
maxReplicas: 10
metrics:
- type: Resource
resource:
name: memory
target:
type: AverageValue
averageValue: 200Mi
- 多指标与行为调优(可选)
- 可叠加多个 metrics(如同时监控 cpu + http_requests_per_second)。
- 通过 behavior 字段配置 稳定窗口、扩缩容速率 等,以避免抖动与震荡。
四 常见问题与排查要点
- 指标不可用或 HPA 不生效
- 确认 Metrics Server 已就绪(kubectl -n kube-system get deploy/metrics-server;kubectl top nodes/pods 有数据)。
- 必须设置资源 requests
- HPA 以 requests 为基准计算利用率;未设置会导致 HPA 无法工作或不准确。
- API 与版本选择
- autoscaling/v1 仅支持 CPU;v2beta2 支持 Resource/Custom/External 多指标,建议优先使用 v2。
- 扩不上去的常见原因
- 资源配额/限额(ResourceQuota/ClusterResourceQuota)限制、节点可调度资源不足、亲和/污点导致无可用节点、HPA 已达 maxReplicas。
- 缩容过慢或不缩
- 默认有 稳定窗口 与冷却时间,防止抖动;可通过 HPA behavior 调整。
- 集群层面扩容
- 若节点资源不足,需配合 Cluster Autoscaler 自动加节点,HPA 才能继续扩容 Pod。