Skip to content

Helmチャートを使ったKubernetes上へのEMQXデプロイ

本ページでは、公式Helmチャートを使用してKubernetesクラスター上にEMQXをデプロイする手順を段階的に説明します。

公式のEMQX Helmチャートは、StatefulSet、Service、ConfigMap、Ingressルールなど、EMQXに必要なすべてのコンポーネントを単一の設定可能なHelmチャートにまとめることで、Kubernetesベースのデプロイを簡素化します。

前提条件

開始する前に、以下がインストールおよび設定されていることを確認してください:

  • 稼働中のKubernetesクラスター(バージョン1.6以上)
  • Helm

EMQX Helmチャートのインストール

EMQX Helmチャートは、EMQXのGitHubリポジトリまたは公式Helmチャートリポジトリのいずれかからインストールできます。

GitHubからのインストール

リリース名をmy-emqxとしてGitHubからチャートをインストールするには、以下を実行します:

bash
$ git clone https://github.com/emqx/emqx.git
$ cd emqx/deploy/charts/emqx-enterprise
$ helm install my-emqx .

Helmリポジトリからのインストール

リリース名をmy-emqxとして公式Helmチャートリポジトリからチャートをインストールするには、以下を実行します:

bash
helm repo add emqx https://repos.emqx.io/charts
helm install my-emqx emqx/emqx-enterprise

不安定なバージョンをインストールしたい場合は、--develフラグを追加してください:

bash
helm install my-emqx emqx/emqx-enterprise --devel

チャートのアンインストール

my-emqxという名前のEMQXリリースを削除し、関連するすべてのKubernetesリソースを削除するには:

Helm v3以降の場合

bash
$ helm uninstall my-emqx

Helm v2(レガシー)の場合

bash
$ helm del my-emqx

設定パラメータ

EMQX Helmチャートは、values.yamlファイルを通じて幅広い設定パラメータを提供しています。以下の表は主要なパラメータとデフォルト値を示しています。

パラメータ説明デフォルト値
replicaCountネットワーク分断時の自動回復のため、ノード数は奇数を推奨します。3
image.repositoryEMQXイメージ名emqx/emqx-enterprise
image.pullPolicyイメージのプルポリシーIfNotPresent
image.pullSecrets イメージプルシークレット[](デプロイされたポッドにイメージプルシークレットは追加されません)
serviceAccount.createtrueの場合、新しいサービスアカウントを作成します。true
serviceAccount.name使用するサービスアカウント。未設定かつserviceAccount.createtrueの場合、フルネームテンプレートで名前が生成されます。
serviceAccount.annotationsサービスアカウントに追加するアノテーション
envFromSecret同じKubernetesネームスペース内のシークレット名で、環境変数に追加される値を含みます。nil
recreatePodsアップグレード時にポッドの再作成を強制し、最新設定を常に適用するのに役立ちます。false
podAnnotations ポッドのアノテーション{}
podManagementPolicy既存のPVCを持つチャートを再デプロイする場合、デッドロック回避のためにParallelに設定する必要があります。Parallel
persistence.enabledPVCを使用したEMQXのパーシステンスを有効にします。false
persistence.storageClassバックエンドPVCのストレージクラスnil(alphaストレージクラスアノテーションを使用)
persistence.existingClaimEMQXデータ用の既存Persistent Volumeクレーム名(テンプレートとして評価されます)""
persistence.accessModeEMQXボリューム用PVCのアクセスモードReadWriteOnce
persistence.sizeEMQXボリューム用PVCのストレージ要求サイズ20Mi
initContainersEMQXコンテナ作成前に実行されるコンテナ。ユーティリティやセットアップスクリプトを含めることができます。{}
resourcesCPU/メモリのリソース要求/制限{}
extraVolumeMountsデフォルトのバックエンドコンテナへの追加のvolumeMounts[]
extraVolumesデフォルトのバックエンドポッドへの追加ボリューム[]
nodeSelectorポッド割り当て用のノードラベル{}
tolerationsポッド割り当て用のトレランスラベル[]
affinityノード/ポッドのアフィニティマップ{}
service.typeKubernetes ServiceのタイプClusterIP
service.mqttMQTT用ポート1883
service.mqttsslMQTT(SSL)用ポート8883
service.wsWebSocket/HTTP用ポート8083
service.wssWSS/HTTPS用ポート8084
service.dashboardダッシュボードおよびAPI用ポート18083
service.customPortsServiceで公開するカスタムポート{}
service.nodePorts.mqttMQTT用Kubernetesノードポートnil
service.nodePorts.mqttsslMQTT(SSL)用Kubernetesノードポートnil
service.nodePorts.wsWebSocket/HTTP用Kubernetesノードポートnil
service.nodePorts.wssWSS/HTTPS用Kubernetesノードポートnil
service.nodePorts.dashboardダッシュボード用Kubernetesノードポートnil
service.customNodePortsカスタムポート用Kubernetesノードポート{}
service.loadBalancerClassこのServiceが属するロードバランサーの実装クラス
service.loadBalancerIPService用のloadBalancerIPnil
service.loadBalancerSourceRangesLoadBalancerサービスで許可されるアドレス[]
service.externalIPsService用のExternalIPs[]
service.externalTrafficPolicyServiceの外部トラフィックポリシーCluster
service.annotationsService/ServiceMonitorのアノテーション{}(テンプレートとして評価されます)
service.labelsService/ServiceMonitorのラベル{}(テンプレートとして評価されます)
ingress.dashboard.enabledEMQXダッシュボード用Ingressを有効化false
ingress.dashboard.ingressClassNameEMQXダッシュボード用Ingressクラスを設定
ingress.dashboard.pathEMQXダッシュボード用Ingressパス/
ingress.dashboard.pathTypeEMQXダッシュボード用IngressのpathTypeImplementationSpecific
ingress.dashboard.hostsEMQXダッシュボード用Ingressホストdashboard.emqx.local
ingress.dashboard.tlsEMQXダッシュボード用IngressのTLS設定[]
ingress.dashboard.annotationsEMQXダッシュボード用Ingressアノテーション{}
ingress.dashboard.ingressClassNameEMQXダッシュボード用Ingressクラスを設定
ingress.mqtt.enabledMQTT用Ingressを有効化false
ingress.mqtt.ingressClassNameMQTT用Ingressクラスを設定
ingress.mqtt.pathMQTT用Ingressパス/
ingress.mqtt.pathTypeMQTT用IngressのpathTypeImplementationSpecific
ingress.mqtt.hostsMQTT用Ingressホストmqtt.emqx.local
ingress.mqtt.tlsMQTT用IngressのTLS設定[]
ingress.mqtt.annotationsMQTT用Ingressアノテーション{}
ingress.mqtt.ingressClassNameMQTT用Ingressクラスを設定
metrics.enabletrueの場合、prometheus-operatorのインストールとemqx_prometheusの有効化が必要です。false
metrics.type現在サポートしているのは「prometheus」のみです。"prometheus"
ssl.enabledSSLサポートを有効化false
ssl.useExisting既存の証明書を使用するか、cert-managerに生成させるか。false
ssl.existingName既存証明書の名前emqx-tls
ssl.dnsnames生成する証明書のDNS名{}
ssl.commonName生成する証明書の共通名
ssl.issuer.name証明書生成用のIssuer名letsencrypt-dns
ssl.issuer.kind証明書生成用のIssuer種別ClusterIssuer

