WIP: BEACO-244: cover detached Coder home volumes in daily backups #287

Draft
multica-gitops wants to merge 1 commit from agent/gitops/540e437baad3 into main
Collaborator

结论与修改

BEACO-244 的两卷都已命中 RecurringJob/storage/daily-backup 的 default 组;缺口是它们处于 detached,而运行设置 allow-recurring-job-while-volume-detached=false。不是 StorageClass 或卷标签漏选。

  • 在 Longhorn HelmRelease 声明 defaultSettings.allowRecurringJobWhileVolumeDetached: true,让保留的停止工作区家目录继续受周期备份覆盖。
  • 更新现有 wanxiang/docs/operations/database-backup.md,记录停止工作区的备份策略、集群级影响、运行值核验及新基线补备边界。
  • system-backup-* 本身也是卷数据备份;这两卷存在 2026-09-18 的旧 Completed 恢复点,不能把缺少 backup-* 前缀等同于完全没有卷数据备份。两卷内容恢复尚未验证。

只读现场证据

2026-10-25 01:25–01:27 UTC:

Volume PVC(development) 状态 最新数据快照
pvc-b33f2fe9-07cd-4cb6-bf46-9d8af52c2ef8 coder-860852a1-cc8c-420b-b5e9-c8295c6d2f32-home detached / Bound 2026-09-18T12:02:03Z
pvc-448b9e0e-0642-497d-9cb6-96ee2a22b164 coder-beacon1096-test-nixos-home detached / Bound 2026-09-18T12:02:53Z

两卷均带 recurring-job-group.longhorn.io/default=enabled,没有 Pod 引用;54 个 Longhorn 卷中只有这两个 detached。集群未安装 VolumeBackupSchedule / CSI VolumeSnapshot CRD;本排期使用 Longhorn 原生备份。BackupTarget/default 为 available,仅证明控制器观测。

验证

  • kubectl kustomize wanxiang/kubernetes/apps/storage/longhorn/app 通过。
  • 使用官方 Longhorn 1.12.1 chart 和完整 HelmRelease values 对比渲染:54 个对象中,仅 ConfigMap/longhorn-default-setting 增加目标设置,其他渲染对象相同。
  • git diff --check、仓库 utils/check-secrets.py --staged 和提交 hook 通过。Python/PyYAML 使用仓库固定的 nixpkgs 提供。
  • 本 PR 与 #279 修改同一备份文档的不同段落;没有复制该 PR 的修正或历史处置记录。

上线审批、风险与验收

保持 WIP,等待两卷保留意图及本次存储策略变更的明确批准。 万象运行中的公开 Flux 来源直接跟随 infra/main;合并此 PR 会触发生产调谐,不能把合并当作纯离线集成。

该开关为集群级,当前新增覆盖两卷,未来也覆盖其他已选中排期的 detached 卷。周期任务会临时 attach 卷并增加存储/异地上传负载。当前仍有 daily-backup-29879640 active 及三条 InProgress Backup;上线前需重读并与 BEACO-233 的处置协调。本 PR 不授权另起整组 Job 或并发补备。

获批上线后,核对设置为 true、Longhorn/Flux Ready,并逐卷确认修复后的 backup-* 为 Completed,记录数据快照和备份完成时间,无消费者时确认卷回到 detached。task: backup 会跳过未变化数据,且当前 Job 可能阻塞新一轮;不能承诺下一个 cron 时点即得到新记录。如需为两卷强制建立新基线,须另行审批仅针对这两卷的串行补备操作包。

本轮没有新建快照、补备、挂载卷或恢复演练,未 suspend/resume Flux;issue 的生产验收尚未满足。旧恢复点只有 CR 证据,未验证这两卷的可恢复性,不以其他 coder-pg 演练替代。

回滚:通过审批的后续 PR 将该设置显式改为 false 并调谐,确认运行值和无消费者卷的最终状态;不要只删 Helm value,因为 Longhorn 保留的运行设置未必随默认值恢复。已开始的上传需单独核验,不能假定回滚会取消它们;保留现有备份与快照。

