Commit Graph
90 Commits
Author SHA1 Message Date
wangbo 5dd7765ae3 perf(worker): 批量填充异步执行槽
跨地域同步复制下逐任务准入会为每个 River Job 支付一次事务提交 RTT,导致 P24 实际只能维持少量运行任务。调度器现在按全局容量窗口准备 FIFO 批次,在同一 PostgreSQL 事务内逐项校验队首、创建租约并插入唯一 River Job,一次提交即可填满可用槽;任一 Hook 失败时整批原子回滚。\n\n验收压力采样同时排除正在终止的 Ready Pod,避免滚动切换期间误连已移除容器。\n\n验证:真实 PostgreSQL 批量提交及整批回滚集成测试、Go 全量测试、go vet、runner/store race、gofmt、bash -n、ShellCheck、迁移安全检查通过。
2026-07-31 07:59:57 +08:00
wangbo 1bb4b2ab12 fix(acceptance): 同步配置 API 媒体并发
P24/P28/P32 之前只调整 Worker 媒体并发,API 仍使用默认每实例 16,导致入口实际容量低于 Worker 执行槽。现在按档位同时设置两地 API 的媒体请求与物化并发。\n\n验证:bash -n、ShellCheck。
2026-07-31 04:40:59 +08:00
wangbo 61b4417695 fix(acceptance): 继承分片身份的验收角色
分片 API Key 已具有正确 scopes 和候选规则,但空角色无法通过基础接口权限检查。创建和重用分片身份时同步主验收用户角色,保持专属用户组与钱包隔离不变。\n\n验证:bash -n、ShellCheck。
2026-07-31 04:31:50 +08:00
wangbo 262090db7b perf(acceptance): 使用多钱包身份分片模拟并发
单一验收钱包会把预留和结算串行化,掩盖双节点 Worker 的真实吞吐。验收现在幂等准备 32 个隔离身份和钱包,按请求轮询 API Key,并在 Run 配置中登记允许的 Key/User 身份对;密钥仅经 stdin 传给集群内压测进程。\n\n仍保留真实账务、候选权限、回调、重复扣费和强杀恢复校验。\n\n验证:Go 全量测试、临时 PostgreSQL 集成测试、go vet、OpenAPI 生成、迁移安全检查、bash -n、ShellCheck。
2026-07-31 04:25:09 +08:00
wangbo 8ce120631f fix(acceptance): 仅在连接池持续满载时阻断验收
验收压力采样仍记录连接获取取消计数,但单次上下文取消不再被误判为池饱和。继续对连续六个采样周期满池、租约错误、数据库连接、节点内存和 Pod RSS 执行硬门禁。\n\n验证:bash -n、ShellCheck、真实 P24 压力报告回归。
2026-07-31 04:07:14 +08:00
wangbo 36546bd5c4 perf(postgres): 回收突发连接并等待验收副作用
失败 Run 的未提交任务已取消,但退款 outbox 尚未完成时下一轮会继承 API 连接高水位和 canceled acquire 增量,污染容量验收。

新增 AI_GATEWAY_DATABASE_MAX_CONN_IDLE_SECONDS,生产配置 30 秒回收突发空闲连接;验收中止后等待旧任务、退款、回调和数据库连接全部收敛后才允许新负载启动。

验证:Go 全量测试、gofmt、bash -n、ShellCheck、kubectl kustomize 和 git diff --check 通过。
2026-07-31 03:46:41 +08:00
wangbo 75a56b21bc perf(acceptance): 将 API 连接池提升至 64
P24 千并发在 API Pool 48 下仍出现 acquired 接近上限及 canceled acquire 增长,而 Worker Pool 仅使用 3 条连接,PostgreSQL 实际连接数仍有安全余量。

将生产 API Pool 默认值提升至 64,并允许通过 AI_GATEWAY_ACCEPTANCE_API_DATABASE_MAX_CONNS 配置单次验收;Worker 档位与 min-idle=4 保持不变。

验证:bash -n、ShellCheck、kubectl kustomize 和 git diff --check 通过。
2026-07-31 03:38:28 +08:00
wangbo 2529679b67 perf(postgres): 分离 API 池并降低连接预热
生产同构千并发请求在干净队列上复现 API Pool 31/32、idle=1 且 canceled acquire 持续增长,Worker Pool 仅使用少量连接,确认瓶颈位于 API 数据库连接预算而非 Worker 执行槽。

