# PhotonCloud VMクラスター検証計画 ## 背景と目的 PhotonCloudシステム全体(12の主要コンポーネント)について、VM上でクラスターを構築し、以下を検証する: 1. **クラスターの正常動作**: 3ノードクラスターが正常に形成され、Raftクラスターが機能するか 2. **各コンポーネントの動作**: 全12コンポーネントが正常に起動し、APIが応答するか 3. **統合動作**: コンポーネント間の連携が正常に機能するか 4. **エンドツーエンドテスト**: 実際のユースケースが動作するか ## 現状の把握 ### 実装済みコンポーネント(12個) 1. **ChainFire** - クラスターKVS(ポート: 2379/2380/2381) 2. **FlareDB** - DBaaS KVS(ポート: 2479/2480) 3. **IAM** - 認証・認可(ポート: 3000) 4. **PlasmaVMC** - VM基盤(ポート: 4000) 5. **PrismNET** - オーバーレイネットワーク(ポート: 5000) 6. **FlashDNS** - DNS(ポート: 6000) 7. **FiberLB** - ロードバランサー(ポート: 7000) 8. **LightningStor** - オブジェクトストレージ(ポート: 8000) 9. **k8shost** - K8sホスティング(ポート: 6443) 10. **NightLight** - メトリクス/オブザーバビリティ(ポート: 9101) 11. **CreditService** - クレジット/クオータ管理(ポート: 3010) 12. **Deployer** - ベアメタルプロビジョニング ### 過去のタスク状況 - **T036** (完了): VMクラスター展開の検証(部分的成功) - VDEネットワーキング検証済み - カスタムnetboot with SSH key検証済み - ディスク自動化検証済み - サービスデプロイはT038完了後に実施 - **注意**: `validate-cluster.sh`のIAMポートは8080(古い設定)→ 実際は3000を使用 - **T039** (進行中): 本番デプロイメント - S1: ハードウェア準備(完了: 2025-12-12) - S2: ブートストラップインフラ(完了: 2025-12-12) - S3: NixOSプロビジョニング(進行中: 2025-12-13 07:34時点で最終フェーズ) - 全3ノードにNixOS 26.05インストール済み - 10サービス + systemdユニット生成中(ETA 5-10分) - S4-S6: サービスデプロイ、クラスター形成、統合テスト(未実施) - **T040** (完了): HA検証 - Raftクラスターの耐障害性検証済み - ギャップドキュメント作成済み ### 利用可能なリソース - **VMインフラ**: `baremetal/vm-cluster/` に3ノードVM環境 - node01: 192.168.100.11 (SSH: 2201) - node02: 192.168.100.12 (SSH: 2202) - node03: 192.168.100.13 (SSH: 2203) - VDEネットワーク: L2ブロードキャストドメイン - **設定ファイル**: `docs/por/T036-vm-cluster-deployment/` - node01/02/03のconfiguration.nix, disko.nix, cluster-config.json - **検証スクリプト**: `baremetal/vm-cluster/validate-cluster.sh` - **注意**: このスクリプトはT036用で、IAMポートが8080(古い設定)になっている - 実際の本番環境ではIAMは3000を使用 - 使用前にポート番号を確認すること - **統合テスト計画**: `docs/por/T039-production-deployment/S6-integration-test-plan.md` - T039.S6用の詳細なテスト計画 - 正しいポート番号(IAM: 3000)を使用 - 11サービス × 3ノードのヘルスチェック手順を含む ## 検証計画の全体構成 ### フェーズ1: T039タスクの実行(S3-S6) **目標**: T039の残りのステップ(S3-S6)を完了させる #### T039.S3: NixOSプロビジョニング(実行中) **現在の状況**: - 全3ノードにNixOS 26.05インストール済み - 10サービス + systemdユニット生成中(進行中) **実行手順**: 1. **S3完了確認** ```bash cd /home/centra/cloud for node in 192.168.100.11 192.168.100.12 192.168.100.13; do echo "=== Checking $node ===" ssh root@$node 'nixos-version && systemctl list-units --type=service --state=running | grep -E "chainfire|flaredb|iam|plasmavmc|prismnet|flashdns|fiberlb|lightningstor|k8shost|nightlight|creditservice"' done ``` 2. **NixOSプロビジョニングが未完了の場合** - T036の設定ファイルを使用してnixos-anywhereでプロビジョニング - 設定ファイル: `docs/por/T036-vm-cluster-deployment/node01/`, `node02/`, `node03/` - コマンド例: ```bash nixos-anywhere --flake .#node01 root@192.168.100.11 nixos-anywhere --flake .#node02 root@192.168.100.12 nixos-anywhere --flake .#node03 root@192.168.100.13 ``` #### T039.S4: サービスデプロイメント **目標**: 全12サービスが全3ノードで起動していることを確認 **実行手順**: 1. **サービス起動確認** ```bash cd /home/centra/cloud for node in 192.168.100.11 192.168.100.12 192.168.100.13; do echo "=== Services on $node ===" ssh root@$node 'systemctl list-units --type=service --state=running | grep -E "chainfire|flaredb|iam|plasmavmc|prismnet|flashdns|fiberlb|lightningstor|k8shost|nightlight|creditservice"' done ``` 2. **サービスが起動していない場合** - ログ確認: `ssh root@$node 'journalctl -u --no-pager -n 50'` - サービス有効化: `ssh root@$node 'systemctl enable --now '` - 設定ファイル確認: NixOSモジュールの設定を確認 #### T039.S5: クラスター形成 **目標**: ChainFireとFlareDBのRaftクラスターが3ノードで形成される **実行手順**: 1. **ChainFireクラスター確認** ```bash for node in 192.168.100.11 192.168.100.12 192.168.100.13; do echo "=== ChainFire Cluster on $node ===" grpcurl -plaintext $node:2379 chainfire.ClusterService/GetStatus || echo "ChainFire not ready" done ``` 2. **FlareDBクラスター確認** ```bash for node in 192.168.100.11 192.168.100.12 192.168.100.13; do echo "=== FlareDB Cluster on $node ===" grpcurl -plaintext $node:2479 flaredb.AdminService/GetClusterStatus || echo "FlareDB not ready" done ``` 3. **クラスターが形成されていない場合** - クラスター設定ファイル確認: `/etc/nixos/secrets/cluster-config.json` - ネットワーク接続確認: `ping`でノード間通信を確認 - TLS証明書確認: `/etc/nixos/secrets/`の証明書ファイルを確認 - ログ確認: `journalctl -u chainfire -u flaredb --no-pager` #### T039.S6: 統合テスト **目標**: T039.S6統合テスト計画に基づいて全テストを実行 **実行手順**: - 詳細なテスト手順は `docs/por/T039-production-deployment/S6-integration-test-plan.md` を参照 - 8つのテストカテゴリを順次実行 - 結果を記録: `docs/por/T039-production-deployment/S6-results.md` ### フェーズ2: 基本動作検証 **目標**: 各コンポーネントが基本的な機能を提供できるか検証 **検証項目**: 1. **サービスヘルスチェック** - 全12サービスが全3ノードで応答するか - gRPCリフレクションが動作するか - ヘルスチェックエンドポイントが応答するか 2. **クラスター状態確認** - ChainFire: 3メンバー、リーダー選出、全ノード健全 - FlareDB: 3メンバー、クォーラム形成、レプリケーション動作 3. **基本CRUD操作** - ChainFire: KV操作(put/get/delete) - FlareDB: KV操作とレプリケーション確認 - データが全ノードにレプリケートされるか ### フェーズ3: コンポーネント間統合検証 **目標**: コンポーネント間の連携が正常に動作するか検証 **検証シナリオ**: 1. **IAM認証フロー** - 組織作成 → ユーザー作成 → 認証 → トークン発行 → トークン検証 - 異なるノードからの認証要求が動作するか 2. **FlareDBストレージ統合** - データ書き込み → 異なるノードからの読み取り(レプリケーション確認) - トランザクション操作の動作確認 3. **LightningStor S3操作** - バケット作成 → オブジェクトアップロード → 異なるノードからのダウンロード - S3互換APIの動作確認 4. **FlashDNS名前解決** - DNSレコード作成 → 異なるノードからの名前解決 - 複数ゾーンの動作確認 5. **PrismNETオーバーレイネットワーク** - VPC作成 → サブネット作成 → ポート作成 - テナント分離の動作確認 6. **FiberLBロードバランシング** - ロードバランサー作成 → プール作成 → バックエンド追加 - トラフィック分散の動作確認(テストバックエンドが必要) 7. **NightLightメトリクス収集** - Prometheusエンドポイントの動作確認 - メトリクスクエリの動作確認 - 全ターゲットがup状態か 8. **CreditServiceクオータ管理** - ウォレット作成 → 残高確認 → クオータチェック - Admission Controlの動作確認 9. **PlasmaVMC + PrismNET統合** - VM作成 → ネットワークアタッチ → VM起動 - テナントスコープの動作確認 10. **k8shost統合** - Pod作成 → CNI動作確認 → サービス作成 - FiberLBとの連携確認 ### フェーズ4: エンドツーエンドシナリオ検証 **目標**: 実際のユースケースが動作するか検証 **シナリオ1: テナントオンボーディング** 1. IAMで組織・プロジェクト・ユーザー作成 2. PrismNETでVPC・サブネット作成 3. PlasmaVMCでVM作成・起動 4. FlashDNSでDNSレコード作成 5. FiberLBでロードバランサー作成 6. 全リソースが正常に動作するか確認 **シナリオ2: マルチテナント分離** 1. テナントAとテナントBを作成 2. 各テナントでリソース作成 3. テナントAがテナントBのリソースにアクセスできないことを確認 4. IAMの認可が正しく機能するか確認 **シナリオ3: データ永続化** 1. FlareDBにデータ書き込み 2. ChainFireにメタデータ書き込み 3. ノード再起動 4. データが永続化されているか確認 ### フェーズ5: 耐障害性検証(T040の拡張) **目標**: ノード障害時の動作を検証 **検証項目**: 1. **単一ノード障害** - node03を停止 - ChainFire/FlareDBクラスターがクォーラムを維持するか(2/3) - データの読み書きが継続できるか - node03再起動後の自動復帰 2. **リーダー障害** - ChainFireリーダーを停止 - 新しいリーダーが選出されるか - サービスが継続できるか 3. **ネットワーク分断** - ノード間の通信を一時的に遮断 - クラスターが適切に動作するか - 通信回復後の自動復帰 ## 実行手順 ### 前提条件の確認 ```bash # 1. VM起動確認 ps aux | grep qemu | grep -E "node01|node02|node03" # 2. VDEネットワーク確認 ps aux | grep vde_switch # 3. SSH接続確認 for node in 192.168.100.11 192.168.100.12 192.168.100.13; do ssh root@$node 'hostname && nixos-version' || echo "Cannot connect to $node" done ``` ### フェーズ1: T039タスクの実行 フェーズ1の詳細な手順は上記の「フェーズ1: T039タスクの実行(S3-S6)」セクションを参照。 ### フェーズ2実行 ```bash # サービスヘルスチェック # T039.S6統合テスト計画の手順を使用(正しいポート番号) cd /home/centra/cloud # 各サービスのgRPCリフレクション確認 NODES=(192.168.100.11 192.168.100.12 192.168.100.13) declare -A SERVICES=( ["chainfire"]=2379 ["flaredb"]=2479 ["iam"]=3000 ["plasmavmc"]=4000 ["lightningstor"]=8000 ["flashdns"]=6000 ["fiberlb"]=7000 ["prismnet"]=5000 ["k8shost"]=6443 ["nightlight"]=9101 ["creditservice"]=3010 ) for node in "${NODES[@]}"; do echo "=== Node: $node ===" for svc in "${!SERVICES[@]}"; do echo -n " $svc:${SERVICES[$svc]} ... " if grpcurl -plaintext $node:${SERVICES[$svc]} list >/dev/null 2>&1; then echo "OK" else echo "FAIL" fi done echo "" done # 詳細なテスト手順は以下を参照: # docs/por/T039-production-deployment/S6-integration-test-plan.md ``` ### フェーズ3実行 各シナリオを順次実行。詳細な手順とコマンドは以下を参照: - **統合テスト計画**: `docs/por/T039-production-deployment/S6-integration-test-plan.md` - 8つのテストカテゴリ(IAM認証、FlareDBストレージ、S3操作、DNS、PrismNET、FiberLB、NightLight、CreditService) - 各テストの実行コマンドと期待結果が記載されている ### フェーズ4実行 エンドツーエンドシナリオを実行。必要に応じてテストスクリプトを作成。 ### フェーズ5実行 T040のrunbookを参照し、耐障害性テストを実行。 ## 成功基準 ### 必須項目(P0) - [ ] 全12サービスが全3ノードで起動・応答 - [ ] ChainFireクラスター: 3メンバー、リーダー選出、健全 - [ ] FlareDBクラスター: 3メンバー、クォーラム形成、レプリケーション動作 - [ ] IAM認証フローが動作 - [ ] 基本CRUD操作が全ノードで動作 - [ ] データレプリケーションが動作 ### 推奨項目(P1) - [ ] 全コンポーネント間統合が動作 - [ ] エンドツーエンドシナリオが動作 - [ ] 単一ノード障害時のクォーラム維持 - [ ] メトリクス収集が動作 ### 理想項目(P2) - [ ] マルチテナント分離が正しく動作 - [ ] ロードバランシングが動作 - [ ] ネットワーク分断時の動作 ## 問題発生時の対応 1. **サービス起動失敗** - `journalctl -u --no-pager` でログ確認 - 設定ファイルの確認 - 依存サービスの確認 2. **クラスター形成失敗** - ネットワーク接続確認 - TLS証明書の確認 - クラスター設定ファイルの確認 3. **統合テスト失敗** - 各コンポーネントの個別動作確認 - コンポーネント間の通信確認 - ログの詳細確認 4. **データ不整合** - Raftログの確認 - レプリケーション状態の確認 - 必要に応じてクラスター再形成 ## ドキュメント化 検証結果は以下に記録: 1. **検証レポート**: `docs/por/VM_CLUSTER_VALIDATION_RESULTS.md` - 各フェーズの実行結果 - 成功/失敗の詳細 - 発見された問題と対応 2. **問題追跡**: 必要に応じて新しいPORタスクを作成 3. **改善提案**: 検証で発見された改善点を記録 ## タイムライン見積もり - **フェーズ1**: 2-4時間(T039継続) - **フェーズ2**: 1-2時間 - **フェーズ3**: 4-6時間 - **フェーズ4**: 2-3時間 - **フェーズ5**: 2-3時間 **合計**: 11-18時間 ## 実行順序 ### 即座に実行すべきこと 1. **T039.S3の完了確認**(最優先) - 各ノードでNixOSプロビジョニングが完了しているか確認 - サービスが起動しているか確認 - 未完了の場合はnixos-anywhereでプロビジョニングを完了 2. **T039.S4: サービスデプロイメント確認** - 全12サービスが全3ノードで起動していることを確認 - 起動していないサービスがあればログを確認して修正 3. **T039.S5: クラスター形成確認** - ChainFireとFlareDBのRaftクラスターが3ノードで形成されていることを確認 - クラスターが形成されていない場合は設定とログを確認 4. **T039.S6: 統合テスト実行** - `docs/por/T039-production-deployment/S6-integration-test-plan.md`に基づいてテストを実行 - 結果を記録 ### その後実行すること 5. **フェーズ2-5の順次実行** - 各フェーズの結果を `docs/por/VM_CLUSTER_VALIDATION_RESULTS.md` に記録 - 問題があれば対応タスクを作成 6. **検証完了後のアクション** - 検証結果をレビュー - 本番デプロイメントの準備 ## 注意事項 - **ポート番号**: IAMは3000を使用(`validate-cluster.sh`の8080は古い設定) - **既存スクリプト**: `validate-cluster.sh`はT036用で、一部設定が古い可能性がある - **統合テスト計画**: T039.S6の計画(`S6-integration-test-plan.md`)を優先的に使用 - **T039の進行状況**: POR.mdの「Active Work」セクションで最新ステータスを確認