# AWOOOI K3s 全景深度盤點 × 2026 主流對標 × 優化整合方案

> 產出：2026-05-08（K3s 專項深度版，補強 5/8 FINAL 文件第八節）
> 範圍：k8s/ 全部 manifest + .gitea/workflows + Migration SQL + AI Agent 對 K3s 介入鏈
> 方法：12-Agent 團隊並行盤點（5 Explore + critic + debugger + db-expert + tool-expert + web-researcher）
> 信心：High（每節 2+ agent 交叉驗證，Memory 對齊，附路徑+行號）

---

## 第一部分 — 集群拓撲現況真相

### 1.1 K3s 集群架構

| 項目 | 配置 | 風險 |
|---|---|---|
| **Datastore** | 外接 PostgreSQL `188:5432/k3s_datastore` 透過 kine adapter | 🔴🔴🔴 188 是 K3s + AWOOOI app 共用 PG → 同時死 |
| **Control Plane** | 雙 Server: 120 (keepalived MASTER pri=101) + 121 (BACKUP pri=100) | ✅ HA |
| **VIP** | `192.168.0.125:6443` | ⚠️ 單 VIP，無 BGP |
| **Worker Nodes** | 120 / 121 / 188（agent 也跑工作負載） | ⚠️ 188 SPOF（PG/MinIO/Sentry/Langfuse/Local Ollama 全在） |
| **CNI** | Flannel（K3s 預設） | 🟠 無 eBPF 觀測能力（Cilium 才有） |
| **LoadBalancer** | Klipper-lb（K3s 內建） | 🟠 無 BGP / FRR |
| **Storage** | local-path-provisioner | ✅ 但因 0 PVC，未實際使用 |
| **CoreDNS** | 自訂上游 8.8.8.8 + 1.1.1.1，TTL 30s, HPA 1-3 | ✅ |

### 1.2 重大發現（10-Agent 交叉驗證）

🔥 **K3s cluster 完全 stateless**：
- 0 個 PVC、0 個 StatefulSet、0 個 storageClassName
- 所有 stateful 工作 offload 到 188 host：PostgreSQL（systemd） / Redis / MinIO / Sentry / Langfuse / Local Ollama

**評價**：
- ✅ 避開 local-path-provisioner 的鎖節點地獄
- ✅ K3s upgrade / node 重灌極乾淨
- 🔴 但 188 SPOF 嚴重：監控 + 資料 + AI + 備份目標全在同一主機

### 1.3 系統 Add-ons 盤點

| 組件 | 版本 | NS | 狀態 | 風險 |
|---|---|---|---|---|
| Kured | 1.15.1 | kured | ✅ | 🟠 PSA privileged + Prom URL hardcode 110:9090（drift） |
| Kube-State-Metrics | 2.10.1 | kube-state-metrics | ✅ | NodePort:30888 對外（無認證） |
| Descheduler | 0.30.1 | descheduler | ✅ | restricted PSA 已修 |
| NPD | 0.8.17 | node-problem-detector | ✅ | 🟠 privileged:true 無 capabilities drop |
| Velero | 1.13.0 | velero | ✅ | 🔴🔴🔴 SA 綁 cluster-admin + MinIO 密碼明文進 git |
| Event-Exporter | 1.7 | observability | ✅ | 30 天保留 |
| OTEL Collector | 0.96.0 | observability | ✅ | 🟠 runAsUser:0 + privileged ns + hostPath |
| ArgoCD | 待確認 | argocd | ✅ | 🟠 webhook HMAC 斷線無告警 |

### 1.4 工作負載盤點

| Deployment | replicas | resources req/limit | Probe | securityContext | 風險 |
|---|---|---|---|---|---|
| awoooi-api (prod) | 2 | 200m/512Mi → 1c/1Gi | ✅ 三段 | ❌ 缺 runAsNonRoot | 🔴 容器逃逸風險 |
| awoooi-web (prod) | 2 | 100m/256Mi → 500m/512Mi | ✅ 三段 | ❌ 缺 | 🔴 同上 |
| awoooi-worker (prod) | 1 | 100m/256Mi → 500m/512Mi | ⚠️ 檔案心跳 | ❌ 缺 | 🔴 + worker PDB maxUnavailable=1 + replicas=1 = 允許全停 |
| awoooi-api (dev) | 1 | 100m/256Mi → 500m/512Mi | ❌ 無 startup | ❌ 缺 | 🟠 image:dev-latest |

