- chainfire: Fix binary name (chainfire-server → chainfire) - fiberlb: Use --grpc-addr instead of --port - flaredb: Use --addr instead of --api-addr/--raft-addr - flashdns: Add --grpc-addr and --dns-addr flags - iam: Use --addr instead of --port/--data-dir - k8shost: Add --iam-server-addr for dynamic IAM port connection - lightningstor: Add --in-memory-metadata for ChainFire fallback - plasmavmc: Add ChainFire service dependency and endpoint env var - prismnet: Use --grpc-addr instead of --port These fixes are required for T039 production deployment. The plasmavmc change specifically fixes the ChainFire port mismatch (was hardcoded 50051, now uses chainfire.port = 2379). 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
16 KiB
PhotonCloud VMクラスター検証計画
背景と目的
PhotonCloudシステム全体(12の主要コンポーネント)について、VM上でクラスターを構築し、以下を検証する:
- クラスターの正常動作: 3ノードクラスターが正常に形成され、Raftクラスターが機能するか
- 各コンポーネントの動作: 全12コンポーネントが正常に起動し、APIが応答するか
- 統合動作: コンポーネント間の連携が正常に機能するか
- エンドツーエンドテスト: 実際のユースケースが動作するか
現状の把握
実装済みコンポーネント(12個)
- ChainFire - クラスターKVS(ポート: 2379/2380/2381)
- FlareDB - DBaaS KVS(ポート: 2479/2480)
- IAM - 認証・認可(ポート: 3000)
- PlasmaVMC - VM基盤(ポート: 4000)
- PrismNET - オーバーレイネットワーク(ポート: 5000)
- FlashDNS - DNS(ポート: 6000)
- FiberLB - ロードバランサー(ポート: 7000)
- LightningStor - オブジェクトストレージ(ポート: 8000)
- k8shost - K8sホスティング(ポート: 6443)
- NightLight - メトリクス/オブザーバビリティ(ポート: 9101)
- CreditService - クレジット/クオータ管理(ポート: 3010)
- 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ユニット生成中(進行中)
実行手順:
-
S3完了確認
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 -
NixOSプロビジョニングが未完了の場合
- T036の設定ファイルを使用してnixos-anywhereでプロビジョニング
- 設定ファイル:
docs/por/T036-vm-cluster-deployment/node01/,node02/,node03/ - コマンド例:
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ノードで起動していることを確認
実行手順:
-
サービス起動確認
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 -
サービスが起動していない場合
- ログ確認:
ssh root@$node 'journalctl -u <service-name> --no-pager -n 50' - サービス有効化:
ssh root@$node 'systemctl enable --now <service-name>' - 設定ファイル確認: NixOSモジュールの設定を確認
- ログ確認:
T039.S5: クラスター形成
目標: ChainFireとFlareDBのRaftクラスターが3ノードで形成される
実行手順:
-
ChainFireクラスター確認
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 -
FlareDBクラスター確認
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 -
クラスターが形成されていない場合
- クラスター設定ファイル確認:
/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: 基本動作検証
目標: 各コンポーネントが基本的な機能を提供できるか検証
検証項目:
-
サービスヘルスチェック
- 全12サービスが全3ノードで応答するか
- gRPCリフレクションが動作するか
- ヘルスチェックエンドポイントが応答するか
-
クラスター状態確認
- ChainFire: 3メンバー、リーダー選出、全ノード健全
- FlareDB: 3メンバー、クォーラム形成、レプリケーション動作
-
基本CRUD操作
- ChainFire: KV操作(put/get/delete)
- FlareDB: KV操作とレプリケーション確認
- データが全ノードにレプリケートされるか
フェーズ3: コンポーネント間統合検証
目標: コンポーネント間の連携が正常に動作するか検証
検証シナリオ:
-
IAM認証フロー
- 組織作成 → ユーザー作成 → 認証 → トークン発行 → トークン検証
- 異なるノードからの認証要求が動作するか
-
FlareDBストレージ統合
- データ書き込み → 異なるノードからの読み取り(レプリケーション確認)
- トランザクション操作の動作確認
-
LightningStor S3操作
- バケット作成 → オブジェクトアップロード → 異なるノードからのダウンロード
- S3互換APIの動作確認
-
FlashDNS名前解決
- DNSレコード作成 → 異なるノードからの名前解決
- 複数ゾーンの動作確認
-
PrismNETオーバーレイネットワーク
- VPC作成 → サブネット作成 → ポート作成
- テナント分離の動作確認
-
FiberLBロードバランシング
- ロードバランサー作成 → プール作成 → バックエンド追加
- トラフィック分散の動作確認(テストバックエンドが必要)
-
NightLightメトリクス収集
- Prometheusエンドポイントの動作確認
- メトリクスクエリの動作確認
- 全ターゲットがup状態か
-
CreditServiceクオータ管理
- ウォレット作成 → 残高確認 → クオータチェック
- Admission Controlの動作確認
-
PlasmaVMC + PrismNET統合
- VM作成 → ネットワークアタッチ → VM起動
- テナントスコープの動作確認
-
k8shost統合
- Pod作成 → CNI動作確認 → サービス作成
- FiberLBとの連携確認
フェーズ4: エンドツーエンドシナリオ検証
目標: 実際のユースケースが動作するか検証
シナリオ1: テナントオンボーディング
- IAMで組織・プロジェクト・ユーザー作成
- PrismNETでVPC・サブネット作成
- PlasmaVMCでVM作成・起動
- FlashDNSでDNSレコード作成
- FiberLBでロードバランサー作成
- 全リソースが正常に動作するか確認
シナリオ2: マルチテナント分離
- テナントAとテナントBを作成
- 各テナントでリソース作成
- テナントAがテナントBのリソースにアクセスできないことを確認
- IAMの認可が正しく機能するか確認
シナリオ3: データ永続化
- FlareDBにデータ書き込み
- ChainFireにメタデータ書き込み
- ノード再起動
- データが永続化されているか確認
フェーズ5: 耐障害性検証(T040の拡張)
目標: ノード障害時の動作を検証
検証項目:
-
単一ノード障害
- node03を停止
- ChainFire/FlareDBクラスターがクォーラムを維持するか(2/3)
- データの読み書きが継続できるか
- node03再起動後の自動復帰
-
リーダー障害
- ChainFireリーダーを停止
- 新しいリーダーが選出されるか
- サービスが継続できるか
-
ネットワーク分断
- ノード間の通信を一時的に遮断
- クラスターが適切に動作するか
- 通信回復後の自動復帰
実行手順
前提条件の確認
# 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実行
# サービスヘルスチェック
# 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)
- マルチテナント分離が正しく動作
- ロードバランシングが動作
- ネットワーク分断時の動作
問題発生時の対応
-
サービス起動失敗
journalctl -u <service> --no-pagerでログ確認- 設定ファイルの確認
- 依存サービスの確認
-
クラスター形成失敗
- ネットワーク接続確認
- TLS証明書の確認
- クラスター設定ファイルの確認
-
統合テスト失敗
- 各コンポーネントの個別動作確認
- コンポーネント間の通信確認
- ログの詳細確認
-
データ不整合
- Raftログの確認
- レプリケーション状態の確認
- 必要に応じてクラスター再形成
ドキュメント化
検証結果は以下に記録:
-
検証レポート:
docs/por/VM_CLUSTER_VALIDATION_RESULTS.md- 各フェーズの実行結果
- 成功/失敗の詳細
- 発見された問題と対応
-
問題追跡: 必要に応じて新しいPORタスクを作成
-
改善提案: 検証で発見された改善点を記録
タイムライン見積もり
- フェーズ1: 2-4時間(T039継続)
- フェーズ2: 1-2時間
- フェーズ3: 4-6時間
- フェーズ4: 2-3時間
- フェーズ5: 2-3時間
合計: 11-18時間
実行順序
即座に実行すべきこと
-
T039.S3の完了確認(最優先)
- 各ノードでNixOSプロビジョニングが完了しているか確認
- サービスが起動しているか確認
- 未完了の場合はnixos-anywhereでプロビジョニングを完了
-
T039.S4: サービスデプロイメント確認
- 全12サービスが全3ノードで起動していることを確認
- 起動していないサービスがあればログを確認して修正
-
T039.S5: クラスター形成確認
- ChainFireとFlareDBのRaftクラスターが3ノードで形成されていることを確認
- クラスターが形成されていない場合は設定とログを確認
-
T039.S6: 統合テスト実行
docs/por/T039-production-deployment/S6-integration-test-plan.mdに基づいてテストを実行- 結果を記録
その後実行すること
-
フェーズ2-5の順次実行
- 各フェーズの結果を
docs/por/VM_CLUSTER_VALIDATION_RESULTS.mdに記録 - 問題があれば対応タスクを作成
- 各フェーズの結果を
-
検証完了後のアクション
- 検証結果をレビュー
- 本番デプロイメントの準備
注意事項
- ポート番号: IAMは3000を使用(
validate-cluster.shの8080は古い設定) - 既存スクリプト:
validate-cluster.shはT036用で、一部設定が古い可能性がある - 統合テスト計画: T039.S6の計画(
S6-integration-test-plan.md)を優先的に使用 - T039の進行状況: POR.mdの「Active Work」セクションで最新ステータスを確認