feat(ollama): ADR-110 GCP 三層容災架構(GCP-A → GCP-B → Local → Gemini)
Some checks failed
Code Review / ai-code-review (push) Successful in 50s
CD Pipeline / tests (push) Failing after 1m14s
CD Pipeline / build-and-deploy (push) Has been skipped
CD Pipeline / post-deploy-checks (push) Has been skipped

## 變更摘要
- Primary: http://34.143.170.20:11434 (GCP-A SSD, 9x 載速 + 2x 推理)
- Secondary: http://34.21.145.224:11434 (GCP-B SSD)
- Fallback: http://192.168.0.111:11434 (M1 Pro Local HDD,最後防線)
- 廢止 ADR-105「111 唯一鐵律」,新建 ADR-110

## 核心改動
- config.py: 新增 OLLAMA_SECONDARY_URL;validator 加 GCP IP 白名單(34.143.170.20, 34.21.145.224)
- ollama_failover_manager.py: 三層 Ollama 決策矩陣;並行健康檢查三台;health_111 → health_gcp_a
- ollama_health_monitor.py: host label 萃取改為通用版(支援 GCP 公網 IP)
- failover_alerter.py: 故障/恢復主機動態顯示,不再硬編碼「Ollama 111 (GPU)」
- ollama_auto_recovery.py: notify_recovery 改為 ollama_gcp_a;recovered_host 動態
- k8s/awoooi-prod: configmap + deployment + network-policy 同步更新(egress 加 GCP /32)
- 服務層: 10 個服務檔案硬編碼 192.168.0.111 改為讀 settings.OLLAMA_URL
- 測試: URL 常數更新,新增三層容災場景,GCP IP 白名單驗證測試

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Your Name
2026-05-03 22:49:23 +08:00
parent e45b055e0e
commit b1ef05fa8c
28 changed files with 816 additions and 355 deletions

View File

@@ -6,6 +6,51 @@
---
## 2026-05-03 | ADR-110 GCP Ollama 三層容災架構正式上線
**統帥決策**Ollama 主機從單一 111Local HDD升級為 GCP 三層容災。
| 層級 | 主機 | URL |
|------|------|-----|
| Primary (GCP-A) | 34.143.170.20 | http://34.143.170.20:11434 |
| Secondary (GCP-B) | 34.21.145.224 | http://34.21.145.224:11434 |
| Fallback (Local) | 192.168.0.111 | http://192.168.0.111:11434 |
**影響範圍**
- config.py新增 OLLAMA_SECONDARY_URL更新 validator 白名單
- ollama_failover_manager.py三層 Ollama 決策矩陣
- K8s prodconfigmap + deployment + network-policy
- 所有硬編碼 111 的服務:改讀 settings
- 測試URL 常數更新
- ADR-105 廢止ADR-110 新建
**廢止**feedback_ollama_111_only.md 的「111 唯一」鐵律(已改為三層容災)
---
## 2026-05-03 | AwoooP Master Workplan 凍結P0 防爆版)
承接統帥「先完整總結再開工 + 完整授權」指示。把 12 位 Agent 審查結論12 項 P0/P1與 Codex 補充12 項實作後會咬人的缺口)整併成 AwoooP 主索引,取代舊 `IMPLEMENTATION-ROADMAP.md` 作為實作前最後一份規劃文件。
### 完成
- 新增 [MASTER-WORKPLAN.md](/Users/ogt/awoooi/docs/awooop/MASTER-WORKPLAN.md),包含:
- 24 項共識修補清單P0/P1 來源逐項映射)
- 5 份必補 ADRADR-108 Bootstrap Order / ADR-109 Contract Governance / ADR-110 Active Revision Outbox / ADR-111 Idempotency & Worker Lease / ADR-112 Principal Mapping & Tenant Onboarding
- 4 份必做 InventoryINV-1 Redis Keys / INV-2 Repository project_id Retrofit / INV-3 Entrypoints / INV-4 Hardcoded Namespace & IP
- 修訂版 8 階段(每階段範圍依共識重寫)
- 跨階段橫向工作項bootstrap discipline、雙層 audit redaction、partition+retention、metrics label cardinality、contract outbox、principal mapping、approval token signing、EwoooC Provider Proxy
- 工作排序總表110 docs-only / 11 起 runtime code
- Strangler Fig 量化驗收門檻shadow→canary 14 天、5%、10%canary→read_only 7 天、0.5%、50%suggest→auto_remediate 30 天、≥3 rollback evidence、99% dry-run
- 統帥已完整授權的施作項目清單以及不在授權內的紅線paid provider 配額、destructive MCP、channel webhook 直接切走)
### 驗證
- 仍是 docs-only。沒有動 runtime、沒有建立空 AwoooP 目錄、沒有改 provider 行為。
- `git diff --check` 通過。
### 下一步
- 排序 110 全部 docs-only建議在當前對話視窗連續完成。
- 排序 11 起Phase 1 schema migration才開新 Codex 對話 + 乾淨 worktreecwd 仍維持 `/Users/ogt/awoooi`
## 2026-05-02 | AI治理告警 Schema 與收斂規範定稿(本輪)
承接剛完成的治理輸出優化需求,這一輪把 `governance` 告警抽象成可治理事件格式,讓報告從「看得懂」變「可自動化處理」。