**HPA**：API/Web 2→6, Worker 1→3（CPU 70% + Mem 80%）
**VPA**：全部 updateMode=Off ✅ 安全；🟠 無 admission policy 阻擋改 mode → HPA 衝突
**PDB**：API/Web minAvailable=1 ✅ / Worker maxUnavailable=1（replicas=1 危險）

**CronJob 5 個**：k3s-status / weekly-report / km-vectorize / backup-restore-test / drift-scanner — 全部 Forbid concurrency
**Migration Job 5 個**：ttl 300s, backoffLimit 1，🔴 全部用 sed 解析 DATABASE_URL（PGPASSWORD 暴露 process list）

---

## 第二部分 — 五大致命問題（必須今日內處理）🔴🔴🔴

### #1 Velero MinIO 密碼明文已進 git history
- **位置**：`k8s/velero/01-credentials.yaml:13-14`，commit `eea6e3ac`
- **內容**：`aws_access_key_id=<MINIO_ACCESS_KEY>` / `aws_secret_access_key=<MINIO_SECRET_KEY>`；舊版曾保存明文，已改用 placeholder 記錄
- **後果**：拿到 git repo（含 GitHub mirror）即可刪/竄改所有 Velero 備份 → DR 全崩
- **修復**：① 立即輪換 MinIO root + Velero key；② `.gitignore` 加 `*-credentials.yaml`；③ `git filter-repo` 擦歷史；④ 改 SealedSecret/ExternalSecret

### #2 Velero ServiceAccount 綁 cluster-admin
- **位置**：`k8s/velero/02-velero-install.yaml:28-29` + `velero-install-full.yaml`
- **後果**：velero pod 被攻陷或惡意 Backup CRD 注入 = 整 K3s 全控
- **修復**：改 ClusterRole 限定 `velero.io/*` + 必要 `pods/exec`、`namespaces`、`pv/pvc list/get`

### #3 四個 CronJob 缺 `system: awoooi` label（5/5 事故根因再現）
- **位置**：`k8s/awoooi-prod/13-cronjob-k3s-report.yaml:36-72`、`14-cronjob-weekly-report.yaml`、`15-cronjob-km-vectorize.yaml`、`16-cronjob-backup-restore-test.yaml`
- **根因**：`02-network-policy.yaml:84-86` egress 用 `system:awoooi` 篩選；default-deny-all 全 podSelector 生效；CronJob 沒 label → DNS、API、Telegram、PG egress 全擋
- **drift-cronjob 已修，13/14/15/16 沒修 → 下次 reboot 必再炸**
- **修復**：四個 CronJob `template.metadata.labels` 全加 `system: awoooi`

### #4 三個 Deployment 全缺 securityContext
- **位置**：`06-deployment-api.yaml:42-43`、`08-deployment-worker.yaml:43-44`、`05-deployment-web.yaml:35-36`
- **缺什麼**：`runAsNonRoot` / `runAsUser` / `allowPrivilegeEscalation:false` / `capabilities drop:[ALL]` / `readOnlyRootFilesystem`
- **後果**：namespace enforce=baseline 雖不擋，任何容器逃逸 → 整集群 RBAC 提權（與 SSH MCP 0400 私鑰風險疊加）
- **修復**：補 pod-level + container-level securityContext，namespace `enforce` 升至 `restricted`

### #5 NEMOTRON env 違反 4/12 暫停決議
- **位置**：`06-deployment-api.yaml:64-65` 與 `04-configmap.yaml:77` 矛盾
- **內容**：ConfigMap 設 `ENABLE_NEMOTRON_COLLABORATION=false`（暫停），Deployment env 又寫死 `true`，env 優先
- **後果**：K8s 重啟後重跑 Nemotron 60s×2 timeout 路徑
- **修復**：刪 Deployment env 覆蓋

