# KubernetesでのEMQXデプロイ

EMQXは、Kubernetes上で以下の2つの完全サポートされた方法でデプロイできます。

- **EMQX Operator**
- **EMQX Helm Chart**

それぞれの方法は異なるユースケースや運用要件に適しています。本ガイドでは、各アプローチの利点とトレードオフを概説し、最適なデプロイ戦略の選択に役立てていただけます。

## 推奨方法：EMQX Operatorの利用

EMQX Operatorは、特に本番環境や高度なライフサイクル自動化が必要な場合に、Kubernetes上でEMQXクラスターをデプロイおよび管理するための推奨ソリューションです。

EMQXチームによって開発・保守されているOperatorは、Custom Resource Definitions（CRD）などの標準的な仕組みを活用し、KubernetesネイティブにEMQXクラスターのデプロイ、設定、管理を支援するために設計されています。Kubernetes APIを拡張することで、宣言的なクラスター管理を可能にし、スケーリング、アップグレード、障害復旧などの複雑な運用タスクを自動化します。

[EMQX Operatorのデプロイガイドを見る](./operator/operator.md)

### 主な利点

- **自動化された運用:** クラスターのスケーリング、アップグレード、障害復旧などの複雑なタスクを自動化し、手動作業やエラーの可能性を減らします。
- **高度なライフサイクル管理:** ブルーグリーンアップデートのような高度なデプロイ戦略をサポートし、ダウンタイムゼロのアップグレードや接続のスムーズな移行を実現します。
- **簡素化された設定:** 高レベルのCRDを通じてEMQXを管理し、Helmの詳細なvalues設定よりも宣言的で管理しやすい構成を提供します。
- **運用ノウハウのカプセル化:** EMQXのようなステートフルアプリケーション運用のベストプラクティスをOperatorに組み込み、適切な運用を保証します。

### 注意点

- **Operatorのデプロイが必要:** Kubernetesクラスター内に追加のコントローラー（EMQX Operator）をインストールし、管理する必要があります。
- **学習コストがやや高い:** Kubernetes OperatorやEMQX固有のカスタムリソースに習熟する必要があります。

## 代替方法：Helm Chartの利用

EMQX Helm Chartは、Kubernetesエコシステムで最も広く使われているパッケージマネージャーであるHelmを用いた、柔軟かつシンプルなEMQXデプロイ方法です。この方法は、迅速な評価、開発やテスト環境、Kubernetesリソースを直接制御したいチームに適しています。

EMQXチームがメンテナンスするHelm Chartは、必要なKubernetesオブジェクトをパッケージ化し、再利用可能かつ設定可能なチャートとして提供します。`values.yaml`ファイルでデプロイパラメータを定義することで、生のYAMLマニフェストを書かずに繰り返し可能でカスタマイズ可能なEMQXインストールが可能です。対応するゲートウェイAPIコントローラーを使用すれば、`HTTPRoute`や`TLSRoute`リソースを通じてEMQXダッシュボード、WebSocket経由のMQTT、MQTTS、WSSも公開できます。

[Helm Chartのデプロイガイドを見る](./chart.md)

### 主な利点

- **シンプルで馴染みやすい:** HelmはKubernetesエコシステムで広く採用されており、多くのユーザーにとって馴染みのあるツールです。
- **直接的な制御:** `values.yaml`を通じてStatefulSet、Service、ConfigMapなど生成されるKubernetesリソースを細かく制御できます。
- **追加の依存なし:** クラスター内で別のOperatorコントローラーを稼働させる必要がありません。

### 注意点

- **手動管理が多い:** アップグレード、スケーリング、複雑な設定変更などのライフサイクル操作は手動で行う必要があり、自動化は限定的です。
- **自動化機能の制限:** ブルーグリーンデプロイのような高度な自動化機能はなく、スケーリングやアップグレード、メンテナンスなどのDay-2操作はユーザーが手動で実施する必要があります。
- **設定の複雑化:** 本番環境向けのセットアップでは、`values.yaml`ファイルが大きく複雑になり管理が難しくなる可能性があります。

## 適切なデプロイ方法の選択

EMQX OperatorとHelm Chartのどちらを選択するかは、デプロイの目的、環境の成熟度、運用方針によって異なります。以下の指針を参考に、最適な方法を判断してください。

- ほとんどの本番および本格的なプレプロダクション用途では、EMQX Operatorの利用を強く推奨します。長期的なクラスター管理が簡素化され、運用負荷が軽減されます。
- 迅速な評価、開発、テスト、またはKubernetesリソースを直接制御したい場合は、Helm Chartが軽量で柔軟なデプロイオプションとなります。