## 结论与修改 BEACO-244 的两卷都已命中 `RecurringJob/storage/daily-backup` 的 `default` 组;缺口是它们处于 detached,而运行设置 `allow-recurring-job-while-volume-detached=false`。不是 StorageClass 或卷标签漏选。 - 在 Longhorn HelmRelease 声明 `defaultSettings.allowRecurringJobWhileVolumeDetached: true`,让保留的停止工作区家目录继续受周期备份覆盖。 - 更新现有 `wanxiang/docs/operations/database-backup.md`,记录停止工作区的备份策略、集群级影响、运行值核验及新基线补备边界。 - `system-backup-*` 本身也是卷数据备份;这两卷存在 2026-09-18 的旧 Completed 恢复点,不能把缺少 `backup-*` 前缀等同于完全没有卷数据备份。两卷内容恢复尚未验证。 ## 只读现场证据 2026-10-25 01:25–01:27 UTC: | Volume | PVC(development) | 状态 | 最新数据快照 | | --- | --- | --- | --- | | `pvc-b33f2fe9-07cd-4cb6-bf46-9d8af52c2ef8` | `coder-860852a1-cc8c-420b-b5e9-c8295c6d2f32-home` | detached / Bound | 2026-09-18T12:02:03Z | | `pvc-448b9e0e-0642-497d-9cb6-96ee2a22b164` | `coder-beacon1096-test-nixos-home` | detached / Bound | 2026-09-18T12:02:53Z | 两卷均带 `recurring-job-group.longhorn.io/default=enabled`,没有 Pod 引用;54 个 Longhorn 卷中只有这两个 detached。集群未安装 VolumeBackupSchedule / CSI VolumeSnapshot CRD;本排期使用 Longhorn 原生备份。`BackupTarget/default` 为 available,仅证明控制器观测。 ## 验证 - `kubectl kustomize wanxiang/kubernetes/apps/storage/longhorn/app` 通过。 - 使用官方 Longhorn 1.12.1 chart 和完整 HelmRelease values 对比渲染:54 个对象中,仅 `ConfigMap/longhorn-default-setting` 增加目标设置,其他渲染对象相同。 - `git diff --check`、仓库 `utils/check-secrets.py --staged` 和提交 hook 通过。Python/PyYAML 使用仓库固定的 nixpkgs 提供。 - 本 PR 与 #279 修改同一备份文档的不同段落;没有复制该 PR 的修正或历史处置记录。 ## 上线审批、风险与验收 **保持 WIP,等待两卷保留意图及本次存储策略变更的明确批准。** 万象运行中的公开 Flux 来源直接跟随 `infra/main`;合并此 PR 会触发生产调谐,不能把合并当作纯离线集成。 该开关为集群级,当前新增覆盖两卷,未来也覆盖其他已选中排期的 detached 卷。周期任务会临时 attach 卷并增加存储/异地上传负载。当前仍有 `daily-backup-29879640` active 及三条 InProgress Backup;上线前需重读并与 BEACO-233 的处置协调。本 PR 不授权另起整组 Job 或并发补备。 获批上线后,核对设置为 true、Longhorn/Flux Ready,并逐卷确认修复后的 `backup-*` 为 Completed,记录数据快照和备份完成时间,无消费者时确认卷回到 detached。`task: backup` 会跳过未变化数据,且当前 Job 可能阻塞新一轮;不能承诺下一个 cron 时点即得到新记录。如需为两卷强制建立新基线,须另行审批仅针对这两卷的串行补备操作包。 本轮没有新建快照、补备、挂载卷或恢复演练,未 suspend/resume Flux;issue 的生产验收尚未满足。旧恢复点只有 CR 证据,未验证这两卷的可恢复性,不以其他 coder-pg 演练替代。 回滚:通过审批的后续 PR 将该设置显式改为 `false` 并调谐,确认运行值和无消费者卷的最终状态;不要只删 Helm value,因为 Longhorn 保留的运行设置未必随默认值恢复。已开始的上传需单独核验,不能假定回滚会取消它们;保留现有备份与快照。
fix(longhorn): cover detached volumes in recurring backups
Some checks are pending
Check Docs i18n / check-docs-i18n (push) Successful in 6s
Check Secrets / check-secrets (push) Successful in 11s
policy/merge-gate Waiting for /approve on this exact commit targeting main
Nix Validation / nix-evaluation (push) Successful in 52s
Check Docs i18n / check-docs-i18n (pull_request) Successful in 8s
Check Secrets / check-secrets (pull_request) Successful in 9s
Nix Validation / nix-evaluation (pull_request) Successful in 48s
55766f6056
Some checks are pending
Check Docs i18n / check-docs-i18n (push) Successful in 6s
Check Secrets / check-secrets (push) Successful in 11s
policy/merge-gate Waiting for /approve on this exact commit targeting main
Required
Details
Nix Validation / nix-evaluation (push) Successful in 52s
Check Docs i18n / check-docs-i18n (pull_request) Successful in 8s
Check Secrets / check-secrets (pull_request) Successful in 9s
Required
Details
Nix Validation / nix-evaluation (pull_request) Successful in 48s
Required
Details
This pull request is marked as a work in progress.
This branch is out-of-date with the base branch
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin agent/gitops/540e437baad3:agent/gitops/540e437baad3
git switch agent/gitops/540e437baad3
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
infrastructure/infra!287
No description provided.