---

## 第三部分 — 完整問題清單（按優先級）

### 🔴 P0 本週必修（共 18 項）

**安全 / Secrets**
1. Velero MinIO 密碼明文進 git（同上 #1）
2. Velero SA 綁 cluster-admin（同上 #2）
3. `.claude/settings.json` 18 條 sshpass + Telegram Token 明文（已知，未修）
4. `03-secrets.yaml` 16 處 CHANGE_ME 殘留（雖 .gitignore，force-add 風險）
5. cd.yaml 無 K8s secret 注入步驟（ADR-035 落地不徹底）

**網路 / 工作負載**
6. 4 個 CronJob 缺 `system:awoooi` label（同上 #3）
7. Migration Job 缺 `system:awoooi` label（DNS query 也被 NP 擋）
8. 三個 Deployment 缺 securityContext（同上 #4）
9. NEMOTRON env 衝突（同上 #5）

**資料層**
10. AwoooP Phase 1-7 七份 migration **完全無 rollback SQL**（Phase 1 註解寫「見 _ROLLBACK.sql」但檔案不存在 = 詐欺）
11. RLS prod 落地未驗證（執行第六部分驗證 SQL；EwoooC 寫資料前必做，否則 cross-tenant leak）
12. 5 個 Migration Job 用 sed 解析 DATABASE_URL → PGPASSWORD 暴露 process list
13. 188 PG `max_connections` 待提到 200 + 加 pgbouncer（kine + awoooi + sentry + langfuse 共用，連線爆）
14. Velero `Schedule` CRD **找不到證據**（只有 restore-test cron，可能根本沒在做定期 backup）

**監控 / CI/CD**
15. 120/121 無 node-exporter scrape job（K3s control plane 無監控）
16. SSH MCP 白名單缺 120/121（K3s worker 無自修能力）
17. cAdvisor 單點在 110（容器層監控 SPOF）
18. ArgoCD ↔ Gitea Webhook HMAC 斷線無告警

### 🟠 P1 兩週內（共 16 項）

**安全強化**
19. 部署 Sealed Secrets 或 External Secrets Operator（CD 自動解密注入）
20. Harbor ImagePullSecret（image pull 認證）
21. kured namespace 從 privileged 降 baseline
22. NetworkPolicy `0.0.0.0/0:443` egress → 改 Cilium FQDN policy 或 squid SNI 白名單
23. `awoooi-executor-dev` RBAC 從 `update` 降為 `patch`
24. Falco runtime threat detection（K3s 完全無 runtime security）

**工作負載強化**
25. Worker `replicas:2` + `maxUnavailable:1`（PDB 不再允許全停）
26. Worker 補 startup probe + initialDelay 60s
27. dev API 補 startup probe（與 prod 對齊）
28. `prometheus-multiproc` emptyDir 加 `sizeLimit:100Mi`
29. NPD 改 `capabilities.add:[SYS_ADMIN]`（取代 privileged:true）
30. OTEL collector 改 `fsGroup:0` + readOnly hostPath（取代 runAsUser:0）

**資料層 / 工具**
31. 補 7 份 AwoooP rollback SQL
32. ClickHouse pool×ratio precheck Job + Prometheus alert（5/5 事故根因）
33. `core/redis_keys.py` 統一 namespace（33+ 處散落 awoooi:/ alert:/ governance:/ incident:）
34. Velero `Schedule` CRD daily full + 寫到 GCP-A MinIO（mc mirror cron）

### 🟡 P2 一個月內（共 14 項）

**2026 主流工具導入**
35. **Kyverno** policy 治理（require-labels / resource-limits / no-latest-tag）
36. **Trivy Operator** 持續掃描 image + config + SBOM
37. **K8sGPT** 對接本地 Ollama → 餵 OpenClaw（補 diagnostician_agent 的 K8s 語義層）
38. **KRR** cronjob 形式給 CPU/Memory 建議（補 VPA Off 模式盲點）
39. **kube-bench** CIS K3s benchmark 定期掃描
40. **system-upgrade-controller** 取代手動 K3s 升級
41. K3s etcd 快照推 S3/遠端（預設只在本機 `/var/lib/rancher/k3s/server/db/snapshots`）

