Files
2026-07-20 05:00:49 +02:00

110 lines
8.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
name: unidesk-ops
description: UniDesk 手动运维 CLI — `server``gc`、YAML 声明的 `platform-db postgres` 与 host swap、platform-infra egress proxy 和 k3s dependency proxy benchmark 运维。覆盖主 server 启停、健康检查、swap、日志、Docker 镜像清理、磁盘 GC、服务重建/重启、host PostgreSQL、D601/D518 proxyserver 视角流量测速和 k3s 真实依赖拉取 benchmark。用户提到 server start、server status、server swap、host swap 扩容、server rebuild、server restart、gc、磁盘清理、platform-db、PostgreSQL、egress-proxy traffic、proxy 测速、k3s benchmark、apk/npm/go/git mirror 拉取测速时使用。
---
# UniDesk Ops
主 server、GC 和 PK01 PostgreSQL 的手动运维入口。常规操作走 `bun scripts/cli.ts server ...``gc ...``platform-db postgres ...`
## 高频入口
```bash
bun scripts/cli.ts server status
bun scripts/cli.ts server start
bun scripts/cli.ts server stop
bun scripts/cli.ts server logs --tail-bytes 12000
bun scripts/cli.ts gc plan
bun scripts/cli.ts platform-db postgres status
bun scripts/cli.ts platform-db postgres swap plan --config config/platform-db/postgres-nc01.yaml
bun scripts/cli.ts platform-infra egress-proxy traffic --target D601 --sample-seconds 15
bun scripts/cli.ts platform-infra egress-proxy k3s-build-benchmark --targets D601,D518 --profile real-deps-500m --dry-run
```
启停、健康检查、节点资源指标、swap、日志、服务重建/重启见 [references/server.md](references/server.md);Docker 镜像清理和磁盘 GC 见 [references/gc.md](references/gc.md)PK01 PostgreSQL、YAML-first 运维、egress proxy 和 k3s benchmark 见 [references/platform-infra.md](references/platform-infra.md)。
## K3s Dependency Proxy Benchmark
用于验证 k3s CI/CD 构建出网性能时,必须用真实远程依赖,不用 Cloudflare synthetic。标准 profile 是 `real-deps-500m`k3s 远程拉 `alpine:3.20``node:22-bookworm``golang:1.24-bookworm`,然后在 Pod 内跑 `apk add``npm install``go mod download``git clone --mirror``remote update --prune`proxyserver 视角累计/窗口流量至少要能支撑 500MiB+ 验收。
```bash
# 计划预览:确认 D601/D518、镜像、pull policy、最小 proxy 流量和依赖集合。
bun scripts/cli.ts platform-infra egress-proxy k3s-build-benchmark \
--targets D601,D518 --profile real-deps-500m --dry-run
# 启动 benchmarkfire-and-forget,同时启动 stage recorder 持久化阶段流量证据。
bun scripts/cli.ts platform-infra egress-proxy k3s-build-benchmark \
--targets D601,D518 --profile real-deps-500m --confirm
# 状态表:看 APK/NPM/GO/GIT_MIRROR/REAL_DEPS、STAGE_PROXY、failure family 和可选即时采样。
bun scripts/cli.ts platform-infra egress-proxy k3s-build-benchmark status \
--targets D601,D518 --profile real-deps-500m --traffic-sample-seconds 15
# 日志 drill-down:按 init container 展开 image pull、apk、npm、go、git mirror 阶段尾部。
bun scripts/cli.ts platform-infra egress-proxy k3s-build-benchmark logs \
--targets D601,D518 --profile real-deps-500m --tail-lines 160
# 只看 proxyserver 视角实时/累计流量和 top client/destination。
bun scripts/cli.ts platform-infra egress-proxy traffic --target D601 --sample-seconds 15
bun scripts/cli.ts platform-infra egress-proxy traffic --target D518 --sample-seconds 15
# 清理测试 Job,避免慢速或失败样本继续占用 k3s 资源。
bun scripts/cli.ts platform-infra egress-proxy k3s-build-benchmark cleanup \
--targets D601,D518 --profile real-deps-500m --confirm
```
D601/D518 结果必须分表记录:`STATE`、Job/run、duration、`APK/NPM/GO/GIT_MIRROR/REAL_DEPS``STAGE_PROXY``STAGE_PROXY_EVIDENCE``TRAFFIC_WINDOW``TRAFFIC_RATE``PROXY_CUM``TOP_CLIENT``TOP_DEST``FAILURE`。D518 通过不代表 D601 通过;D601 只证明 k3s/containerd 走到 proxy 也不等于性能达标。未完成 500MiB+ 的真实 k3s image pull + apk/npm/go/git mirror 测试前,不关闭对应 issue,不合并标记为等待运行面验收的 PR。
## Egress Proxy 运行面修复入口
- 多主机 k3s worker 的 bootstrap proxy
- 集群 owning YAML 通过 `hostProxyConfigRef` 组合 `config/platform-infra/host-proxy.yaml`
- 部署和验收统一走 `platform-infra k3s-cluster apply|status`
- 集群入口经 Windows 宿主内网 SSH 分发静态客户端到 guest。
- Windows staging 工件按 YAML URL 获取并校验 SHA-256Provider/trans 不搬运大二进制。
- 启动 `k3s-agent` 前必须验证外网 probe。
- WireGuard 只承载集群三层网络;NAT 或链路不稳定的 worker proxy 消费 `vpn-server` 输出的 Hysteria2 client YAML。
- containerd 直接通过 host proxy 访问上游 registry,不使用公共镜像站。
`sub2api-egress-proxy` 的持久化配置从 `config/platform-infra/sub2api.yaml` 渲染,运行面变更必须通过受控 CLI 落地。不要把一次性 `kubectl patch` 留作最终状态。
```bash
bun scripts/cli.ts platform-infra sub2api apply --target D601 --dry-run
bun scripts/cli.ts platform-infra sub2api apply --target D601 --confirm --wait
bun scripts/cli.ts platform-infra sub2api status --target D601 --full
```
D601 若需要让 `sub2api-egress-proxy` 绕开 pod overlay,可在 YAML 中显式配置 egress proxy `hostNetwork: true`manifest 必须同时使用 `dnsPolicy: ClusterFirstWithHostNet`,并用 `maxSurge=0/maxUnavailable=1` 避免 hostNetwork 端口冲突导致 rollout 残留 Pending pod。D518 当前保持 `hostNetwork: false`,不要把 D601 的运行面实验自动泛化到其它 node。
常见判读:
- `TOP_CLIENT=10.42.0.1``TOP_DEST=registry-1.docker.io:443`k3s/containerd image pull 已从 proxyserver 视角可见。
- `TOP_DEST=dl-cdn.alpinelinux.org:443`Pod 内 `apk` 阶段已走 proxy。
- `registry.npmjs.org:443``proxy.golang.org:443``github.com:443`:分别对应 `npm install`、Go module 拉取和 Git mirror clone/sync。
- `STAGE_PROXY_EVIDENCE` 是 Job annotation 中持久化的阶段证据;最终 `succeeded` 后仍应保留 apk/npm/go/git-mirror 各阶段 top destination、window bytes、max rate 和 proxy cumulative。`TRAFFIC_*` 列只是 status 命令即时采样。
- `image-pull` failure 表示还卡在 kubelet/containerd 拉镜像;`apk-download``npm-download``go-download``git-mirror` 分别表示 Pod 内依赖阶段失败。
- proxy 窗口 `0 B/s` 但 active cumulative 增长很慢时,按性能不达标处理;先清理 Job,再继续查上游,不要让慢速 benchmark 长时间占用资源。
## P0 边界
- PK01 默认只允许只读诊断:
- 只有用户在当前请求中明确要求修改 PK01,才允许改变服务版本、YAML/Compose/systemd、数据库配置、容器、网络、Secret 绑定或其他运行面状态;
- “修复”“恢复”“部署”“清理”或跨系统故障处理不自动扩大为 PK01 mutation 授权。
- backend-core 运行面恢复 healthy 后,除非用户明确要求,不主动 rebuild/restart/替换 backend-core。
- Master server 不作为通用构建机;Docker/Rust/Go/前端高 CPU 构建必须走批准的 CI/运行面。
- GC 默认 plan 只读,真实删除必须显式 `run --confirm` 并遵循 allowlist/retention。
- 已启用的远端 host swap 扩容使用 `platform-db postgres swap plan|apply --confirm|status`
- 总容量、主文件、扩展文件、`swappiness` 和 sysctl 文件只来自目标 YAML 的 `node.swap`
- 只新增缺失容量,不 `swapoff` 既有区域,不操作业务进程;
- `apply --confirm` 只提交远端异步 job,随后用返回的 `--job-id` 查询;
- swap 始终不计入 WebProbe 的真实 `MemAvailable` 门槛。
- Secret、database URL 和 API key 不打印完整值。
- k3s proxy benchmark 是运行面验收,不是源码层测试;长任务必须 start/status/logs/traffic 短轮询,结束或不达标时必须 cleanup。
## 何时读取 reference
- 需要服务 rebuild/restart、日志、swap 或 health 判定:读 [references/server.md](references/server.md)。
- 需要磁盘/镜像/trace GC:读 [references/gc.md](references/gc.md)。
- 需要 PK01 PostgreSQL 或 YAML-first 运维:读 [references/platform-infra.md](references/platform-infra.md)。
- 需要 k3s proxy benchmark 或 D601/D518 egress proxy 流量测速时,优先使用本 SKILL 的高频入口;涉及 CI/CD rollout 再加载 `$unidesk-cicd`
- 需要 profile smoke、Moon Bridge 或 session recovery:读 [references/server.md](references/server.md)。