当 CRD 中设置“autoScale: true”时,HPA 依据哪些指标?

解读

在国内云原生面试中,CouchDB 通常以 CouchDB Operator 形式部署在 Kubernetes 集群内。CRD 中的 autoScale: true 并不是 Kubernetes 原生的 HPA 开关,而是 Operator 自定义字段。该字段被 Operator 识别后,会自动为 CouchDB 集群创建 v2 版本的 HorizontalPodAutoscaler 对象。因此,面试官真正想考察的是:

  1. 你能否把“CRD 字段”与“底层 HPA 资源”对应起来;
  2. 你是否清楚 v2 HPA 支持的指标类型
  3. 你是否了解 CouchDB 在 国内容器云场景 下最常用的压测指标与阈值。

知识点

  1. CouchDB Operator 自动创建的 HPA 版本:默认使用 autoscaling/v2,不再用 v1。
  2. 核心指标(必须至少配置一项):
    • resource.metrics
      cpu:容器 CPU 使用率,阈值默认 70%(可覆盖)。
      memory:容器内存使用率,阈值默认 80%(部分国内发行版关闭,需显式开启)。
  3. 自定义指标(推荐在国内容器云生产开启):
    • pods.couchdb_http_request_duration_seconds_avg:P99 请求延迟,阈值常设 500 ms
    • pods.couchdb_http_requests_per_second:QPS,阈值按单 Pod 2000 req/s 计算。
    • pods.couchdb_erlang_vm_memory_bytes:Erlang VM 内存,阈值 80% 容器 limit。
  4. 外部指标(金融、政务云常用):
    • kubernetes.external.metrics.kafka_lag_couchdb_topic:当 CouchDB 通过 Kafka 做同步时,Lag 超过 10 万条 即扩容。
  5. 扩缩边界
    • minReplicas ≥ 3(国内等保要求多 AZ 容灾)。
    • maxReplicas ≤ 32(超过后需改 shard 数,否则 Meta 节点压力大)。
  6. 指标来源
    • 默认安装 prometheus-adapter 提供自定义/外部指标;
    • 国内容器云平台(阿里云 ACK、腾讯云 TKE、华为云 CCE)已内置对应 Custom Metrics API 端点,无需额外搭建。

答案

当 CRD 设置 autoScale: true 后,CouchDB Operator 会生成 autoscaling/v2 版本的 HPA,依据以下三类指标决策:

  1. Resource 指标
    CPU 使用率 70%
    Memory 使用率 80%(若开启)。
  2. Pods 自定义指标
    P99 延迟 > 500 ms
    单 Pod QPS > 2000
    Erlang VM 内存 > 80% limit
  3. External 指标(可选):
    Kafka Lag > 100k 条

HPA 每 15 秒 抓取一次指标,连续 3 次 超过阈值即扩容,低于阈值 5 次 后缩容,冷却窗口 5 分钟,防止抖动。

拓展思考

  1. 如果业务是 离线优先移动 App,峰值出现在节假日,建议把 QPS 指标权重调高到 60%,CPU 权重降到 20%,避免夜间低流量误缩容。
  2. 金融两地三中心 场景,HPA 扩容后需保证 Shard 副本数 ≥ 3q=2、n=3,否则易出现 split-brain;此时可给 Operator 增加 preScaleWebhook,在扩容前校验副本分布。
  3. 国内部分银行仍使用 物理机 + 自研 K8s,网络插件为 Calico BGP,会出现 prometheus-adapter 指标延迟 30 秒 问题;解决方法是把 HPA 的 --horizontal-pod-autoscaler-sync-period 改为 30 秒,并同步调大 容忍窗口 到 300 秒,避免误缩。