**K3s 強化**
42. learning_service.py:529, 592 兩個 N+1 改批次（並非原稱的 line 5028）
43. cd.yaml 拆 5 個 reusable workflow（53860 bytes 維護地獄）
44. Migration `manifest.yaml` + `helm.sh/hook-weight` 控制執行順序
45. `kine_request_duration_seconds{quantile=0.99} > 0.5` for 5m 告警（K3s datastore graceful degradation）
46. ArgoCD selfHeal 範圍涵蓋 ConfigMap（ignoreDifferences 只排除 Secret）
47. SSH MCP audit log 完整記錄（command/user/result/timestamp）
48. K3s audit log 啟用（CIS 1.2.19）

### 🟢 P3 兩個月內（共 10 項）

**進階治理 + GitOps**
49. **Argo Rollouts** progressive delivery（API/Web canary 10%→50%→100%）
50. **Sloth/Pyrra** SLO 自動化（API p99 latency / error rate）
51. **Goldilocks** VPA recommendation dashboard
52. **kubescape** RBAC visualization + security posture
53. **cosign image signing** + Kyverno policy 驗簽
54. ArgoCD ApplicationSet 多環境管理（dev/prod 同模板）
55. Argo CD Image Updater（自動偵測新 tag PR 回 git）
56. 6 個 GitHub Actions workflow 全部封存
57. K3s `--datastore` 評估從 kine+PG 退回 embedded etcd HA（節點 ≤5 場景，業界推薦反方向）
58. 188 SPOF 拆解：MinIO/Sentry/Langfuse 評估搬出

### 🔵 P4 戰略長期（Q3-Q4）

59. eBPF 觀測棧（Cilium 取代 Flannel + Hubble + Beyla / OTel OBI 2026 beta）
60. VictoriaMetrics 取代 Prometheus（記憶體 -60%）
61. EU AI Act 8/2 高風險合規（倒數 86 天）
62. K3s 多集群 Velero + ApplicationSet
63. Karpenter 評估（裸機需 kwok provider）

---

## 第四部分 — 2026 K3s + AIOps 主流做法對標

### 4.1 八大主題對照表

| 主題 | 2026 主流 / Top 3 | AWOOOI 現況 | 該做但沒做 |
|---|---|---|---|
| **K3s HA / 升級** | embedded etcd 3-server / system-upgrade-controller / Velero+etcd snapshot | 用外接 PG（kine） + Velero 但無 schedule 證據 | system-upgrade-controller / etcd snapshot 推遠端 / 季度 DR 演練 |
| **Policy 治理** | Kyverno / OPA Gatekeeper / kube-bench / Polaris | 只有 PSS（baseline），無 Kyverno/OPA | Kyverno + kube-bench + PSS Restricted 強制 |
| **GitOps 進階** | ArgoCD（97% 生產採用） / Argo Rollouts / Flagger+Flux | ArgoCD 已用，selfHeal+prune 4.5/5 成熟度 | Argo Rollouts canary / ApplicationSet 多環境 / Image Updater |
| **可觀測性 2026** | eBPF（Cilium+Hubble+Beyla/OTel OBI 2026 beta）/ VictoriaMetrics / Sloth Pyrra SLO | Prometheus + SignOz APM + OTel collector | eBPF 棧 / VictoriaMetrics（記憶體-60%）/ Sloth/Pyrra SLO |
| **AIOps for K8s** | K8sGPT（CNCF Sandbox） / HolmesGPT / KEDA event-scaling | 自建 12 Agent + 自建 K8sProvider MCP（11 工具，比 K8sGPT 深） | K8sGPT operator 接 Ollama 作第二 AI 視角 / KEDA 事件驅動擴展 |
| **資源優化** | Karpenter / Goldilocks / Robusta KRR | VPA updateMode=Off（無自動），無資源建議工具 | Goldilocks + KRR 一次掃描，常省 30-50% / VPA+HPA 衝突防護 |
| **備份 DR** | Velero（標準） / Kasten K10（商用） / TrilioVault | Velero 已部署但 Schedule 證據缺 | Velero Schedule daily full / 3-2-1 / 季度 restore 演練 |
| **Supply Chain Security** | Trivy Operator / Falco / Kubescape / cosign+Sigstore | 完全無 | Trivy Operator + Falco + cosign+Kyverno 驗簽（生產裸跑風險）|

