fix(platform-infra): split D601 from NC01 cluster
This commit is contained in:
@@ -10,16 +10,27 @@
|
||||
- UniDesk 拥有的 image version、namespace、endpoint、FRP port 与 profile 列表不得隐藏在 helper 常量里;外部工具要求的 TOML、JSON 和 env 仅是边缘渲染格式。
|
||||
- 新节点出网 bootstrap 遵循 `docs/reference/yaml-first-ops.md` 的零依赖 host proxy 边界,不得依赖尚未安装的 Docker、k3s、containerd 或包管理器网络能力。
|
||||
|
||||
## 多主机 k3s 集群
|
||||
## k3s 集群拓扑
|
||||
|
||||
- 权威配置:
|
||||
- 跨主机拓扑、WireGuard、agent token `sourceRef`、worker host proxy 引用、集群内 artifact registry 映射、ServiceLB 节点和 smoke 归 `config/platform-infra/k3s-clusters.yaml`。
|
||||
- 集群边界、拓扑模式、历史 WireGuard 迁移参数、独立 server 角色、
|
||||
registry endpoint、ServiceLB 节点和 smoke 归
|
||||
`config/platform-infra/k3s-clusters.yaml`。
|
||||
- worker host proxy 的服务端来源、客户端工件、Secret 引用、代理环境和 systemd drop-in 归 `config/platform-infra/host-proxy.yaml`。
|
||||
- Hyper-V VM 资源和宿主内网 SSH 归 `config/platform-infra/hyperv-vms.yaml`。
|
||||
- 既有 control-plane 的 k3s systemd drop-in 继续归 `config/hwlab-node-control-plane.yaml`,并通过 `clusterConfigRef` 消费集群网络参数。
|
||||
- 受控入口:
|
||||
- `platform-infra k3s-cluster secret-init --target <id> --confirm` 只在 Secret source 不存在时生成 WireGuard key pair 和 k3s agent token,存在时拒绝覆盖。
|
||||
- `platform-infra k3s-cluster plan|apply|drain|status|smoke --target <id>` 是部署、清空不可调度 worker 和验收入口。
|
||||
- `platform-infra k3s-cluster plan|apply|separate|drain|status|smoke
|
||||
--target <id>` 是部署、拓扑拆分、清空不可调度 worker和验收入口。
|
||||
- `topologyMode=separated` 时,`apply --confirm` 与
|
||||
`separate --confirm` 都只执行受控拆分:
|
||||
- 先证明旧 worker 的非 DaemonSet Pod 为零;
|
||||
- 再清理旧 agent datastore、CNI 和跨地域 WireGuard 配置;
|
||||
- 在 D601 安装并等待独立单节点 k3s server Ready;
|
||||
- 最后从 NC01 删除旧 Node 和对端 WireGuard peer。
|
||||
- 拆分不得先删除 NC01 Node 或隧道;D601 独立 server 未 Ready 时必须
|
||||
保留旧控制面侧事实并返回失败。
|
||||
- 无固定公网地址的 worker 由宿主内网 SSH 控制,主动连接 control-plane WireGuard endpoint;worker provider route 只作为部署后补充验收入口。
|
||||
- 集群 apply 先经宿主内网 SSH 分发零依赖 proxy client,确认它连接声明的 `vpn-server` 且外网 probe 成功,再启动或恢复 `k3s-agent`。
|
||||
- 集群 apply 在 proxy 前先收敛 worker WireGuard;内容一致时不强写,只有 unit 未运行或握手过期且隧道探针失败时才恢复 worker 接口。
|
||||
@@ -48,10 +59,25 @@
|
||||
- 同一入口等待节点 Ready;
|
||||
- 禁止调用 HWLAB 全量 `infra apply`,也不得触碰 Kubernetes manifests、registry、Tekton、Argo、git-mirror 或业务 rollout。
|
||||
- 运行边界:
|
||||
- control-plane 保持唯一 k3s server,同时承担 workload。
|
||||
- worker 只运行 `k3s-agent`;加入前必须卸载旧独立 server,禁止保留第二 datastore/control-plane。
|
||||
- worker 是否参与业务调度及其 taint 必须由集群 owning YAML 的
|
||||
`workers.<id>.scheduling` 声明:
|
||||
- NC01 与 D601 必须保持两个独立 k3s 集群,禁止把 D601 重新注册为
|
||||
NC01 agent,也禁止把 NC01 注册到 D601。
|
||||
- D601 独立集群只运行一个 server 节点,初始业务 Pod 数必须为零;
|
||||
是否承载新业务必须由新的 workload owning YAML 显式选择,不得继承
|
||||
NC01 的 GitOps、PipelineRun、DaemonSet 或默认 namespace。
|
||||
- NC01 保留自身 control-plane 与运行面;拆分后可保留无 peer 的本地
|
||||
WireGuard 接口以避免重写生产 control-plane 地址,但不得恢复 D601 peer。
|
||||
- 跨地域连接只用于受控 SSH/Provider 控制通道和公网 HTTPS
|
||||
artifact pull,不再承担 Kubernetes API、Pod、Service、DNS 或 VXLAN 数据面。
|
||||
- `topologyMode=separated` 是 owning YAML 的架构事实。CI/CD、GitOps、
|
||||
VM bootstrap 和普通集群 apply 禁止改回 joined、启动 `k3s-agent`、
|
||||
写入 agent token 或渲染跨地域 Flannel/WireGuard peer。
|
||||
- 下列 worker 规则只适用于仍由 owning YAML 明确声明为 joined 的其他
|
||||
集群,不得用于 NC01-D601:
|
||||
- control-plane 保持唯一 k3s server,同时承担 workload;
|
||||
- worker 只运行 `k3s-agent`,加入前卸载旧独立 server;
|
||||
- worker 是否参与业务调度及其 taint 必须由集群 owning YAML 的
|
||||
`workers.<id>.scheduling` 声明。
|
||||
- joined worker 的调度规则:
|
||||
- `schedulable=false` 时必须同时声明 `NoSchedule` 或 `NoExecute` taint;
|
||||
- agent 注册参数和 control-plane 的 `cordon`/taint 收敛必须消费同一声明,
|
||||
防止节点重装、重注册或 CI 自动覆盖后短暂接收业务 Pod;
|
||||
@@ -88,7 +114,13 @@
|
||||
- k3s API 暂时不可读属于 unknown,不得当作容量漂移触发 restart;
|
||||
- 集群 CLI 只组合各自 owning domain,不借用全量基础设施入口扩大写入范围。
|
||||
- 验收:
|
||||
- `status` 必须同时证明 WireGuard handshake、worker host proxy、server/agent systemd、两个 Ready node、worker InternalIP 和旧 server 退役。
|
||||
- `topologyMode=separated` 的 `status` 必须同时证明:
|
||||
- D601 只有一个 Ready 节点;
|
||||
- D601 `k3s` server active 且旧 `k3s-agent` inactive;
|
||||
- D601 非 `kube-system` Pod 为零;
|
||||
- NC01 不再存在 D601 Node。
|
||||
- joined 拓扑的 `status` 才验证 WireGuard handshake、host proxy、
|
||||
server/agent、两个 Ready node、worker InternalIP 和旧 server 退役。
|
||||
- 仅当 worker 的 `scheduling.schedulable=true` 时,
|
||||
`smoke --confirm` 才可把 Job 定向调度到 worker并验证集群 DNS与
|
||||
Kubernetes ClusterIP;不可调度 worker 的 smoke 只读验证 taint、
|
||||
|
||||
Reference in New Issue
Block a user