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 ordersEKS 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、身份与网络配置,以及负向验收和恢复步骤。