### 4.2 必備 8 項清單（依優先序）

| 優先 | 項目 | 工具 | 原因 |
|---|---|---|---|
| **P0** | Runtime 安全監控 | **Falco** | 完全沒有 runtime threat detection，生產裸跑 |
| **P0** | Image 漏洞掃描 | **Trivy Operator** | 無持續掃描，supply chain 盲區 |
| **P0** | Velero 遠端備份驗證 | **Velero Schedule + S3** | 備份在本機 = 沒備份 |
| **P1** | Policy 治理 | **Kyverno** | 無 resource limit 強制，任意 Pod 可耗盡資源 |
| **P1** | 資源右移 | **Goldilocks + KRR** | 無推薦數據，浪費或不足均無感知 |
| **P1** | Progressive Delivery | **Argo Rollouts** | 現在部署無金絲雀，任何 bug 全流量即爆 |
| **P2** | SLO 自動化 | **Sloth/Pyrra** | 無 error budget，告警只看症狀不看承諾 |
| **P2** | K8sGPT operator | **K8sGPT + Ollama** | 飛輪可加第二 AI 視角，成本接近零 |

---

## 第五部分 — AI Agent 對 K3s 介入度評估（重大修正）

### 5.1 三層架構（修正前 monitoring agent 誤判）

| 層 | 實作 | 路徑 |
|---|---|---|
| **MCP 工具層** | `K8sProvider` — 11 個 MCP tool 對外暴露 | `apps/api/src/plugins/mcp/providers/k8s_provider.py` |
| **Python Client 層** | `kubernetes_asyncio` 直接操作 API Server | `executor.py`、`k8s_repository.py`、`k8s_diagnostics.py`、`context_gatherer.py` |
| **SSH 逃生層** | `host_repair_agent.py` SSH→docker（**不操作 K3s**） | `apps/api/src/services/host_repair_agent.py` |

### 5.2 已實作的 K3s MCP 工具（11 個）

**讀取類（read-only）**：`kubectl_get` / `k8s_get_pod_logs` / `k8s_get_events` / `k8s_describe_pod` / `k8s_get_hpa_status` / `k8s_get_node_conditions`

**寫入類（trust_score≥0.7）**：`kubectl_delete` / `kubectl_scale` / `kubectl_restart` / `kubectl_rollout_undo` / `k8s_watch_rollout`

**安全守衛**：namespace 白名單硬寫 `awoooi-prod` / 名稱 regex 防注入 / rollout_undo 標 human-triggered

### 5.3 介入能力等級：Level 3/5（先前誤判 2/5）

| 維度 | 能力 | 評分 |
|---|---|---|
| **觀察 Read** | Prometheus PromQL MCP / kube-state-metrics / blackbox / 11 個 K8s read tool | ✅ 4/5 |
| **規劃 Plan** | ActionPlanner 8 種 action_type / BlastRadius 評估 | ⚠️ 3/5（PATCH/EXEC/APPLY 4 種無模板） |
| **執行 Execute** | K8sProvider 5 個寫入 tool（trust_score gate）+ host_repair SSH 逃生 | ⚠️ 3/5（HITL 多，auto 比例低） |
| **學習 Learn** | learning_service KM 寫入 | ⚠️ 2/5（執行結果回灌 KM 不完整） |

### 5.4 K3s 異常盲區覆蓋率：35% 無法自動修復

