photoncloud-monorepo/docs/por/VM_CLUSTER_VALIDATION_PLAN.md
centra 54e3a16091 fix(nix): Align service ExecStart with actual binary CLI interfaces
- 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>
2025-12-18 22:58:40 +09:00

16 KiB
Raw Blame History

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完了確認

    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/
    • コマンド例:
      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. サービス起動確認

    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 <service-name> --no-pager -n 50'
    • サービス有効化: ssh root@$node 'systemctl enable --now <service-name>'
    • 設定ファイル確認: NixOSモジュールの設定を確認

T039.S5: クラスター形成

目標: ChainFireとFlareDBのRaftクラスターが3ードで形成される

実行手順:

  1. 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
    
  2. 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
    
  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. ネットワーク分断

    • ノード間の通信を一時的に遮断
    • クラスターが適切に動作するか
    • 通信回復後の自動復帰

実行手順

前提条件の確認

# 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

  • マルチテナント分離が正しく動作
  • ロードバランシングが動作
  • ネットワーク分断時の動作

問題発生時の対応

  1. サービス起動失敗

    • journalctl -u <service> --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に基づいてテストを実行
    • 結果を記録

その後実行すること

  1. フェーズ2-5の順次実行

    • 各フェーズの結果を docs/por/VM_CLUSTER_VALIDATION_RESULTS.md に記録
    • 問題があれば対応タスクを作成
  2. 検証完了後のアクション

    • 検証結果をレビュー
    • 本番デプロイメントの準備

注意事項

  • ポート番号: IAMは3000を使用validate-cluster.shの8080は古い設定
  • 既存スクリプト: validate-cluster.shはT036用で、一部設定が古い可能性がある
  • 統合テスト計画: T039.S6の計画S6-integration-test-plan.md)を優先的に使用
  • T039の進行状況: POR.mdの「Active Work」セクションで最新ステータスを確認