新增可配置的 AI_GATEWAY_DATABASE_MIN_IDLE_CONNS,生产仅预热 4 条连接;API Pool 独立固定为 48,Worker Pool 继续跟随 P24/P28/P32 的 32/36/40 档位。发布工具、Kubernetes 清单、验收门禁和文档同步更新。

验证:Go 全量测试、gofmt、bash -n、ShellCheck、kubectl kustomize 和 git diff --check 通过。
2026-07-31 03:28:43 +08:00
wangbo 2606cc8223 fix(acceptance): 清理中止验收的未提交任务
验收失败后,排队及尚未提交上游的任务会继续占用队列与 API 数据库连接池,导致下一轮容量测试被历史负载污染。

中止验收时仅取消确认未提交上游的任务,删除其未提交 attempt 与准入记录,释放租约并生成幂等退款事件;提交中或已收到上游响应的任务继续自然收敛。新建验收前也会清理历史失败 Run 的安全遗留任务,并等待其余任务终态。

验证:Go 全量测试通过;临时 PostgreSQL 集成测试覆盖排队、运行未提交、提交中与退款事件;gofmt、bash -n、ShellCheck、git diff --check 通过。
2026-07-31 03:16:38 +08:00
wangbo 1bd9e618ca fix(acceptance): 重试瞬时压力采样失败
Pod 滚动后的首次 metrics 读取可能短暂失败,原采样器会直接退出且主流程忽略后台状态,导致验收缺少资源曲线。\n\n采样器现在允许两次瞬时失败,连续三次失败才中止;主流程同时检查采样进程状态,确保任何曲线中断都会明确阻断验收。\n\n验证:bash -n、ShellCheck、git diff --check。
2026-07-31 03:03:11 +08:00
wangbo 78005aaf85 fix(acceptance): 兼容只读压测容器报告
验收模拟器 Pod 使用只读根文件系统,失败报告缓冲不能依赖 mktemp。改为在 Shell 内存中捕获并回放压测 JSON,同时保留原始退出状态。\n\n验证:bash -n、ShellCheck、远端脚本语法检查、git diff --check。
2026-07-31 02:56:11 +08:00
wangbo 489208cef9 fix(acceptance): 纳入 API 数据库池容量门禁
高并发 Gemini 验收暴露两地 API 数据库池仍固定为 16,导致连接池满载、readiness 失败且压力曲线只监测 Worker,无法及时识别真实瓶颈。\n\n将容量档位的数据库连接池同步应用到 API,发布工具和生产清单保持同一配置;压力采样及日志门禁覆盖 API 与 Worker 四个连接池,并在失败时保留验收 JSON 报告。\n\n验证:bash -n、ShellCheck、kubectl kustomize、git diff --check。
2026-07-31 02:46:10 +08:00
wangbo 7a193934ed fix(acceptance): 优先选择稳定版 Gemini 图片模型
生产同构验收默认优先选择当前稳定版 gemini-3.1-flash-image,并在回退选择中将非 preview 模型置于预览版之前,避免选中并发 5 的预览候选后与千请求八分钟门槛产生物理冲突。\n\n候选确定后的正式路由优先级与真实限流策略保持不变。\n\n验证:bash -n;ShellCheck;git diff --check。
2026-07-31 02:27:19 +08:00
wangbo 3976cfb64d fix(acceptance): 在集群内驱动媒体压力
将验收负载二进制改为在协议模拟器 Pod 内执行,并继续通过两个公网入口均分请求,避免本机上行带宽污染 Gateway 的 8 分钟吞吐门槛。\n\nAPI Key 与 Run Token 仅通过 kubectl exec 标准输入传入进程,不写入 Pod 规格、命令参数或验收报告;响应仍由客户端流式解码并计算哈希。\n\n验证:bash -n;ShellCheck;git diff --check。
2026-07-31 02:07:50 +08:00
wangbo 66db98ec1c fix(acceptance): 避免用户组阻塞候选队列
验收用户组仅承担身份和账务隔离,不再创建非约束性的组级并发队列,避免不同生产候选之间出现 FIFO 队头阻塞。真实候选自身的并发、排队和限流策略保持不变。\n\n验证:bash -n;ShellCheck;git diff --check。
2026-07-31 01:59:09 +08:00
wangbo a2dea335e0 fix(acceptance): 隔离高并发验收用户组
为生产同构验收创建并绑定专属用户组,避免验收账号继承默认并发 5 的限流。\n\n验收脚本通过管理 API 幂等维护用户组,并在数据库侧校验唯一用户、唯一活跃 Key、并发策略和无外部引用。\n\n验证:bash -n;ShellCheck;git diff --check。
2026-07-31 01:49:12 +08:00
wangbo 0c9960d2e6 fix(acceptance): 预授权生产候选访问规则
生产同构 Gemini 验收在入口路由修复后暴露专属 API Key 无法通过生产 Access Rule,所有已创建任务均以 no_model_candidate 失败。验收脚本现在会为选中的 Gemini 和视频候选幂等授予 platform、platform_model、base_model 三层访问权限,并在创建 Run 前反查规则完整性。\n\n验证:bash -n、ShellCheck 与 git diff --check 通过。
2026-07-31 01:18:14 +08:00
wangbo 3b67038660 fix(acceptance): 移除生产验收持久管理隧道
管理 API 改为通过短 SSH 在宁波节点调用内部 api-ningbo-edge Service,避免长期端口转发与大量集群控制连接竞争导致 SSH 握手限流。Token 和请求体以 Base64 传输且不输出。\n\n验证:内部 traffic-mode 端到端返回 200;GNU Bash 3.2;bash -n;shellcheck -x -P .;git diff --check。
2026-07-31 00:41:56 +08:00
wangbo 0e22ccb0b8 fix(acceptance): 兼容 macOS Bash 3.2
将容量报告路径中的 Bash 4 小写参数展开替换为 POSIX tr,避免验收在提交首轮负载前因 bad substitution 中断。\n\n验证:GNU Bash 3.2.57 实际执行;bash -n;shellcheck -x -P .;git diff --check。
2026-07-31 00:34:02 +08:00
wangbo 02f9071a37 fix(acceptance): 安全接管直接基线失败任务
允许新发布在 validation 状态下接管其直接 base release 的失败 Run。接管前严格核对旧 Run 状态、流量 CAS 字段和 manifest 基线,并使用旧 CAS 字段中止旧 Run,再激活新 Run。\n\n验证:bash -n;shellcheck -x -P .;git diff --check。
2026-07-31 00:28:28 +08:00
wangbo cec3d429af fix(acceptance): 支持失败验收无缝重试
在 validation 保持正式流量关闭时,允许为同一 release 与镜像 digest 创建新 Run,并仅在确认旧 Run 已失败后通过 CAS 中止旧 Run、立即激活新 Run。避免验收控制连接异常后必须先长时间切回 live 才能重试。\n\n验证:bash -n;shellcheck -x -P .;git diff --check。
2026-07-31 00:25:52 +08:00
wangbo 3053ba4925 feat(acceptance): 增加生产同构媒体压力验收模式
引入动态流量门禁、隔离验收身份与协议级 Gemini/Volces 模拟器,覆盖双站点 API、Worker、PostgreSQL、River、账务、回调和媒体物化链路。