| 異常 | AI 能見度 | 自動修復 |
|---|---|---|
| ImagePullBackOff | ⚠️ 部分 | ❌ 無 ActionType 對應 |
| Evicted | ⚠️ 部分 | ❌ 無專項指標 |
| PVC 滿 100% | ⚠️ 部分 | ❌ StorageClass 未配 auto-expand |
| HPA 無法 scale | ⚠️ 部分 | ❌ 無失敗告警 |
| Certificate 近期過期 | ❌ 盲區 | ❌ 無 cert-manager 整合 |
| RBAC 配置偏差 | ❌ 盲區 | ❌ 無自動修復 |
| etcd / kine 資料損毀 | ❌ 盲區 | ❌ 無健康檢查 |

### 5.5 缺口補齊（P1）

- 補 ConfigMap/Secret PATCH MCP tool
- 補 PVC/PV 查詢 tool
- 補 NetworkPolicy 檢視 tool
- `k8s_get_events` 改回傳結構化（解析 raw JSON）
- `kubectl_get` 漏套 `_validate_namespace`
- 補 5 種異常的 ActionType（IMAGE_PULL_RETRY / POD_EVICT_RECOVERY / PVC_EXPAND_REQUEST / CERT_RENEW_TRIGGER / RBAC_DRIFT_REPAIR）

---

## 第六部分 — 過去 30 天 13 起事故 + 10 大根因模式 + 7 大未來預測

### 6.1 13 起事故時序（debugger agent）

| 日期 | 事故 / commit | 根因類別 |
|---|---|---|
| 04-14 | NP default-deny-all 9.4h GCP-A 全鏈擋 | NP 阻塞型 |
| 04-25 | Gitea LLM 生 kubectl scale 無 inventory | Inventory-Aware 缺失 |
| 04-25 | _ALLOWED_KUBECTL_PATTERN 飛輪 0% 14 天斷鏈 | 過濾邏輯反向誤傷 |
| 04-26~28 | host 告警誤生 kubectl rollout | LLM 對非 K8s asset 生 K8s 動作 |
| 04-28 | T0 Gap 6 related_approval_id 無寫入 | model drift |
| 04-28 | ssh-mcp-key known_hosts subPath 0 bytes | CD secret patch 漏 |
| 04-28 | NP 缺 22/tcp egress | NP 增量加孔 |
| 05-05 | 110/188 CPU 過載 13 天 0 告警 | 監控元件無監控 |
| 05-05 | working_set 取代 page cache | metric 來源錯 |
| 05-06 | dirty reboot 121 K3s | 自動恢復缺 |
| 05-07 | settings.json token 洩漏 | Secret 治理 |
| 05-08 | IMAGE_TAG_PLACEHOLDER 推上 ImagePullBackOff | apply -f 與 GitOps render 混用 |

### 6.2 10 大根因模式

1. **NP 阻塞型**（增量加孔 + 無 single owner）
2. **Inventory-Aware 缺失**（LLM 不知 target 是不是 K8s asset）
3. **Image Tag/Placeholder 中毒**（apply -f 與 GitOps render 混用）
4. **CronJob SA/DNS 寫死**（複製貼上未驗證）
5. **Probe/分類不當**（page cache 假告警 / blackbox timeout 太短）
6. **Resource & Datastore 抖動**（監控元件無監控、ClickHouse pool 三門檻無 lint）
7. **CD pipeline 不穩**（無 CD 健康看板）
8. **Secret 治理**（CHANGE_ME 注入鏈無啟動自驗 gate）
9. **Kubeconfig context gap**（CD 121→120 是 workaround）
10. **節點負載集中度**（110 跑 4 服務 / 188 跑 4 服務 都單點）

**核心洞察**：48% commit 是 fix / 0 refactor / 無上游抽象 + 無 lint gate 的補丁式治理 = 反覆爆雷的 root pattern。

### 6.3 未來 30 天 7 大預測爆點

