k8s に Elasticsearch クラスターをデプロイする方法
Kubernetes(K8s)上のESクラスタ展開方法には複数の種類があり、一般的な2つの方法を紹介します。
- ステートフルセットを使用する
- ESインスタンスの定義を含むStatefulSetオブジェクトを作成します。公式提供のHelmチャートを使用してこのプロセスを簡略化することもできます。
- StatefulSet オブジェクトのストレージボリュームを配置して、データの永続化を確保する。Kubernetes の PersistentVolumeClaim (PVC) と PersistentVolume (PV) を使用して実現可能。
- 無ステートフルセットオブジェクトのサービスディスカバリとネットワーキングを設定し、ESインスタンスが互いに通信できるようにします。これは、KubernetesのヘッドレスサービスとDNS機能を使用して実現できます。
- クラスタ名、ノード名、メモリの設定などの、ESインスタンスのパラメータは構成ファイルや環境変数を使用して設定できます。これらの設定を管理するには、ConfigMapとSecretオブジェクトを使用できます。
- StatefulSet オブジェクトのテンプレートを利用して ES インスタンスの Pod を作成し、自動的にスケールアウト、リカバリ、ローリングアップグレードなどの操作を行う
- オペレータ様にお任せします
- Elastic Cloud on Kubernetes(ECK)を含む ES オペレーターのインストールと設定
- CRD(カスタムリソース定義)を使用してESクラスターオブジェクトを定義および管理する
- ESインスタンスの設定や規模などの情報を含むESクラスタオブジェクトを作成する
- Operator はクラスターオブジェクトの定義に基づいて、StatefulSet、PVC、Service などの対応する Kubernetes リソースを自動的に作成および管理します。
- クラスタオブジェクトの変更によって、Operatorが自動的に拡大・縮小・アップグレードなどの操作を実行できます。
いずれの手段を用いる場合でも、クラスタの安定性・信頼性を担保する必要があります。たとえば、リソース制限や、監視・ログ収集などの対策を設定することで、クラスタの稼働状況やパフォーマンスを確実にすることができます。また、K8sのRBAC(Role-Based Access Control)を使用して、ESクラスタおよび関連リソースへのアクセス権を制限することもできます。