先日OpenSearchの勉強のため、公式のGettingStartedに従ってdocker-composeを使用して起動しようとしたところ、表題のようなエラーが出力され起動しませんでした。一通り試した結果、起動に成功したので記録を残しておきます。
最初に記載しておきますが、大抵の場合はこの記事のような状況にならないと思います。
環境
- M2 macbook air(sonoma 14.4.1)
- Docker Desktop 4.19.0
発生したエラー
OpenSearchを以下のドキュメントに乗っ取って起動しようとしたところ、APIがEmpty Responseを返し、またWebUIはOpenSearch Dashboards server is not ready yet
というエラーを表示した。
コンテナのログを読むと、nodeコンテナが以下のようなエラーを出力していた。
Not yet initialized (you may need to run securityadmin)
Failure no such index [.opendistro_security] retrieving configuration for [ACTIONGROUPS, ALLOWLIST, AUDIT, CONFIG, INTERNALUSERS, NODESDN, ROLES, ROLESMAPPING, TENANTS, WHITELIST] (index=.opendistro_security)
FORBIDDEN/10/cluster create-index blocked
これらのエラーについて検索するも、自分の状況によくハマる情報が得られなかった。色々issueやコミュニティの投稿がヒットするも、議論が中断していたり自己解決したりしているケースばかりなので、よくあるトラブルで解決策が確立されている類の問題ではないと判断して、自分のローカル環境の問題を疑い始める。
起動に使用したdocker-compose.yamlファイルは公式が提供しているものそのままで、特に設定の変更などはしていない。しかし、公式の手順にあるswap offやカーネルパラメータの変更は、mac上で実施した場合何が起きるかわからないので避けた(メインマシンで他の用途にも使用するので、動作がおかしくなった時の影響が大きかった)。
原因
コンテナ起動直後の最初の方のログを改めてよく読んだところ、空きディスクが少ないというエラーが一行だけ出ていた。これをもとに、docker desktopのリソース使用状況を見ると、割り当てディスク64GBに対し空き容量が2.2GBだけだった。
不要なイメージなどの削除を行い、空き容量を12.44GBまで回復させ、またメモリ割当量も8GB->16GBに変更したところ、OpenSearchの起動に成功した。その際のメモリ使用量は14.14GBだったので、ディスク容量の不足に加え、メモリ不足も影響していた可能性がある。
結論
OpenSearchはディスク容量およびメモリを大きく消費するので、起動時には十分な割り当てを確保しておく必要がある。しかし公式にはどのくらいの容量をメモリとディスクを確保しておけばいいか記載がないので、割り当てリソース量が少ない環境でエラーが発生した場合は、リソースの使用量にも留意する必要がある。