当 CRD 中设置“autoScale: true”时,HPA 依据哪些指标?
解读
在国内云原生面试中,CouchDB 通常以 CouchDB Operator 形式部署在 Kubernetes 集群内。CRD 中的 autoScale: true 并不是 Kubernetes 原生的 HPA 开关,而是 Operator 自定义字段。该字段被 Operator 识别后,会自动为 CouchDB 集群创建 v2 版本的 HorizontalPodAutoscaler 对象。因此,面试官真正想考察的是:
- 你能否把“CRD 字段”与“底层 HPA 资源”对应起来;
- 你是否清楚 v2 HPA 支持的指标类型;
- 你是否了解 CouchDB 在 国内容器云场景 下最常用的压测指标与阈值。
知识点
- CouchDB Operator 自动创建的 HPA 版本:默认使用
autoscaling/v2,不再用 v1。 - 核心指标(必须至少配置一项):
- resource.metrics:
–cpu:容器 CPU 使用率,阈值默认 70%(可覆盖)。
–memory:容器内存使用率,阈值默认 80%(部分国内发行版关闭,需显式开启)。
- resource.metrics:
- 自定义指标(推荐在国内容器云生产开启):
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。
- 外部指标(金融、政务云常用):
kubernetes.external.metrics.kafka_lag_couchdb_topic:当 CouchDB 通过 Kafka 做同步时,Lag 超过 10 万条 即扩容。
- 扩缩边界:
- minReplicas ≥ 3(国内等保要求多 AZ 容灾)。
- maxReplicas ≤ 32(超过后需改 shard 数,否则 Meta 节点压力大)。
- 指标来源:
- 默认安装 prometheus-adapter 提供自定义/外部指标;
- 国内容器云平台(阿里云 ACK、腾讯云 TKE、华为云 CCE)已内置对应 Custom Metrics API 端点,无需额外搭建。
答案
当 CRD 设置 autoScale: true 后,CouchDB Operator 会生成 autoscaling/v2 版本的 HPA,依据以下三类指标决策:
- Resource 指标:
– CPU 使用率 70%;
– Memory 使用率 80%(若开启)。 - Pods 自定义指标:
– P99 延迟 > 500 ms;
– 单 Pod QPS > 2000;
– Erlang VM 内存 > 80% limit。 - External 指标(可选):
– Kafka Lag > 100k 条。
HPA 每 15 秒 抓取一次指标,连续 3 次 超过阈值即扩容,低于阈值 5 次 后缩容,冷却窗口 5 分钟,防止抖动。
拓展思考
- 如果业务是 离线优先移动 App,峰值出现在节假日,建议把 QPS 指标权重调高到 60%,CPU 权重降到 20%,避免夜间低流量误缩容。
- 在 金融两地三中心 场景,HPA 扩容后需保证 Shard 副本数 ≥ 3 且 q=2、n=3,否则易出现 split-brain;此时可给 Operator 增加 preScaleWebhook,在扩容前校验副本分布。
- 国内部分银行仍使用 物理机 + 自研 K8s,网络插件为 Calico BGP,会出现 prometheus-adapter 指标延迟 30 秒 问题;解决方法是把 HPA 的 --horizontal-pod-autoscaler-sync-period 改为 30 秒,并同步调大 容忍窗口 到 300 秒,避免误缩。