****# EMQX Operator
A Kubernetes Operator for EMQX
Overview
The EMQX Operator provides Kubernetes native deployment and management of EMQX, including EMQX Broker and EMQX Enterprise. The purpose of this project is to simplify and automate the configuration of the EMQX cluster.
The EMQX Operator includes, but is not limited to, the following features:
-
Simplified Deployment EMQX: Declare EMQX clusters with EMQX custom resources and deploy them quickly. For more details, please check Quick Start.
-
Manage EMQX Cluster: Automate operations and maintenance for EMQX, including cluster upgrades, runtime data persistence, updating Kubernetes resources based on the status of EMQX, etc. For more details, please check Manage EMQX.
EMQX and EMQX Operator compatibility
EMQX Enterprise
EMQX Enterprise Version | EMQX Operator Version | APIVersion | Kind |
---|---|---|---|
4.3.x (included) ~ 4.4 | 1.2.1, 1.2.2, 1.2.3 | apps.emqx.io/v1beta3 | EmqxEnterprise |
4.4.6 (included) ~ 4.4.8 | 1.2.5 | apps.emqx.io/v1beta3 | EmqxEnterprise |
4.4.8 (included) ~ 4.4.14 | 1.2.6, 1.2.7, 1.2.8, 2.0.0, 2.0.1, 2.0.2, 2.0.3 | apps.emqx.io/v1beta3 | EmqxEnterprise |
4.4.14 (included) or higher 4.4.x | 2.1.0, 2.1.1 | apps.emqx.io/v1beta4 | EmqxEnterprise |
5.0.0 (included) ~ 5.0.23 | 2.0.0, 2.0.1, 2.0.2, 2.0.3, 2.1.0, 2.1.1 | apps.emqx.io/v2alpha1 | EMQX |
5.1.1 or higher | 2.2.0 | apps.emqx.io/v2alpha2 | EMQX |
EMQX Open Source
EMQX Open Source Version | EMQX Operator Version | APIVersion | Kind |
---|---|---|---|
4.3.x (included) ~ 4.4 | 1.2.1, 1.2.2, 1.2.3 | apps.emqx.io/v1beta3 | EmqxBroker |
4.4.6 (included) ~ 4.4.8 | 1.2.5 | apps.emqx.io/v1beta3 | EmqxBroker |
4.4.8 (included) ~ 4.4.14 | 1.2.6, 1.2.7, 1.2.8, 2.0.0, 2.0.1, 2.0.2, 2.0.3 | apps.emqx.io/v1beta3 | EmqxBroker |
4.4.14 or higher 4.4.x | 2.1.0, 2.1.1 | apps.emqx.io/v1beta4 | EmqxBroker |
5.0.6 (included) ~ 5.0.8 | 2.0.0, 2.0.1, 2.0.3 | apps.emqx.io/v2alpha1 | EMQX |
5.0.8 (included) ~ 5.0.14 | 2.0.2 | apps.emqx.io/v2alpha1 | EMQX |
5.0.14 (included) ~ 5.0.23 | 2.1.0, 2.1.1 | apps.emqx.io/v2alpha1 | EMQX |
5.1.1 or higher | 2.2.0 | apps.emqx.io/v2alpha2 | EMQX |
How to selector Kubernetes version
The EMQX Operator requires a Kubernetes cluster of version >=1.24
.
Kubernetes Versions | EMQX Operator Compatibility | Notes |
---|---|---|
1.24 or higher | All functions supported | |
1.22 (included) ~ 1.23 | Supported, except MixedProtocolLBService | EMQX cluster can only use one protocol in LoadBalancer type of Service, for example TCP or UDP. |
1.21 (included) ~ 1.22 | Supported, except pod-deletion-cost | When using EMQX Core + Replicant mode cluster, updating the EMQX cluster cannot accurately delete Pods. |
1.20 (included) ~ 1.21 | Supported, manual .spec.ports[].nodePort assignment required if using NodePort type of Service |
For more details, please refer to Kubernetes changelog. |
1.16 (included) ~ 1.20 | Supported, not recommended due to lack of testing | |
Lower than 1.16 | Not supported | apiextensions/v1 APIVersion is not supported. |
CustomResourceDefinitions
A core feature of the EMQX Operator is to monitor the Kubernetes API server for changes to specific objects and ensure that the running EMQX deployments match these objects. The Operator acts on the following custom resource definitions (CRDs).
For more details on EMQX, please check the reference document.
The EMQX Operator automatically detects changes on any of the above custom resource objects and ensures that running deployments are kept in sync with the changes.
Getting Start
For more information on getting started, see the getting started.
Public Cloud Platform Deployment Guide
Public Cloud Platform | Deployment Guide |
---|---|
AWS | Deploy EMQX On Amazon Elastic Kubernetes Service |
Azure | Deploy EMQX on Azure Kubernetes Service |
Google Cloud | Deploy EMQX on Google Cloud GKE |
Alibaba Cloud | Deploy EMQX on Alibaba Cloud ACK |
Huawei Cloud | Deploy EMQX on Huawei Cloud CCE |
Tencent Cloud | Deploy EMQX on Tencent Cloud TKE |
Development
Prerequisites
- Golang environment
- docker (used for creating container images, etc.)
- Kubernetes cluster
- teleperence
Install Teleperence for once
make telepresence
Connect to cluster
./bin/telepresence connect
Contributing
Many files (API, config, controller, hack,...) in this repository are auto-generated. Before proposing a pull request:
- Commit your changes.
make
andmake manifests
- Commit the generated changes.
Troubleshooting
Check the troubleshooting documentation for common issues and frequently asked questions (FAQ).