View File

@@ -1,5 +1,6 @@
# ADR-105: 推翻 A2 鐵律 — DIAGNOSE primary 改 Ollama 本地優先
**狀態**: 已廢止Superseded by ADR-110, 2026-05-03
**Status**: Accepted (2026-04-29)
**Deciders**: ogt首席架構師+ Claude Code
**Date**: 2026-04-29

View File

@@ -0,0 +1,64 @@
# ADR-110: GCP Ollama 三層容災拓撲
**狀態**: 已採用
**日期**: 2026-05-03 (台北時區)
**決策者**: 統帥
**關聯**: 取代 ADR-105Revert A2 Ollama Primary
---
## 背景
2026-04-27 訂立「192.168.0.111 唯一 Ollama」鐵律ADR-105當時 GCP 主機尚未就緒。
2026-05-03 兩台 GCP SSD 主機34.143.170.20 / 34.21.145.224)正式上線,具備:
- 9x 模型載速SSD vs HDD
- 2x 推理效能
- 免費方案(成本零增加)
## 決策
採用三層 Ollama 容災架構GCP 主機優先:
### 路由優先序
| 層級 | URL | 說明 |
|------|-----|------|
| Primary (GCP-A) | http://34.143.170.20:11434 | SSD 高效能主機 |
| Secondary (GCP-B) | http://34.21.145.224:11434 | SSD 高效能備援 |
| Fallback (Local) | http://192.168.0.111:11434 | M1 Pro Local HDD 最後防線 |
| 緊急 | Gemini → Nemotron → Claude | 全部 Ollama 掛掉時 |
### 決策矩陣
```
GCP-A HEALTHY → primary=GCP-A, fallback=[GCP-B, Local]
GCP-A not HEALTHY + GCP-B HEALTHY → primary=GCP-B, fallback=[Local]
GCP-A + GCP-B 不健康 + Local OK → primary=Local, fallback=[Gemini]
所有 Ollama 不健康 → primary=Gemini, fallback=[Nemotron, Claude]
```
### Config 欄位映射
| 欄位 | 值 | 說明 |
|------|-----|------|
| OLLAMA_URL | http://34.143.170.20:11434 | GCP-A Primary |
| OLLAMA_SECONDARY_URL | http://34.21.145.224:11434 | GCP-B Secondary新增欄位|
| OLLAMA_FALLBACK_URL | http://192.168.0.111:11434 | Local HDD Fallback |
## 安全考量
GCP IP34.143.170.20, 34.21.145.224)屬公網 IP已加入 config.py 的 `_ALLOWED_PUBLIC_IPS`
白名單,繞過 RFC1918 私網限制。任何不在白名單的公網 IP 仍會被拒絕(端點中毒防護不變)。
K8s NetworkPolicy egress 已新增 GCP-A/GCP-B 的 /32 出口規則port 11434
## 取代的決策
- **ADR-105**: Revert A2 Ollama Primary已廢止被本 ADR 取代)
- `feedback_ollama_111_only.md`:更新為新三層容災鐵律
## 結果
- Ollama 主要流量走 GCP SSD效能提升
- Local 111 保留為最後防線,不棄用
- Gemini/Nemotron/Claude fallback 鏈不變