Incus 脚本审阅与验收SWES · 技术记录

Incus 审阅 08|怎样才算真正做好,把“完美结果”写成可复查的验收单

Incus 脚本审阅与验收 · 第 8 / 8 篇 一个可信的结尾,不是六张绿色截图,而是别人能根据记录复查:创建了什么、改了什么、坏过什么、如何恢复、还有什么没有验证。本系列的终点是一套交付标准,而不是给现有脚本盖一个超出证据的“完美”印章。 已完成与未完

Incus 脚本审阅与验收 · 第 8 / 8 篇

一个可信的结尾,不是六张绿色截图,而是别人能根据记录复查:创建了什么、改了什么、坏过什么、如何恢复、还有什么没有验证。本系列的终点是一套交付标准,而不是给现有脚本盖一个超出证据的“完美”印章。

部署、使用、故障、恢复与回归的闭环

已完成与未完成的结果分开列

项目

本次结果

证据的边界

六份 Bash 文件静态语法

通过

不执行 apt、Incus 或防火墙变更

内嵌 Python 语法

通过

不证明外部命令成功

3 台与 6 台版差异

仅 COUNT 不同

不构成六台容量测试

顶层 SSH 设备名的正则匹配

离线复现未匹配

确认逻辑问题,不冒充服务器故障日志

端口区间与 TCP/UDP 数量

离线用例通过

不验证公网连接

六实例端到端部署

未完成本次实机验收

不填 PASS

指定实例破坏性重装与恢复

未完成本次实机验收

不填成功耗时

宿主机与 Docker 重启回归

待验证

单次联网不能代替

原始文件的 SHA-256、静态检查与离线复现程序随本系列归档。这样以后修改脚本时,可以明确比较的是哪一版,而不是反复使用一个叫“最终版”的文件名。

第一阶段,先让一台容器完成闭环

记录宿主 OS、内核、Incus 客户端与服务端版本、镜像指纹、存储驱动、网桥网段、出口接口和防火墙后端。在独立测试环境完成创建,然后分别验证实例状态、根盘配置、容器内 SSH、外部真实登录、出站软件源访问和一个应用服务。

公网 SSH 必须从宿主机以外的网络测试,并确认登录后确实是目标容器。本机端口处于 LISTEN,只能证明监听存在;一个成功的空 TCP 连接,也不能代替 SSH 鉴权和目标身份核对。

根盘验证同样分两步:结构化配置正确,再在可丢弃实例里验证实际写入边界和池余量。不要因为代码搜索到 size: 3GiB 就声称完成存储隔离测试。

第二阶段,证明操作只影响目标实例

给每个测试容器放置不同的标记文件,并部署不同的低风险测试服务。添加或删除 vps3 的业务端口前后,检查其余实例的设备、SSH 与服务响应。准备重装演练时,先给目标做一致性备份,记录设备与业务清单,再核对确认对象。

重装后,预期目标根盘标记消失、系统重新初始化;未选中的实例标记与业务保持不变。代理设备如果保留,还需要重新安装并启动目标业务,外部协议请求成功才是服务恢复。额外挂载卷应按事先写明的策略单独核验。

第三阶段,故障演练比重复成功更有价值

场景

要观察的结果

不合格表现

第二次运行部署

正确识别现有资源

重复设备错误或意外改业务

软件源暂时不可用

明确停在哪个阶段

只说失败,无法继续配置

业务端口已被占用

提前停止或返回清楚错误

默默绑定到错误目标

批量添加中途失败

已添加项回滚并留下记录

一半成功且没有清单

Docker 单独重启

定向转发规则与网络重新验证

仅依赖 After 就宣称自动恢复

宿主机重启

容器自启、代理、监控和业务均恢复

只检查 Incus 守护进程

Agent 断线或凭据失效

日志可定位,恢复后重新上报

仅看 systemd active

从导出备份恢复

隔离环境内读取真实业务数据

只有一个归档文件存在

这些演练应在独立宿主机或明确可丢弃的实例进行,尤其不能为了模拟掉线而直接清空正式宿主机防火墙。演练使用的配置变更、恢复步骤与预期影响,都应事先写清。

备份恢复为什么还要防止端口争抢

把实例备份导入同一宿主机,可能带回原有 proxy 设备。即使换了实例名,监听端口仍可能与在线实例冲突。更稳妥的是在隔离测试宿主机或隔离项目中恢复,并在启动前检查监听设备和挂载卷;项目隔离也不能自动解决宿主机同地址同端口冲突。

实例导出不自动覆盖所有外部挂载卷、宿主路径与外部数据库;备份清单应明确哪些数据在包里、哪些另行保护。对数据库业务,要额外说明一致性方式,不能把一个运行中快照无条件称为应用一致性备份。

最后再扩到三台、六台

扩展时保留同样验收项,并增加并发更新、磁盘增长、空闲与峰值内存、业务延迟和持续运行观察。六个实例都设为一个 CPU 上限,不会使宿主机突然多出六个独占核;六份 3GiB 上限也不会把 12GiB 池变成 18GiB 可用空间。

测试报告至少记录时间、版本、负载、持续时长、观测方法和失败项。没有这些条件,单个“稳定运行”描述不能被下一位读者复现。

可以对外宣布完成的标准

当单实例闭环、非目标实例保护、重跑、重启、监控和备份恢复都通过,并且修复后的脚本与对应报告一一匹配时,才可以发布“这套指定环境已经完成验收”。它仍然不是对所有硬件、网络和未来版本的无限保证。

这批材料目前最诚实的结论是:部署与管理思路已形成,语法和部分离线逻辑已核对,发现了需要修复的幂等与比较问题,完整实机验收还缺证据。把问题讲明白、把验证路径交给读者,才是这个系列应当留下的结果。

参考:Incus 备份、export 命令、import 命令。具体参数以目标版本的 --help 为准。

系列阅读目录

  1. 01|一台 VPS 拆成六台“小鸡”,到底拆出了什么

  2. 02|部署之前先算清楚,3GiB 根盘与 12GiB 存储池如何配合

  3. 03|容器能启动却不能联网,为什么要查 Docker 的转发规则

  4. 04|端口不是越多越好,让每个公开入口都有归属

  5. 05|只重装一台小鸡,保住的究竟是配置还是数据

  6. 06|菜单不再秒退之后,为什么还要检查 YAML 缩进和密码记录

  7. 07|Komari 显示在线以后,还要验证什么

  8. 08|怎样才算真正做好,把“完美结果”写成可复查的验收单

感谢阅读 · 保持好奇,认真记录。浏览更多文章 ↗