Metrics Server 与企业 HPA

验证:未记录
适用版本
未记录
验证范围
尚未登记验证记录。
本文缩写(英文全称与中文含义)
缩写 英文全称/名称 中文含义
API Application Programming Interface 应用程序编程接口
CA Certificate Authority 证书颁发机构
CPU Central Processing Unit 中央处理器
EKS Elastic Kubernetes Service AWS 托管 Kubernetes 服务
GitOps GitOps 以 Git 保存期望状态、由自动化持续协调实际状态的运维方式
GKE Google Kubernetes Engine Google 托管 Kubernetes 服务
HA High Availability 高可用
HPA Horizontal Pod Autoscaler Pod 水平自动扩缩容器
KEDA Kubernetes Event-driven Autoscaling Kubernetes 事件驱动自动扩缩容
PDB Pod Disruption Budget Pod 中断预算,约束自愿驱逐
SAN Subject Alternative Name 证书主题备用名称,用于声明域名或 IP

场景:订单 API 根据 CPU 利用率扩容,同时约束数据库连接数和扩容速度。前置:基线。Metrics Server 提供短期资源指标,不替代 Prometheus 监控;HPA 扩 Pod,节点容量由另一控制器解决。

先检查平台已有能力#

kubectl get apiservice v1beta1.metrics.k8s.io
kubectl top nodes
kubectl top pods -n orders

EKS add-on 或 GKE 已提供该 API 时复用,不部署第二套竞争 APIService。自建环境要启用聚合 API、kubelet webhook 认证/授权;控制面能访问 Metrics Server,组件能访问所有 kubelet,证书 SAN/CA 正确。不要用 --kubelet-insecure-tls 作为生产修复。要求与 HA

Hands-on:部署与 HPA#

仅对尚未安装的集群执行,固定兼容版本:

helm repo add metrics-server https://kubernetes-sigs.github.io/metrics-server/
helm repo update
helm search repo metrics-server/metrics-server --versions
export METRICS_VERSION='REPLACE_CHART_VERSION'
helm upgrade --install metrics-server metrics-server/metrics-server -n kube-system --version "$METRICS_VERSION" --set replicas=2 --wait --timeout 10m
kubectl get apiservice v1beta1.metrics.k8s.io -o yaml
kubectl get --raw /apis/metrics.k8s.io/v1beta1/namespaces/orders/pods

正式配置将副本、resources、PDB、反亲和性写入完整 values,并检查 requests 是否覆盖节点数与采集规模。HA 需要不同节点;自建控制面可核对 aggregator routing 设置。

保存 orders-hpa.yaml;所有应用容器/sidecar 均需合理 requests,否则利用率可能缺失。12 个 API 副本 × 每 Pod 连接池上限 + worker/后台连接必须低于数据库预算。

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata: {name: orders-api, namespace: orders}
spec:
  scaleTargetRef: {apiVersion: apps/v1, kind: Deployment, name: orders-api}
  minReplicas: 3
  maxReplicas: 12
  metrics:
    - type: Resource
      resource:
        name: cpu
        target: {type: Utilization, averageUtilization: 60}
  behavior:
    scaleUp:
      stabilizationWindowSeconds: 30
      policies:
        - {type: Pods, value: 3, periodSeconds: 60}
    scaleDown:
      stabilizationWindowSeconds: 300
      policies:
        - {type: Pods, value: 1, periodSeconds: 60}
kubectl apply -f orders-hpa.yaml
kubectl -n orders get hpa orders-api -w
# 另一终端
kubectl -n orders describe hpa orders-api

从 GitOps 移除/忽略 Deployment 固定 replicas 的持续回写。HPA 用 request 作分母,不是 CPU limit;调 request 会改变触发阈值。HPA 行为

企业验收与恢复#

用真实订单压测逐级加负载,记录 HPA 当前/目标指标、Pod Ready 时间、节点扩容时间、p95、错误率和数据库连接数;降载后确认平滑回收,PDB 和后台事务正常。只有 CPU 压满的假负载不能证明业务容量。

在预生产滚动重建一个 Metrics Server Pod,API 应仍可用;指标不可用时 HPA 的降级行为要观察并告警,不能假设一定按历史值扩容。查 APIService、证书、kubelet 网络和 requests。

恢复时先停止压测、暂停 GitOps 对 HPA 的改动,保存配置,必要时删除本次 HPA并把 Deployment 固定到已验证安全副本数;确认容量后再恢复控制器。不要同时用 HPA 和 KEDA 管理同一个 Deployment。

完整部署参数#

锁定版本与完整生产配置提供实际 values、资源/分散/PDB、身份与网络配置,以及负向验收和恢复步骤。

搜索文档

输入关键词,搜索所有文档。

↑ ↓ 选择 · Enter 打开 · Esc 关闭