资源调度与自动滑行
简短的摘要
稳定的滑板保持在四个支柱上:1.正确的查询/限制和QoS类。
2.正确的造型(拓扑,仿射,优先级,预装)。
3.多级自动滑板:HPA/VPA/KEDA+群集/Node autoscaler+warm pools。
4.SLO面向逻辑(latency/queue depth),具有反翻转和预算。
基本资源模型
要求/限制和QoS类
Requests=计划者的保证;Limits=runtime的天花板。
QoS:guaranteed(CPU/Memory的req=lim),Burstable(部分),BestEffort(没有)。
具有刚性SLO的生产服务-Guaranteed/Burstable;背景是Burstable/BestEffort。
CPU/内存/IO/网络
CPU是弹性的(时间共享),内存是刚性的(超过时为OOM杀手)。
在IO/网络上,分别设置限制/优先级(cgroups/TC),否则为"嘈杂的邻居"。
GPU/加速器
请求矢量(GPU=1, VRAM通过配置文件),使用nodeSelector/taints和PodPriority进行批评。
对于地狱-batch尺寸和加热模型。
造型策略(Scheduling)
优先级、投资前和PDB
PriorityClass用于关键路径(付款,登录),允许预先启动。
PodDisruptionBudget在撤离/升级时保护最小复制副本。
Affinity/拓扑
node/pod affinity(例如,不要将复制副本聚类到单个主机上)。
topologySpreadConstraints 在区域/AZ上对齐。
NUMA/拓扑:pin-CPU/hugepages,其中低潜伏率很重要。
泰因特和托勒兰斯
侦察池:"prod","batch","gpu","system"。批评容忍的邻居较少。
自动滑冰: 水平和信号
1) HPA (Horizontal Pod Autoscaler)
按度量划分副本:CPU/内存/定制 (Prometheus Adapter)。
好信号:latency p95/p99,queue length/lag,RPS per pod,consumer lag。
反翻转:稳定(stabilizationWindow),最小步骤,冷静。
yaml apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: { name: api-hpa }
spec:
scaleTargetRef: { apiVersion: apps/v1, kind: Deployment, name: api }
minReplicas: 6 maxReplicas: 120 behavior:
scaleUp:
stabilizationWindowSeconds: 60 policies: [{ type: Percent, value: 100, periodSeconds: 60 }]
scaleDown:
stabilizationWindowSeconds: 300 policies: [{ type: Percent, value: 20, periodSeconds: 60 }]
metrics:
- type: Pods pods:
metric:
name: http_server_request_duration_seconds_p95 target:
type: AverageValue averageValue: "0.25" # 250ms
2) VPA (Vertical Pod Autoscaler)
将要求/限制调整为实际消费(更新建议)。
模式:"Off"(收集),"Auto"(重新启动),"Initial"(仅在开始时)。
练习:启用"Off" →收集统计数据→应用于发布。
3) KEDA/基于队列的滑板
响应外部信号:Kafka lag,SQS depth,Redis length,Prometheus。
适合事件/队列消费者(EDA)。
KEDA ScaledObject (Kafka lag):
yaml apiVersion: keda.sh/v1alpha1 kind: ScaledObject metadata: { name: consumer-scale }
spec:
scaleTargetRef: { name: txn-consumer }
minReplicaCount: 2 maxReplicaCount: 200 cooldownPeriod: 120 pollingInterval: 5 triggers:
- type: kafka metadata:
bootstrapServers: broker:9092 consumerGroup: tx-cg topic: payments lagThreshold: "10000"
4) Cluster/Node Autoscaler (CA) + Warm Pools
CA在短缺/过剩的情况下添加/清除营养素。
Warm pools:预先加热的nods/准备好的图像(加速冷启动)。
对于峰值-预先进行分级和放大的minNodes。
反应速度和热量
SLO反应延迟:前层≤ 1-2分钟,后端/DB-单独和提前。
加热:TLS/DNS/连接,模型加载,缓存加热和JIT。
Shadow载荷,用于在事件发生前"泵送"卡路。
反翻转和稳定
度量上的滞后,平滑度(*.中等)。
HPA中的Windows稳定化,在"scaleDown"中较大。
步骤滑冰而不是"喝酒";rate-limit更改副本。
Budget滑板:限制每分钟添加的流量/副本的百分比。
可观察性和SLO
关键SLI:- p95/99 latency, error rate, throughput, queue depth/lag, CPU/Memory saturation, pod pending time, node pressure.
- pending pods, unschedulable事件,IP/子网缺陷, image pull long evictions.
- Traces:基于p99尾巴的尾巴采样→看到滑行瓶颈。
FinOps: 弹性成本
指标:$/1000 RPS, $/ms p95,$/小时储备金。
混合:点播+保留+点(非批评)。
自动滑板阈值与错误的成本有关:有时保持扭曲库存是有益的。
iGaming/fintech的细节
比赛/锦标赛高峰:提前举起"minReplicas"和minNodes,打开战争池并加热缓存/模型。
支付消费者:KEDA通过拉格+等效性,提供商限额(PSP)作为外部降解诱因。
Antibot:一个单独的池,快速的规则尺度,"灰色"路线。
监管:合规服务的PDB优先级高于电池。
支票单
设计
- Requests/limits是根据分析数据设置的;选择了QoS。
- PriorityClass、PDB、taints/tolerations和topologySpread-配置。
- 通过SLO度量的HPA,而不仅仅是CPU。
- VPA在"Off"中收集建议(计划迁移到"Auto")。
- 事件载荷的KEDA/队列。
- CA+warm pools,映像缓存(图像预拉)。
运营活动
- Stabilization windows和cooldowns设置为(不包括flapping)。
- Alerta on pending/unschedulable, lag, p95, error-rate。
- Runbooks:"no nod","image not","OOM/evict","retrais storm"。
- 每月Capacity-review: Scale vs计划/成本的事实。
典型的错误
HPA仅通过CPU → IO/DB限制下的lat倒退。
缺少PDB和优先事项→批评首先会出现。
批评和击球在一个没有触摸池的混合→"嘈杂的邻居"。
零热→高峰时寒冷的开始。
激进的"scaleDown" →喝酒和thrash容器。
KEDA在暴风雨中→重复报告。
迷你花花公子
1)高峰事件发生前(T-30分钟)
1.放大"minReplicas"/minNodes,激活warm pools。
2.加热CDN/DNS/TLS/连接,加载模型。
3.启用"灰色"路线/机器人限制。
4.检查dashboards: pending/lag/p95。
2)缺钱(unschedulable)
1.检查CA 、云配额、子网/IP。
2.暂时降低击球限制,包括低优先级前期。
3.暂时提升更大的实例类型或第二个池。
3)在队列中长大
1.KEDA: 触发尺度;2)提高消费者的限制;
2.启用idempotency-keys和backpressure prodewsers。
4)锯复制品
1.增加stabilization/cooldown;2)改用阶梯式滑板;
2.用指数平均值平滑度量。
Config Spargalki
VPA(收集建议):yaml apiVersion: autoscaling.k8s.io/v1 kind: VerticalPodAutoscaler metadata: { name: api-vpa }
spec:
targetRef: { apiVersion: "apps/v1", kind: Deployment, name: api }
updatePolicy: { updateMode: "Off" } # собираем рекомендации
Cluster Autoscaler(旗帜思想,概念):
--balance-similar-node-groups
--expander=least-waste
--max-empty-bulk-delete=10
--scale-down-utilization-threshold=0.5
--scale-down-delay-after-add=10m
Topology spread(区域均匀性):
yaml topologySpreadConstraints:
- maxSkew: 1 topologyKey: topology.kubernetes.io/zone whenUnsatisfiable: DoNotSchedule labelSelector: { matchLabels: { app: api } }
结果
高效调度仪和自动滑板是正确的要求/限制+智能造型+多层滑板(HPA/VPA/KEDA/CA)+加热和防翻转,与SLO和毫秒成本挂钩。在IaC中记录策略,观察"正确"的度量(latency/lag),将warm库存保持在峰值之下-平台将具有弹性、可预测性和经济性。