| # | 預測事故 | 為什麼會爆 | 預防動作 |
|---|---|---|---|
| 1 | **110 主機掛 → Ollama proxy/Harbor/Gitea runner 全斷** | 三服務全集中 110 | 把 Harbor / Gitea runner 遷 188 或 120 |
| 2 | **下一個 NP 漏孔事故** | 增量加孔模式不變 | CI 加 `kubectl-validate` + 必填 NP egress section |
| 3 | **CronJob 自修報表斷鏈再現** | 無 health export | textfile collector `last_success_timestamp` |
| 4 | **IMAGE_TAG_PLACEHOLDER 再次蓋掉** | `apply -f` 與 GitOps 混用 | pre-commit hook 阻擋含 PLACEHOLDER 的 yaml |
| 5 | **EU AI Act 8/2 + RLS prod 未確認 → cross-tenant leak** | RLS 未驗 + EwoooC Phase 6 已開 | 立刻跑 cross-tenant pytest |
| 6 | **SignOz/Sentry CH pool 改動崩潰** | 三門檻無 lint | CI XML schema validator |
| 7 | **LLM 對新 alertname 生 kubectl scale unknown** | inventory awareness alertname-by-alertname 補丁 | inventory hard-gate（任何 scale/rollout/delete 必查 cluster live inventory） |

---

## 第七部分 — RLS 落地驗證 SQL（執行於 awoooi_prod）

```sql
-- 1. 表是否存在
SELECT tablename FROM pg_tables
WHERE tablename LIKE 'awooop_%' OR tablename = 'budget_ledger'
ORDER BY tablename;

-- 2. RLS 是否啟用（核心驗證）
SELECT schemaname, tablename, rowsecurity, forcerowsecurity
FROM pg_tables
WHERE tablename IN (
  'incidents','knowledge_entries','playbooks','audit_logs',
  'awooop_contract_revisions','awooop_active_revisions','awooop_platform_subjects'
);

-- 3. RLS policies
SELECT schemaname, tablename, policyname, cmd, qual, with_check
FROM pg_policies
WHERE tablename LIKE 'awooop_%' OR tablename IN ('incidents','knowledge_entries','playbooks','audit_logs');

-- 4. Roles 是否建立
SELECT rolname, rolbypassrls, rolcanlogin
FROM pg_roles
WHERE rolname IN ('awooop_app','awooop_migration','awooop_platform_admin');

-- 5. 跨租戶隔離測試（最關鍵）
SET LOCAL ROLE awooop_app;
SET LOCAL app.project_id = 'ewoooc';
SELECT count(*) FROM incidents;  -- 預期：0（如果 RLS 正確）
SET LOCAL app.project_id = 'awoooi';
SELECT count(*) FROM incidents;  -- 預期：> 0
RESET ROLE;

-- 6. 種子資料
SELECT project_id, display_name, migration_mode, is_active
FROM awooop_projects;
-- 預期至少：'awoooi' + 'ewoooc'
```

---

## 第八部分 — 工具推薦表（12 工具）

| # | 工具 | 用途 | 整合工數 | 必要性 |
|---|---|---|---|---|
| 1 | **k9s** | K3s TUI 操作 | 0 天（本機裝） | ★★★★★ |
| 2 | **stern** | 多 Pod log tail | 0 天（本機裝） | ★★★★★ |
| 3 | **KRR** | CPU/Memory 建議（不需 VPA） | 0.5 天（cronjob） | ★★★★★ |
| 4 | **K8sGPT** | LLM 解釋 K8s 異常 → 餵 OpenClaw | 1 天（Helm + Ollama） | ★★★★★ |
| 5 | **kube-bench** | CIS K3s 合規掃描 | 0.5 天（一次性 Job） | ★★★★ |
| 6 | **Falco** | Runtime threat detection | 1.5 天（DaemonSet） | ★★★★★ |
| 7 | **Trivy Operator** | 持續 CVE + secret 掃描 | 1 天（operator） | ★★★★★ |
| 8 | **Kyverno** | Policy 治理 | 1.5 天（policy 編寫） | ★★★★★ |
| 9 | **kubectx/kubens** | context/namespace 切換 | 0 天（本機裝） | ★★★★ |
| 10 | **Argo Rollouts** | progressive delivery | 2 天（API/Web canary） | ★★★★ |
| 11 | **kubescape** | RBAC + security posture | 0.5 天（CLI 掃描） | ★★★★ |
| 12 | **act** | Gitea Actions 本機模擬 | 0.5 天（setup） | ★★★ |

