リファレンスアーキテクチャに関する注意: このセットアップではサードパーティ製コンポーネントを使用しています。バージョン、デフォルト値、コマンド構文は変更される可能性があります。SambaStack に固有でない問題については、該当コンポーネントを所有するベンダーまたはプロジェクトにお問い合わせください。
前提条件
作業を始める前に、以下の環境を準備してください。- kubectl – 対象の Kubernetes クラスターへのアクセスが設定済みであること
- Helm(最新バージョン) – OpenSearch チャートのデプロイに使用
- jq – 動作確認時の JSON 出力の解析に使用
- ストレージクラス – 永続ボリュームのプロビジョニングに使用できる有効なストレージクラスが Kubernetes 環境に存在すること
デプロイ順序: Grafana でログを可視化する場合は、Fluent Bit および Prometheus/Grafana よりも先に OpenSearch をデプロイしてください。
リソース要件
以下は、OpenSearch の最小リソース推奨値です。OpenSearch はメモリを大量に消費します。本番ワークロードでは、利用可能なメモリの 50% 以上(最大 32 GB)を JVM ヒープに割り当ててください。これらの値は、
opensearch-values.yaml ファイルの esJavaOpts パラメータで設定します(例: esJavaOpts: "-Xmx16g -Xms16g")。アーキテクチャ概要
SambaStack のモニタリングスタックにおいて、OpenSearch は中央のログリポジトリとして機能します。- Fluent Bit から HTTPS(ポート 9200)でログを受信します
- 時間ベースのインデックス(デフォルト:
logs-7d)にログを保存します - Grafana ダッシュボードや直接クエリ向けの検索 API を提供します
- 永続ストレージを持つ StatefulSet として動作します
デプロイ手順
ステップ 1: monitoring 名前空間の作成
まず、すべての監視コンポーネント用の専用名前空間を作成します。この名前空間は、OpenSearch、Fluent Bit、Prometheus、Grafana で共有されます。monitoring-namespace.yaml という名前のファイルを作成します。
ステップ 2: 管理者パスワード用 Secret の作成
OpenSearch は、インストール時に初期管理者パスワードを必要とします。パスワードは Kubernetes の Secret 経由で注入されます。 まず、base64 エンコードしたパスワードを生成します。opensearch-initial-admin-password-secret.yaml という名前のファイルを作成し、プレースホルダをエンコード済みのパスワードに置き換えます。
ステップ 3: Helm values の設定
デプロイをカスタマイズするために、opensearch-values.yaml という名前のファイルを作成します。<your-storage-class> は、クラスターのストレージクラス名に置き換えてください。
設定リファレンス
replicas- この値を1に設定するのは、開発およびテスト用途に適しています。本番の高可用性デプロイでは、レプリカ数を 3 以上に増やし、ストレージクラスがマルチ AZ プロビジョニングに対応していることを確認してください。singleNode- この値をtrueに設定するのは、replicasが1の場合(同じく開発・テスト用途)に限定してください。replicasが1より大きい本番の高可用性デプロイでは、falseに設定するか、この行自体を削除してください。- 注: 既存のデプロイでこの値を変更すると、イミュータブルなフィールドが変更されるため、StatefulSet の再作成が必要になります。
opensearchJavaOpts- OpenSearch JVM の最小・最大 Java ヒープサイズを制御します。"-Xms2g -Xmx2g"に設定すると、ヒープはちょうど 2 GiB に固定されます。目安として、ヒープはコンテナのメモリ上限の約 50% とし、約 31 GiB を超えないようにしてください。チャートのデフォルト値である 512 MiB は、OpenSearch にバンドルされたプラグイン(Security、Security Analytics、ML Commons、Query Insights)が読み込まれると小さすぎるため、通常の使用でも OOM エラーが発生します。resources- Pod の CPU およびメモリのリクエスト(保証される割り当て)とリミット(上限)を制御します。limits.memoryは、Lucene やダイレクトバッファが使用するオフヒープメモリの余地を残すため、opensearchJavaOptsのヒープサイズの約 2 倍に設定してください。requests.memoryは、limits.memoryと同じ値に設定してください。これにより Pod がGuaranteedQoS クラスに配置され、ノードのメモリ逼迫時の退避 (eviction) を防げます。requests.cpuは、インデックス操作時のベースライン性能を確保するために 1 コア以上に設定し、limits.cpuは、マージストーム、インデックス処理のスパイク、検索負荷の際にバーストできるよう、より高い値(例: 2 コア)に設定してください。
ステップ 4: OpenSearch のインストール
OpenSearch 公式の Helm リポジトリを追加し、チャートをインストールします。動作確認
インストールが完了したら、OpenSearch が正常に動作していることを確認します。Pod ステータスの確認
API 接続のテスト
OpenSearch API にローカルからアクセスするために、ポートフォワードを設定します。成功基準
以下の条件を満たしていれば、OpenSearch のインストールは完了です。opensearch-cluster-master-0Pod がRunning状態で、READY が1/1と表示される- OpenSearch API が curl に対して有効なクラスター情報を返す
monitoring名前空間にopensearch-initial-admin-passwordSecret が存在する
設定リファレンス
トラブルシューティング
Pod が Pending 状態のまま進まない
症状:opensearch-cluster-master-0 が Pending 状態のまま進まない。
原因: 通常、PersistentVolumeClaim (PVC) を満たせないことを示します。
対処方法:
Pod が CrashLoopBackOff になる
症状: Pod がクラッシュと再起動を繰り返す。 原因: メモリ不足またはパスワード Secret の欠落が原因であることが多いです。 対処方法:ポート 9200 で接続が拒否される
症状: ポートフォワードが有効な状態でも、curl が「Connection refused」を返す。
対処方法:
次のステップ
OpenSearch が稼働したら、次に進みます。- Fluent Bit のデプロイ – ログ転送をセットアップし、クラスターのログを OpenSearch に取り込みます。詳細は Fluent Bit によるログ転送 をご参照ください。
- Prometheus と Grafana のデプロイ – メトリクスの収集と可視化を追加します。Grafana のデプロイには、ログ探索用の OpenSearch データソースが含まれます。詳細は Prometheus と Grafana による監視 をご参照ください。

