diff --git a/README.md b/README.md index 015cc31..0e9d986 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,7 @@ - [服务总览](services/index.md):有什么、有什么用、在哪里、状态依据是什么。 - [SPIFFE/SPIRE](services/spire.md):按 #34 整理的阶段状态、使用与 runbook 入口。 - [PostgreSQL Tenant Operator](services/postgresql-tenant-operator.md):计划在共享 PostgreSQL 上提供的 DBaaS 中间层。 +- [Gitea Dynamic Runner](services/gitea-dynamic-runner.md):原 microVM runner,现支持 Pod/VM 两种一次性执行环境。 - [待核实与文档缺口](verification.md):互相矛盾的记录、缺少使用说明的服务、下一步核实方法。 - [架构约束](architecture/constraints.md):修改环境前必须遵守的设计及原始依据。 - [workload-sts 设计历史](architecture/workload-sts-history.md):已归档的早期身份方案及 SPIRE 替代决策。 @@ -19,7 +20,8 @@ 首轮盘点日期为 **2026-09-16**,依据 `/home/panxiao81/services` 工作区,基线 commit 为 `ebe0ec154dab557598075b5cf6d3629c3c23fe2a`。该工作区包含未提交修改和未跟踪文件。 后续按维护者提供的线索补读了 SPIFFE/SPIRE #34 与 runbook、workload-sts 归档决策、 -PostgreSQL Tenant Operator 的 README 与架构文档。具体来源和查阅范围见各页;其余条目仍以初轮工作区证据为限。 +PostgreSQL Tenant Operator 的 README 与架构文档,以及 Gitea Dynamic Runner README。 +具体来源和查阅范围见各页;其余条目仍以初轮工作区证据为限。 后续状态查询先向维护者确认动态工作与资料来源,授权范围内不重复询问。 本轮没有查询运行环境;“文档记录已部署”不等于今天已验证健康。 本库中的入口地址来自原有记录,也尚未逐一验证可达性。 diff --git a/services/gitea-dynamic-runner.md b/services/gitea-dynamic-runner.md new file mode 100644 index 0000000..3761524 --- /dev/null +++ b/services/gitea-dynamic-runner.md @@ -0,0 +1,81 @@ +--- +title: Gitea Dynamic Runner +lifecycle: experimental +evidence: documented +last_reviewed: 2026-09-16 +last_verified: null +sources: + - https://git.ddupan.top/panxiao81/gitea-dynamic-runner/src/branch/main/README.md +--- + +# Gitea Dynamic Runner + +原名 `gitea-microvm-runner`,现为 +[gitea-dynamic-runner](https://git.ddupan.top/panxiao81/gitea-dynamic-runner)。 +它为 Gitea Actions 按需创建一次性执行环境,支持 Kubernetes Pod 和 Cloud Hypervisor +microVM;每个环境只执行一个 job,结束后销毁环境及本地状态。 + +更名由维护者提供;以下内容依据 2026-09-16 查阅的项目 README。 +README 描述了 bootstrap 实现与后续路线,没有明确记录当前部署范围或端到端上线验收。 +本页因此按试验阶段记录,不表示现场 runner 已注册或下面的 labels 已可调度;本轮未查询现场。 + +## workflow 如何选择执行环境 + +README 定义两种稳定接口,在 workflow 的 job 中选择: + +```yaml +runs-on: [self-hosted, pod] +``` + +```yaml +runs-on: [self-hosted, vm] +``` + +| 接口 | 执行方式 | 使用时需要理解的边界 | +|---|---|---| +| `pod` | 动态 Kubernetes privileged Pod;workflow 使用 host executor | Docker、BuildKit、kind 等工具由 pipeline 按需 setup;这里的 host executor 指 Pod 内执行环境 | +| `vm` | 动态 Cloud Hypervisor microVM | 每个任务创建独立 COW disk、seed 和 TAP,guest runner 执行一个 job 后关机并清理 | + +两种接口不能仅凭“环境一次性”就认定具有相同的隔离边界。 +接入前需要结合项目设计约束和实际部署确认任务的信任范围。 +旧 homelab-infra 文档中的 `kind-microvm` 是早期记录,不作为本项目当前 workflow 接口。 + +## 组件如何协作 + +当前 README 描述的 bootstrap 路径为: + +```text +Gitea workflow_job webhook + → controller 筛选 queued job / label + → NATS JetStream WorkQueue + → worker 领取任务并限制并发 + → Pod 或 microVM backend 创建一次性执行环境 + → 执行一个 job,随后清理环境 +``` + +`microvm-runner-launch` 管理 VM 的临时磁盘、网络及清理,`guest-runner` 领取一次性 +注册凭据并以 ephemeral 模式注册。`pod-worker` 创建 Kubernetes 执行 Pod。 +同一 runner label 的 worker 共享同一个 durable consumer,通过增加 worker 或 capacity 扩容。 + +webhook → NATS 是尽快验证 Pod/VM 生命周期的 bootstrap 实现。 +长期目标是 controller 兼容 Gitea Runner 协议,直接注册、声明 labels、领取 task, +再交给 Pod/VM executor;不能把该目标描述为已经实现。 + +## 身份与基础设施归属 + +- `jwt-broker` 是早期共享 Kubernetes runner 的过渡实验;目标架构不部署它, + 每个动态 Pod/VM 直接取得自己的 SPIFFE 身份。该目标不代表真实 workload 身份接入已经完成。 +- NATS 密码、webhook secret 和 registration token 从文件读取,不复制进知识库。 +- registration token 不写入 seed image;worker 通过单次 nonce endpoint 交给 guest。 +- base image 不携带 runner identity、registration token、SSH 密码或 host key。 +- runner 软件保存在本项目;Kubernetes、OpenBao、LXC、bridge 和容量配置保留在 homelab-infra。 +- homelab-infra 的 `platform/gitea-runner/` 是此前的常驻 runner;本 README 不能证明它已被替换或退役。 + +## 继续阅读 + +- [项目 README](https://git.ddupan.top/panxiao81/gitea-dynamic-runner/src/branch/main/README.md):接口、组件、开发命令与安全边界,本轮已查阅。 +- [设计原则](https://git.ddupan.top/panxiao81/gitea-dynamic-runner/src/branch/main/docs/design-principles.md):README 指向的完整设计约束,本轮未逐篇复核。 +- [Runner 协议路线](https://git.ddupan.top/panxiao81/gitea-dynamic-runner/src/branch/main/docs/runner-protocol-roadmap.md):README 指向的长期调度路线与迁移边界,本轮未逐篇复核。 +- [SPIFFE/SPIRE](spire.md):统一机器身份的设计定位与阶段依据。 + +后续需补充实际启用范围、workflow 验收示例和失败任务排障入口;查询前先向维护者对齐动态工作。 diff --git a/services/index.md b/services/index.md index 54e4a6c..22ae12f 100644 --- a/services/index.md +++ b/services/index.md @@ -53,7 +53,7 @@ SPIFFE/SPIRE 已按维护者授权补读 #34;其他条目仍为初轮工作区 | docker | 宿主 Docker 网络管理 | `laptop` | 记录已迁移地址池 | `infrastructure/docker/README.md` | 已有 DN42 与挂载路径约束 | | kata-lab | Kata VM 试验环境 | `历史 VMID 147` | 记录 9 月 14 日已销毁 | `infrastructure/kata-lab/README.md` | 保留验证历史,勿当现役 VM | | kata-lxc-lab | LXC 内 Kata worker 试验 | `pve2 / 记录地址 192.168.10.128` | 记录 PoC 验证;非正式生产服务 | `infrastructure/kata-lxc-lab/README.md` | 明确与 microVM runner 的职责 | -| microvm-runner | 按 job 创建临时 CI VM | `计划使用 kind-microvm label` | PoC 验证;正式启用有未完成前提 | `infrastructure/microvm-runner/README.md` | 核对独立 runner 仓库与实际部署 | +| microvm-runner(历史目录名) | 动态 runner 的 homelab 基础设施记录 | 当前项目接口见 [Dynamic Runner](gitea-dynamic-runner.md) | 旧工作区记录 PoC;独立项目已更名并扩展到 Pod/VM,实际启用范围未查询 | `infrastructure/microvm-runner/README.md`、独立项目 README | 软件与基础设施职责已明确;旧 kind-microvm label 不作为当前接口 | | oci | 云主机、网络与站点互联 | `OCI ap-osaka-1` | 有恢复、接管与网络实施记录 | `infrastructure/oci/README.md` | 补跨站点使用入口 | | openbao | 秘密管理与内部 CA | `bao.ad.ddupan.top` | 有部署与接管记录 | `infrastructure/openbao/README.md` | 补日常使用和恢复入口 | | proxmox | PVE、虚拟化与主机基础设施 | `PVE 管理入口` | 已有基础设施;README 混有设计设想 | `infrastructure/proxmox/README.md` | 分离当前环境与 workload identity 设想 | @@ -67,6 +67,7 @@ SPIFFE/SPIRE 已按维护者授权补读 #34;其他条目仍为初轮工作区 ## 计划、归档与范围外 +- [Gitea Dynamic Runner](gitea-dynamic-runner.md):独立开发的动态 Pod/VM runner,原名 gitea-microvm-runner;README 描述 bootstrap 实现与长期调度路线,部署范围尚未查询。 - [PostgreSQL Tenant Operator](postgresql-tenant-operator.md):计划中的 DBaaS 中间层,管理共享实例中的数据库与账号;README 记录为 API 骨架阶段,不代表服务已上线。 - [workload-sts](../architecture/workload-sts-history.md):已归档的早期机器身份方案;停止开发、不部署 PoC,由 SPIFFE/SPIRE 替代。 - Backstage:规划中的服务目录与文档入口;本轮未发现独立部署目录。 diff --git a/verification.md b/verification.md index 689b916..6f71c1e 100644 --- a/verification.md +++ b/verification.md @@ -18,7 +18,7 @@ SPIFFE/SPIRE 按维护者指定,以 [#34](https://git.ddupan.top/panxiao81/hom |---|---|---| | LAN DNS | `apps/blocky/README.md` 说已是主 DNS;`infrastructure/dns/README.md` 仍说未成为正式 resolver | 读取 NEC DHCP 配置、客户端 DNS 和 Blocky 查询结果,再同步两份说明 | | Authelia | README 仍描述 OIDC 为后续阶段、旧 Contour/Traefik 路径;退役记录和 Envoy 文档已描述 Authelia 替代旧 IdP | 核对 OIDC discovery、登录及 forward-auth,重写过时段落;迁移旧文档前检查其中的敏感示例 | -| microVM runner | `infrastructure/microvm-runner/README.md` 说 PoC 完成但正式启用仍有前提;远端已有独立 runner 仓库 | 查清两个仓库的职责、controller/worker 部署和一次 job 生命周期,不能把仓库存在当作服务已启用 | +| Dynamic Runner 的启用范围 | 新仓库 README 定义 Pod/VM 两种接口;旧工作区仍记录 kind-microvm PoC | 软件与基础设施归属已由 README 明确;实际启用范围先问维护者,再按指定 ticket 或验证记录补充,不将旧 PoC 当作新接口已上线的依据 | | NATS durable 名称 | NATS 文档示例为 `kind-microvm-pve2`;microVM 文档配置为 `kind-microvm`,要求同类 worker 共享 durable | 查运行配置和 consumer;统一文档,避免多 worker 队列语义不一致 | | 旧 VictoriaMetrics Compose | `platform/observability/README.md` 说已替代;`apps/victoriametrics/` 仍留配置 | 只读检查 Docker 与采集目标,确认是否仍承担职责,再标记退役或迁移 | @@ -35,8 +35,8 @@ SPIFFE/SPIRE 按维护者指定,以 [#34](https://git.ddupan.top/panxiao81/hom - `docs/cicd.md` 提及 `e5renew`、`rustfs`,但无独立组件目录;需要确认现状与归属。 - `infrastructure/docker/README.md` 提及仓库外 `research-auto`,不能在本轮算作已盘点服务。 -- 本轮发现远端仓库 `gitea-microvm-runner`, - 尚未审阅内容或运行状态。后续将跨仓库服务纳入总览。 +- `gitea-microvm-runner` 已更名 `gitea-dynamic-runner`,按维护者指定查阅 README, + 已收录[动态 Pod/VM runner](services/gitea-dynamic-runner.md)的接口、组件和路线;实际运行状态未查询。 - PostgreSQL Tenant Operator 已按维护者说明及项目 README/架构文档收录为 [计划中的 DBaaS 中间层](services/postgresql-tenant-operator.md)。共享 PostgreSQL 已在使用, operator 仍按项目记录标为 API 骨架阶段;本轮未查询运行环境。