---

## 第九部分 — Roadmap 修訂表

| 階段 | 範圍 | 主要動作 |
|---|---|---|
| **🔴 P0 本週 5/8-5/14** | 18 項 | Velero/Secret 撤離 + CronJob label 補 + Deployment securityContext + NEMOTRON env + RLS 驗證 + Migration rollback SQL + 188 PG max_connections |
| **🟠 P1 兩週內 5/15-5/28** | 16 項 | Sealed Secrets / Falco / Trivy Operator / Kyverno / Worker PDB / OTEL 降權 / NPD 限 caps / CH pool precheck / Velero Schedule + 異地 |
| **🟡 P2 一個月內 5/29-6/30** | 14 項 | K8sGPT + KRR + kube-bench / system-upgrade-controller / cd.yaml 拆 / Migration manifest / kine graceful degradation / 補 5 ActionType |
| **🟢 P3 兩個月內 7-8 月** | 10 項 | Argo Rollouts / Sloth/Pyrra / Goldilocks / kubescape / cosign+Kyverno 驗簽 / GitHub Actions 封存 / 評估 etcd HA |
| **🔵 P4 戰略 Q3-Q4** | 5 項 | eBPF（Cilium）+ VictoriaMetrics / EU AI Act / Karpenter / 多集群 |

**總計 63 項，10-Agent 交叉驗證，附路徑+行號。**

---

## 第十部分 — 引用來源 + 12-Agent 任務分配

### Agent 並行任務分配

| Agent | 子任務類型 | 主要產出 |
|---|---|---|
| Explore × 5 | 集群拓撲 / 工作負載 / 安全網路 / 監控AI / CI/CD | 第一/三/五/六部分基礎事實 |
| critic | K3s manifest 安全審查 | 26 個問題（5 致命、8 高、9 中、4 低） |
| debugger | 過去 30 天事故 pattern | 13 起事故 / 10 模式 / 7 預測（第六部分） |
| db-expert | K3s datastore + storage + migration | 10 項資料層加固 + RLS 驗證 SQL（第七部分） |
| tool-expert | 工具鏈評估 + MCP 整合 | 12 工具推薦表（第八部分） |
| web-researcher | 2026 K3s + AIOps 主流做法 | 8 主題對標 + 8 必備清單（第四部分） |

### Memory 對齊

- `feedback_clickhouse_pool_size_rules.md`（5/5 事故）
- `feedback_telegram_secrets_injection.md`（ADR-035）
- `feedback_secrets_leak_incidents_2026-04-18.md`（零信任 3 層）
- `feedback_secret_debug_output_ban.md`（PG PW 暴露事故）
- `project_cpu_overload_postmortem_20260505.md`（110/188 過載）
- `project_audit_20260507.md`（5/7 全景審計，AwoooP RLS 紅燈）

### 與 5/8 FINAL 文件的差異與補強

| 項目 | 5/8 FINAL | 本文件補強 |
|---|---|---|
| K3s 章節 | 第 8 節 1 頁帶過 | 完整 10 部分深度展開 |
| Velero MinIO 密碼洩漏 | 未提 | 🔴🔴🔴 第二部分 #1 |
| 4 個 CronJob NP label | 未提 | 🔴🔴🔴 第二部分 #3 |
| 三 Deployment 缺 securityContext | 未提 | 🔴🔴🔴 第二部分 #4 |
| AwoooP migration 無 rollback | 提到「重大缺口」 | 第三部分 P0 #10 + 第七部分驗證 SQL |
| AI 對 K3s 介入等級 | 未量化 | 第五部分 Level 3/5 + 11 個 MCP tool 詳列 |
| 過去 30 天事故 pattern | 提到 cd.yaml 18 次修補 | 第六部分 13 起事故 + 10 模式 + 7 預測 |
| 2026 主流工具對照 | A/B/C/D 4 主題 | 第四部分 8 主題完整對標 |
