.. | ||
templates | ||
Chart.yaml | ||
README.md | ||
service-monitor.yaml | ||
values.yaml |
Introduction
This chart bootstraps an EMQX deployment on a Kubernetes (K8s) cluster using the Helm package manager.
Prerequisites
- Kubernetes 1.6+
- Helm
Installing the Chart
To install the chart with the release name my-emqx
:
-
From github
$ git clone https://github.com/emqx/emqx.git $ cd emqx/deploy/charts/emqx $ helm install my-emqx .
-
From chart repos
helm repo add emqx https://repos.emqx.io/charts helm install my-emqx emqx/emqx
If you want to install an unstable version, you need to add
--devel
when you execute thehelm install
command.
Uninstalling the Chart
To uninstall/delete the my-emqx
deployment:
$ helm del my-emqx
Configuration
The following sections describe the configurable parameters of the chart and their default values.
K8s specific settings
The following table lists the configurable K8s parameters of the EMQX chart and their default values.
Parameter | Description | Default Value |
---|---|---|
replicaCount |
It is recommended to have odd number of nodes in a cluster, otherwise the emqx cluster cannot be automatically healed in case of net-split. | 3 |
image.tag |
EMQX Image tag (defaults to .Chart.AppVersion ) |
nil |
image.repository |
EMQX Image repository | emqx/emqx |
image.pullPolicy |
The image pull policy | IfNotPresent |
image.pullSecrets |
The image pull secrets (does not add image pull secrets to deployed pods) | [] |
recreatePods |
Forces the recreation of pods during upgrades, which can be useful to always apply the most recent configuration. | false |
podAnnotations |
Annotations for pod | {} |
podManagementPolicy |
To redeploy a chart with existing PVC(s), the value must be set to Parallel to avoid deadlock | Parallel |
persistence.enabled |
Enable EMQX persistence using PVC | false |
persistence.storageClass |
Storage class of backing PVC (uses alpha storage class annotation) | nil |
persistence.existingClaim |
EMQX data Persistent Volume existing claim name, evaluated as a template | "" |
persistence.accessMode |
PVC Access Mode for EMQX volume | ReadWriteOnce |
persistence.size |
PVC Storage Request for EMQX volume | 20Mi |
initContainers |
Containers that run before the creation of EMQX containers. They can contain utilities or setup scripts. | {} |
resources |
CPU/Memory resource requests/limits | {} |
nodeSelector |
Node labels for pod assignment | {} |
tolerations |
Toleration labels for pod assignment | [] |
affinity |
Map of node/pod affinities | {} |
service.type |
Kubernetes Service type. | ClusterIP |
service.mqtt |
Port for MQTT. | 1883 |
service.mqttssl |
Port for MQTT(SSL). | 8883 |
service.mgmt |
Port for mgmt API. | 8081 |
service.ws |
Port for WebSocket/HTTP. | 8083 |
service.wss |
Port for WSS/HTTPS. | 8084 |
service.dashboard |
Port for dashboard. | 18083 |
service.nodePorts.mqtt |
Kubernetes node port for MQTT. | nil |
service.nodePorts.mqttssl |
Kubernetes node port for MQTT(SSL). | nil |
service.nodePorts.mgmt |
Kubernetes node port for mgmt API. | nil |
service.nodePorts.ws |
Kubernetes node port for WebSocket/HTTP. | nil |
service.nodePorts.wss |
Kubernetes node port for WSS/HTTPS. | nil |
service.nodePorts.dashboard |
Kubernetes node port for dashboard. | nil |
service.loadBalancerIP |
loadBalancerIP for Service | nil |
service.loadBalancerSourceRanges |
Address(es) that are allowed when service is LoadBalancer | [] |
service.externalIPs |
ExternalIPs for the service | [] |
service.annotations |
Service annotations (evaluated as a template) | {} |
ingress.dashboard.enabled |
Enable ingress for EMQX Dashboard | false |
ingress.dashboard.ingressClassName |
Set the ingress class for EMQX Dashboard | |
ingress.dashboard.path |
Ingress path for EMQX Dashboard | / |
ingress.dashboard.pathType |
Ingress pathType for EMQX Dashboard | ImplementationSpecific |
ingress.dashboard.hosts |
Ingress hosts for EMQX Mgmt API | dashboard.emqx.local |
ingress.dashboard.tls |
Ingress tls for EMQX Mgmt API | [] |
ingress.dashboard.annotations |
Ingress annotations for EMQX Mgmt API | {} |
ingress.mgmt.enabled |
Enable ingress for EMQX Mgmt API | false |
ingress.mqtt.ingressClassName |
Set the ingress class for EMQX Mgmt API | nil |
ingress.mgmt.path |
Ingress path for EMQX Mgmt API | / |
ingress.mgmt.pathType |
Ingress pathType for EMQX Mgmt API | ImplementationSpecific |
ingress.mgmt.hosts |
Ingress hosts for EMQX Mgmt API | api.emqx.local |
ingress.mgmt.tls |
Ingress tls for EMQX Mgmt API | [] |
ingress.mgmt.annotations |
Ingress annotations for EMQX Mgmt API | {} |
ingress.wss.enabled |
Enable ingress for EMQX Mgmt API | false |
ingress.wss.ingressClassName |
Set the ingress class for EMQX Mgmt API | nil |
ingress.wss.path |
Ingress path for EMQX WSS | / |
ingress.wss.pathType |
Ingress pathType for EMQX WSS | ImplementationSpecific |
ingress.wss.hosts |
Ingress hosts for EMQX WSS | wss.emqx.local |
ingress.wss.tls |
Ingress tls for EMQX WSS | [] |
ingress.wss.annotations |
Ingress annotations for EMQX WSS | {} |
metrics.enable |
If set to true, prometheus-operator needs to be installed, and emqx_prometheus needs to enable | false |
metrics.type |
Now we only supported "prometheus" | "prometheus" |
extraEnv |
Aditional container env vars | [] |
extraEnvFrom |
Aditional container env from vars (eg. config map, secrets | [] |
extraArgs |
Additional container executable arguments | [] |
extraVolumes |
Additional container volumes (eg. for mounting certs from secrets) | [] |
extraVolumeMounts |
Additional container volume mounts (eg. for mounting certs from secrets) | [] |
EMQX specific settings
The following table lists the configurable EMQX-specific parameters of the chart and their default values.
Parameter | Description | Default Value |
---|---|---|
emqxConfig |
Map of configuration items expressed as environment variables (prefix can be omitted) or using the configuration files namespaced dotted notation | nil |
emqxLicenseSecretName |
Name of the secret that holds the license information | nil |
emqxAclConfig |
ACL configuration | {allow, {user, "dashboard"}, subscribe, ["$SYS/#"]}. {allow, {ipaddr, "127.0.0.1"}, pubsub, ["$SYS/#", "#"]}. {deny, all, subscribe, ["$SYS/#", {eq, "#"}]}. {allow, all}. |
emqxLoadedModules |
Modules to load on startup | {emqx_mod_acl_internal, true}. {emqx_mod_presence, true}. {emqx_mod_delayed, false}. {emqx_mod_rewrite, false}. {emqx_mod_subscription, false}. {emqx_mod_topic_metrics, false}. |
emqxLoadedPlugins |
Plugins to load on startup | {emqx_management, true}. {emqx_recon, true}. {emqx_retainer, true}. {emqx_dashboard, true}. {emqx_telemetry, true}. {emqx_rule_engine, true}. {emqx_bridge_mqtt, false}. |
Examples
This section provides some examples for the configuration of common scenarios.
Enable Websockets SSL via nginx-ingress community controller
The following settings describe a working scenario for acessing EMQX Websockets with SSL termination at the nginx-ingress community controller.
ingress:
wss:
enabled: true
# ingressClassName: nginx
annotations:
nginx.ingress.kubernetes.io/backend-protocol: "http"
nginx.ingress.kubernetes.io/use-forwarded-headers: "true"
nginx.ingress.kubernetes.io/enable-real-ip: "true"
nginx.ingress.kubernetes.io/proxy-request-buffering: "off"
nginx.ingress.kubernetes.io/proxy-connect-timeout: "120"
nginx.ingress.kubernetes.io/proxy-http-version: "1.1"
nginx.ingress.kubernetes.io/proxy-read-timeout: "3600"
nginx.ingress.kubernetes.io/proxy-send-timeout: "3600"
nginx.ingress.kubernetes.io/use-proxy-protocol: "false"
nginx.ingress.kubernetes.io/proxy-protocol-header-timeout: "5s"
path: /mqtt
pathType: ImplementationSpecific
hosts:
- myhost.example.com
tls:
- hosts:
- myhost.example.com
secretName: myhost-example-com-tls # Name of the secret that holds the certificates for the domain