新增 P24/P28/P32 容量阶梯、Worker 强杀恢复、真实小流量 canary、CAS 放量和失败保持 validation 的生产编排;Worker 执行槽、连接池、媒体并发和双站点副本数改为环境配置。

验证:Go 全量测试、真实 PostgreSQL 迁移集成测试、迁移安全检查、OpenAPI 生成、ShellCheck、Kustomize、gofmt 和 git diff --check。
2026-07-30 23:06:19 +08:00
wangbo 3aa78d3e5c perf(worker): 按实例内存上限扩展异步容量
将策略推导出的集群目标与单 Worker 内存安全上限分离,避免失活实例的全部容量转移到单个 2 GiB Pod。

生产环境单实例上限和媒体物化并发设为 24;两实例正常时总容量由 16 提升至 48,后续可通过增加 Worker 节点继续扩展。新增 0093 迁移保存实例容量上限,并兼容滚动发布中的旧实例。

风险:更高媒体并发会增加 Worker 和节点内存压力,保留单实例 24 的硬边界并由持续监控观察 RSS、OOM、队列与节点余量。

验证:go test ./... -count=1;go vet ./...;真实 PostgreSQL 分配与故障转移测试;迁移安全检查;kubectl kustomize;gofmt -l;git diff --check。
2026-07-30 15:08:54 +08:00
wangbo 4eb394bfbd test(cluster): 支持固定成功候选执行文件验收
为跨节点真实文件验收增加可选平台模型筛选,避免同名模型的失效候选掩盖共享文件链路结果。\n\n验证:真实任务 7888708e-a870-4676-bdfc-4021853365a7 由香港 Worker 执行,输入与生成结果在两节点下载的长度和 SHA-256 一致;单 attempt、结算、扣费及回调去重断言通过。
2026-07-29 17:43:34 +08:00
wangbo de1ce2274b fix(cluster): 等待 Worker 完全退出后执行跨节点验收
修正缩容期间 Deployment 已显示零就绪但旧 Worker Pod 尚在退出时仍可能领取验收任务的竞态。真实任务提交前现在会确认宁波 Worker Pod 数量为零,并在失败路径尝试取消未完成的测试任务。\n\n验证:node --check、bash -n、ShellCheck、git diff --check。
2026-07-29 17:29:15 +08:00
wangbo a073c840ac fix(cluster): 兼容 Worker 缩容后的空就绪状态
Kubernetes 在 Deployment 缩容为 0 后可能省略 status.readyReplicas;验收脚本将空值按 0 处理,避免在提交真实任务前误判失败。
2026-07-29 17:05:59 +08:00
wangbo 39b1541fa1 build(migrations): 固化 OIDC 迁移安全复核
为已进入主干且会重建约束的 OIDC 迁移增加 SHA-256 锁定的精确规则豁免,文件内容或违规类型变化时仍会拒绝发布。

