通过 HTTP 轮询 VM 内部的 Vector 进程Prometheus 格式 metrics具体链路VM 内部 Vector (host_metrics 源, 每秒采集)→暴露 /metrics 端点 (默认 9100 端口)→autoscaler-agent 每 5 秒 HTTP GET 拉取→用 prometheus expfmt 解析四个维度的扩缩容指标维度信号目标阈值CPUhost_load1 / host_load5 (Linux load average)load ≤ 90% 可用 CPU内存使用host_memory_total - host_memory_available使用率 ≤ 75%内存总量 (含 page cache)同上 host_memory_cached_bytes总量 ≤ 90%LFC 本地缓存lfc_hits/misses working set size 多窗口斜率估算预分配缓存空间防误降核心算法是分别计算三个维度的 goal CUCompute Unit取最大值作为目标规格。扩缩容流程- 扩容agent →scheduler plugin 检查节点资源预留 →NeonVM CRD patch →通知 vm-monitor- 缩容agent →vm-monitor 确认安全 →NeonVM CRD patch →通知 scheduler plugin配置化程度很高每个 VM 还可通过 annotation 覆盖参数。NeonVM 是一个基于 Kubernetes 的轻量级虚拟机管理器类似 KubeVirt但更轻。它的核心思想是把每台 VM 建模成一个 CRD 资源对象Custom ResourceDefinition叫做 VirtualMachine。什么是 CRD Patch在 Kubernetes 里CRD 扩展了 API 的原生资源类型。NeonVM 定义了自己的 VirtualMachine 类型比如apiVersion: vm.neon.tech/v1beta1kind: VirtualMachinemetadata:name: my-vmspec:guest:cpus:use: 4 # 当前分配 4 vCPUmemorySlots:use: 8 # 当前分配 8 Gi 内存Patch 就是指 autoscaler-agent 调用 Kubernetes API对已有的 VM 资源对象做 增量修改JSON Patch而不是删除重建。比如扩容时发一个 PATCH 请求[{ op: replace, path: /spec/guest/cpus/use, value: 8 },{ op: replace, path: /spec/guest/memorySlots/use, value: 16 }]为什么这么做1. 不重启 VM —相比删掉旧 VM 再创建新的PATCH 让 NeonVM 控制器热调整资源2. 声明式 —最终一致模型Kubernetes 保证状态收敛3. 与 k8s 生态集成 —可以用 kubectl 查看/调试有事件日志简单说CRD Patch 通过修改 Kubernetes 自定义资源的字段来动态调整 VM 配置。