From 79d50ef6edb7918535eaafaeb8c29cd0e0df15d0 Mon Sep 17 00:00:00 2001 From: Timmy Date: Fri, 29 May 2026 21:01:38 +0800 Subject: [PATCH] docs: add power-outage recovery SOP + onboot/startup tiering + K3s VM notes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 停電事件處理收尾:三節點 2026-05-29 14:34 同時斷電復電。 - 新增「停電/不正常斷電復電 SOP」:判斷停電、losetup+e2fsck 離線修復根碟、pct start 卡 SSH 的坑 - 22 台全設 onboot=1 + startup 三層(T1網路/T2基礎/T3應用)對照表 - 新增「K3s VM 登入與操作」:ubuntu 帳號、kubectl 需 sudo、host key - 紀錄停電造成 K3s VM(120/121/122)根碟 ext4 損壞,已全數 e2fsck 修復 Co-Authored-By: Claude Opus 4.8 (1M context) --- PVECluster_Architecture.md | 44 +++++++++++++++++++++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/PVECluster_Architecture.md b/PVECluster_Architecture.md index 525bb44..9beb067 100644 --- a/PVECluster_Architecture.md +++ b/PVECluster_Architecture.md @@ -1,6 +1,6 @@ # PVECluster 叢集架構文件 -> 最後更新:2026-04-18(CT100 升級為 NetBird Subnet Router,廣播 192.168.42.0/24) +> 最後更新:2026-05-29(新增「停電復電 SOP」;全 guest 設定 onboot=1 + startup 分層;停電後修復 K3s VM 根碟 ext4 損壞) ## 一、叢集概覽 @@ -287,6 +287,48 @@ systemctl daemon-reload && systemctl reset-failed console-getty && systemctl res pct set -features nesting=1 -tty 2 ``` +### 停電 / 不正常斷電復電 SOP + +整個機房為**單一電源、無 UPS**,三節點會同時斷電。已知斷電會造成 syno-lvm 上的 guest 根檔案系統 ext4 損壞(尤其有大量寫入的 K3s VM)。 + +**判斷是否為停電**:三節點 `who -b` / `last -x reboot` 顯示**幾乎同一秒**開機,且上一個 boot 的 journal 結尾無正常關機程序(無 `Stopping...` / `Reached target Shutdown`,直接中斷)。 + +**復電後復原步驟**: + +1. **確認叢集** — `pvecm status`(Quorate: Yes)、`pvesm status`(syno-lvm / syno-iscsi / synology-backup / pbs 皆 active;pbs 需 VM 111 開機後才會 active)。 +2. **啟動所有 guest** — 已全數設定 `onboot=1`,正常會自動分層啟動(見下)。若需手動:`qm start ` / `pct start `。 + - ⚠️ 透過 SSH 跑 `pct start` 後 session 可能被容器常駐 monitor(`lxc-start -F`)卡住,導致後續 chained 指令不執行。逐台執行或加 `/dev/null 2>&1` 導開 fd。 +3. **檢查 guest 是否真的起來** — Proxmox 顯示 `running` ≠ guest OS 正常。逐台 ping / SSH;不通的用 `qm monitor ` → `screendump /tmp/x.ppm` 看 console。若看到 `EXT4-fs error ... Remounting filesystem read-only` 代表根碟損壞,需離線 fsck。 +4. **離線修復損壞的根碟(VM)** — guest 內部無法自救(根已唯讀)。在該 VM 所在節點執行: + + ```bash + qm stop + lvchange -ay syno_vg/vm--disk-1 # 停 VM 後 LV 會 inactive,需重新啟用 + LOOP=$(losetup -Pf --show /dev/syno_vg/vm--disk-1) # 用 loop 掃出分割區(pve 無 kpartx) + e2fsck -fy ${LOOP}p1 # p1 = cloudimg-rootfs,-fy 自動修復 + losetup -d $LOOP + qm start + ``` + + 修復成功後 console 應顯示 `EXT4-fs (sda1): re-mounted ... r/w`(不再被踢成唯讀)。 + +**開機自動啟動 / 分層策略**(22 台全設 `onboot=1`,每節點獨立依 order 啟動,`up` 為啟動後延遲秒數): + +| 層 | startup | 成員 | +|---|---|---| +| **T1 網路** | `order=1,up=20` | VM 110 OpenWRT、CT 100 NetBird Router | +| **T2 基礎** | `order=2,up=15` | VM 111 PBS、VM 120 K3s-server、CT 126 Headscale、CT 118 PostgreSQL/Redis | +| **T3 應用** | `order=3,up=8` | 其餘所有 VM/CT(K3s agents 121/122 + 各服務 CT) | + +> 設定指令:VM 用 `qm set --onboot 1 --startup order=N,up=S`,CT 用 `pct set --onboot 1 --startup order=N,up=S`。 + +### K3s VM 登入與操作 + +- **登入帳號為 `ubuntu`(非 root)** — 三台皆由 VM 9000 cloud-init 模板建立。`ssh ubuntu@192.168.42.12{0,1,2}`,root 登入會被拒。 +- **kubectl 需 `sudo`** — kubeconfig 在 root 權限下,例:`sudo kubectl get nodes`(從 VM 120 server 執行)。 +- 重建/重開後 SSH host key 可能變動,必要時先 `ssh-keygen -R `。 +- VM 121/122 為 stateless worker,停機時工作負載會自動重調度到其他節點,可安心離線維護。 + ## 九、Corosync 叢集通訊 ```