生产只读预检确认受影响表规模很小,现有 6 条身份配置均为 schema v1,OIDC 会话和撤销水位均为空;新增校验器测试覆盖允许项和校验和篡改。
2026-07-29 16:19:00 +08:00
wangbo 9e4fc7362d feat(queue): 增加非文本模型分布式准入队列
使用 PostgreSQL 统一同步与异步非文本任务的并发准入、持久化等待和 Worker 容量分配,并将生产 API 与独立 Worker 角色拆分。

补充策略管理、共享契约、OpenAPI、Kubernetes 双节点 Worker 清单及跨节点验收脚本;未默认启用任何生产 queue_size 策略。

已在原基线完成 Go、前端、迁移、Shell、Kustomize 与长任务容量验收;合入最新主干后将重新执行发布门禁。
2026-07-29 16:15:43 +08:00
wangbo 135fb3d5b8 fix(deploy): 延长数据库副本重同步门限
CNPG 主库在 5 秒内晋升,但跨地域 pg_rewind 需要重传约 1.27GB,原 6 分钟等待不足。将同步副本恢复等待扩展到 30 分钟,并增加退出时清理写入探针的保护。\n\n已通过 bash -n、ShellCheck 和 git diff --check。
2026-07-29 03:46:16 +08:00
wangbo ea33be5d69 fix(deploy): 强化跨节点真实任务验收门禁
修正宁波旧 Worker 在滚动退场期间仍可能领取任务的竞态,提交任务前要求仅保留唯一且明确禁用 Worker 的新 Pod。\n\n为临时验收 Key 分配 gpt-image-2 所需的最小平台访问资源,并让 multipart 参数对齐线上 2K 图像编辑请求。已通过 bash -n、ShellCheck、node --check,并完成真实跨节点任务验收。
2026-07-29 03:24:02 +08:00
wangbo a642f43cf2 fix(deploy): 校准跨节点图片验收请求
真实成功样本使用 2048x2048,验收脚本改用相同默认尺寸并允许环境覆盖。修正创建 API Key 响应中的 apiKey.id 读取,每次运行前清理本脚本遗留 Key,结束时删除新 Key。\n\n验证:bash -n、ShellCheck、node --check、git diff --check。
2026-07-29 03:13:01 +08:00
wangbo 0bef13fbd7 fix(deploy): 完整读取边缘验收响应
OpenAPI 响应较大,curl 通过管道交给 grep -q 时会因下游提前退出报写端关闭,造成健康服务被误判失败。改为完整读取各响应后再断言内容。\n\n验证:bash -n、ShellCheck、git diff --check。
2026-07-29 02:56:50 +08:00
wangbo 6897fb3b66 fix(deploy): 使用站点专属 NodePort
HostPort 被命名空间 PodSecurity baseline 拒绝,因此恢复无特权 Pod 配置,并为宁波、香港的 API/Web 增加只选择本站 Pod 的专属 NodePort Service。双 NGINX 和验收脚本按站点使用 31088/31089 与 31178/31179,避免主机本地访问共享 NodePort 时随机命中不可达的跨站 Pod。\n\n验证:kubectl kustomize、服务端 dry-run、bash -n、ShellCheck、无 hostPort/hostIP、git diff --check。
2026-07-29 02:40:57 +08:00
wangbo 006609569d fix(deploy): 稳定边缘到站点的固定入口
主机本地访问跨站点 NodePort 时 kube-proxy 会随机选择不可达的对端 Pod,导致约四分之一请求被拒绝。为两地应用绑定仅位于 WireGuard 地址的 HostPort 31088/31178,双 NGINX 和集群验收改用该固定入口;原 NodePort 30088/30178 继续保留。端口处于现有公网 DROP、wg0 私网放行范围。\n\n验证:kubectl kustomize、服务端 dry-run、bash -n、ShellCheck、Secret 与 digest 静态检查、git diff --check。
2026-07-29 02:36:29 +08:00
wangbo 39a8fd2ce0 fix(deploy): 移除激活阶段外网依赖
正式激活时不再从 GitHub 下载并重装已健康运行的 cert-manager、CloudNativePG 和 Barman Operator;Operator 安装继续保留在 prepare 阶段。激活阶段只渲染、校验并启动已锁定 digest 的应用清单,避免维护窗口受外网波动影响。\n\n验证:bash -n、ShellCheck、git diff --check。
2026-07-29 02:25:43 +08:00
wangbo f12f352bf0 fix(deploy): 规范化数据库版本对比
PostgreSQL 官方与 CNPG 镜像的 server_version 展示字符串包含不同构建后缀,造成同为 18.4 的数据库被误判不一致。改用 server_version_num 进行精确版本校验。\n\n验证:旧 Docker 与已恢复 CNPG 的完整验收快照 diff 无差异,server_version_num 均为 180004。
2026-07-29 02:17:13 +08:00
wangbo 945fc83c60 fix(deploy): 修正切换快照目录表名
切换前验收快照误用了不存在的 gateway_providers,导致在数据库导出前触发安全回滚。改为实际的 model_catalog_providers。\n\n验证:完整快照 SQL 已对线上旧库只读执行,版本、扩展、表、序列和关键计数均成功生成。
2026-07-29 02:11:48 +08:00
wangbo 5d2796337b fix(deploy): 等待维护入口完成重载
NGINX 优雅重载期间旧 worker 可能短暂继续返回 200,单次状态码断言会误触发安全回滚。改为最多轮询 15 秒等待维护页返回 503。\n\n验证:bash -n、ShellCheck、git diff --check、真实维护页 503 与恢复后公网 200。
2026-07-29 02:09:45 +08:00
wangbo b7c03d348e fix(deploy): 适配宁波 NGINX 配置加载路径
宁波 NGINX 仅加载 conf.d/*.conf,原切换脚本写入 sites-enabled 后不会生效。统一将维护页、集群入口和回滚配置写入实际加载的 conf.d 入口,并保留切换前配置备份。\n\n验证:bash -n、ShellCheck、git diff --check、双节点 nginx -t 与 prepare。
2026-07-29 02:06:12 +08:00
wangbo 74cf0ed5c8 fix(deploy): 避免验收入口端口冲突
将宁波跨节点验收私有入口从被 staging Docker 占用的 18088 调整为 18089,避免 NGINX reload 在切换前失败。同步更新真实文件任务验收脚本默认地址。已通过 node --check、bash -n、ShellCheck 和 git diff --check。
2026-07-29 02:02:42 +08:00
wangbo 7c142f5960 fix(deploy): 补齐集群备份兼容与切换前门禁
阿里云 OSS 的 S3 兼容层要求 virtual-hosted addressing,且 boto3 需要使用 Signature V2。本提交为 Barman 的归档、备份、保留与恢复统一挂载 AWS 配置,并将实际 WAL 归档和近期全备设为切换硬门禁。

同时补充 CNPG/etcdutl 固定版本安装、显式主库切换、三节点逐台停机、OSS 快照下载校验与远端临时 Secret 清理。已通过 ShellCheck、Kustomize、服务端 dry-run、迁移测试、发布脚本测试、敏感信息扫描及生产 precutover 验收。
2026-07-28 06:46:09 +08:00
wangbo f5b6ff72f2 fix(deploy): 无损传输证书同步 SSH 公钥
将包含空格与注释的 Ed25519 host key、公钥先 Base64 编码为单个 SSH 参数,远端解码后再次校验,并清理前次失败产生的无效 authorized_keys 单词行。

验证:Base64 完整往返、bash -n、ShellCheck,两次首次连接失败现场。
2026-07-28 05:53:43 +08:00
wangbo 5d8ed1f293 fix(deploy): 固定证书同步的香港 SSH Host Key
通过已认证的香港管理连接读取 Ed25519 host 公钥,将 WireGuard 地址 10.77.0.2 的精确键写入宁波 known_hosts,再执行证书同步;不关闭 StrictHostKeyChecking。

验证:远端 host key 格式解析、bash -n、ShellCheck,首次同步因缺少 known_hosts 的现场复现。
2026-07-28 05:53:00 +08:00
wangbo 1c0c298267 fix(deploy): 放宽数据库 Operator 首次拉取超时
CNPG 与 Barman Cloud 的固定镜像经跨境 mirror 首次拉取可能超过 180 秒,将 rollout 门限提升到 600 秒;cert-manager 保持原 180 秒快速门禁。

验证:CNPG 已实际 Ready,Barman 证书与插件注册正常且事件显示仅处于镜像拉取。
2026-07-28 05:17:25 +08:00
wangbo 6d7b2e88ba fix(deploy): 递归验证 containerd Registry 主机配置
K3s 1.36 将 Registry 镜像端点生成在 containerd/certs.d 子目录;验收改为递归检查整个 containerd 配置树,并继续以实际拉取 pause 镜像作为最终门禁。

验证:洛杉矶节点 Ready,三个 hosts.toml 端点存在,pause 镜像拉取成功。
2026-07-28 05:07:23 +08:00
wangbo 95ddfb2a04 fix(deploy): 为 K3s 配置容器镜像端点
三节点 containerd 增加 Docker Hub、GHCR 与 Quay 的 DaoCloud 镜像端点,解决生产节点直连公共 Registry 超时导致 Pod sandbox 无法创建的问题。

新增逐节点滚动刷新脚本,每次等待节点重新 Ready 并实际拉取 pause 镜像后才继续,避免同时重启 etcd 成员。初始 K3s 安装也会预置同一 registries.yaml。

验证:三节点镜像端点均返回 Registry 认证响应,bash -n、ShellCheck。
2026-07-28 05:05:33 +08:00
wangbo 44915c1343 fix(deploy): 使用 Server-Side Apply 安装大型 CRD
cert-manager、CloudNativePG 与 Barman 清单改用 server-side apply,避免 CNPG CRD 的 last-applied annotation 超过 Kubernetes 256KiB 限制;force-conflicts 仅用于已固定 checksum 的 operator 清单。

验证:cert-manager 组件已实际滚动成功,CNPG 客户端 apply 在 annotation 门禁处复现。
2026-07-28 05:00:52 +08:00
wangbo 19ce2d4272 fix(deploy): 保留 Kustomize digest 行缩进
替换真实 release manifest 的 API/Web digest 时固定输出 Kustomization 所需的四空格缩进,避免 awk 字段重建破坏 YAML。

验证:使用已发布 971540a 完整 manifest 实际渲染 696 行清单,确认所有应用镜像均为非零 digest。
2026-07-28 04:59:43 +08:00
wangbo d342462a3d fix(deploy): 兼容 macOS Bash 3.2 下载平台清单
将 operator URL 与固定 SHA-256 从关联数组改为并行索引数组,避免 macOS Bash 3.2 将带连字符的文件名解析为算术变量。远端资源复制前仍逐项校验 checksum。

验证:bash -n、ShellCheck、Bash 3.2 索引遍历。
2026-07-28 04:59:04 +08:00
wangbo 4e60bf1c64 fix(deploy): 本地校验并分发固定 K3s 二进制
生产节点访问 GitHub Release 失败时,改由本机下载 v1.36.2+k3s1 amd64 二进制,使用固定官方 SHA-256 校验后分发到三节点,再让官方安装器跳过远端下载。

同时将运行手册顺序改为先完成公网端口隔离,再安装 K3s。

验证:bash -n、ShellCheck、官方 checksum 获取与节点失败现场。
2026-07-28 04:50:54 +08:00