EMQX固有のパラメータ

以下の表は、チャートの設定可能なEMQX固有パラメータとそのデフォルト値を示します。

パラメータ説明デフォルト値
emqxConfig環境変数EMQX_プレフィックスは任意)またはEMQX設定ファイルで使用される名前空間付きドット表記を使って定義された設定項目のマップ。nil
emqxLicenseSecretNameライセンス情報を保持するシークレットの名前(非推奨)nil
emqxLicenseSecretRef.nameライセンス情報を保持するシークレットの名前""
emqxLicenseSecretRef.keyライセンス情報を保持するシークレットのキー""

SSL設定

cert-managerを使用する場合、TLS証明書はKubernetesシークレットに標準キーのtls.crtおよびtls.keyで保存されます。EMQX Helmチャートはこれらの証明書ファイルを自動的にコンテナ内の以下のディレクトリにマウントします:

/tmp/ssl/

EMQXでSSLサポートを有効にするには、EMQX設定内でファイルパスを明示的に設定する必要があります。これはEMQX設定ファイルを修正するか、以下の環境変数を渡すことで行えます:

yaml
EMQX_LISTENERS__SSL__DEFAULT__SSL_OPTIONS__CERTFILE: /tmp/ssl/tls.crt
EMQX_LISTENERS__SSL__DEFAULT__SSL_OPTIONS__KEYFILE: /tmp/ssl/tls.key

TIP

既存のTLS証明書(cert-managerで生成されたものではない)を使用する場合は、ファイルパスがデプロイ時に実際にマウントされているファイルの場所と一致していることを確認してください。

Proxy Protocolサポート(HAProxy、Nginx)

Proxy Protocolをサポートするリバースプロキシ(例:HAProxyやNginx)の背後にEMQXをデプロイする場合、以下の環境変数を設定して有効化してください:

yaml
EMQX_LISTENERS__TCP__DEFAULT__PROXY_PROTOCOL: "true"

HAProxy Ingress Controllerを使用する場合は、以下のアノテーションを追加してください:

yaml
haproxy-ingress.github.io/proxy-protocol: "v2"

これにより、プロキシを経由して転送される元のクライアントIPアドレスが保持されます。