Files
ayatori/docs/decisions/0007-compute-node-and-vm-boundary.md
T

3.3 KiB
Raw Blame History

ADR-0007:复用 Node API 建立按需实现的 Compute 能力

  • 状态:Accepted
  • 日期:2026-09-20
  • 实施优先级:Deferred;当前优先 Database、LoadBalancer 与 Bucket

背景

Ayatori 长期可能需要管理现有 Proxmox VM、当前 libvirt VM,以及允许普通计算节点临时加入、 排空和退出。Proxmox 的远程 API 不能覆盖全部所需操作;若 Ayatori 进一步实现节点 inventory、 简单 placement、fencing 和安全 reschedule,Proxmox 的控制面价值会逐步被替代。

同一物理节点未来也可能运行 OpenSandbox/Kata 等执行后端。Kata 虽然以 microVM 隔离 Pod 或 container,但其公开生命周期是 Sandbox/Run,不是具有磁盘、NIC、console、placement、迁移和 长期身份的 VirtualMachine 产品。

决策

节点 API

Ayatori 选择性复用 core/v1 Node 与 coordination.k8s.io/v1 Lease 表达计算节点身份、能力、 容量、健康、维护状态与心跳。它们只是 API contract:由 Ayatori Compute Agent 写入,并由 Ayatori 自有 controller 消费。

这项选择不引入 kubelet、Pod、CRI、kube-scheduler 或 kube-controller-manager。Compute Agent 不是对 kubelet 的模拟或兼容实现,而是 Node API 在 Ayatori Compute 领域中的正式 producer。 每个 Node 必须带 Ayatori ownership label;Agent 只能更新自己的 Node/status 与 Lease。

初版 VirtualMachine 显式指定 Node。出现实际需求后,再由 Ayatori controller 基于 Node 的 Ready、unschedulable、taints、labels、capacity 和已有 allocation 实现小规模 filter/score。 具体资源分配不能依靠多个 controller 反复改写 Node.status.allocatable;需要并发预留时增加 独立 Allocation 资源或等价的原子分配记录。

VM 数据面

长期主路径可以是普通 Linux Compute Node 上的 libvirt/QEMU,由受限的 Compute Agent 执行 版本化、强类型、幂等且可观察的 VM 操作。Agent 不提供任意远程 shell。

Proxmox 是 brownfield 迁移后端:初期用于 adopt 现有 VM,并继续提供当前已有的集群、存储、 备份与 HA 能力。若 Ayatori Compute 已经可靠覆盖所需 placement、fencing、存储可移植性和恢复 语义,可以逐步把 PVE 节点迁移为普通 Compute Node;不为维持虚假 backend 对等性承诺永久支持 所有 Proxmox 特性。

HA 边界

自动 reschedule 必须满足:旧节点已经可靠 fenced,且 Volume 明确报告可在目标节点使用。 任一条件无法证明时,VM 进入 Blocked/ManualTask,不得冒险在第二个节点启动。首版允许完全 人工 placement 与恢复;不以通用 Placement、透明 live migration、多租户 SDN 或 Nova 兼容为目标。

Sandbox 边界

OpenSandbox/Kata microVM 归属于 Run/Sandbox backend 的隔离实现,不创建 VirtualMachine 资源。 若未来 VM 与 Sandbox 共享物理节点,容量协调必须另行形成经过验证的设计;不能仅因两者底层 都使用 KVM 就合并其北向生命周期。

结果

  • 复用成熟 Node/Lease API,而不继承 Kubernetes workload plane。
  • Compute 能力可以按 homelab 所需规模实现,不必复制完整 Nova。
  • PVE 帮助现有资源平滑迁移,但不是长期架构必须保留的一层。
  • Compute 方向已记录,但不改变当前 Database、LoadBalancer、Bucket 的产品优先级。