# 产品概览
该项目提供了一个 Operator,用于在 Kubernetes 上管理 EMQX 集群。
# 部署 EMQX Operator
# 准备环境
EMQX Operator 部署前,请确认以下组件已经安装:
软件 | 版本要求 |
---|---|
Kubernetes (opens new window) | >= 1.24 |
Helm (opens new window) | >= 3 |
cert-manager (opens new window) | >= 1.1.6 |
# 为什么我们需要 kubernetes 1.24:
在 Kubernetes 1.24 及以上默认开启
MixedProtocolLBService
特性,其文档可以参考: MixedProtocolLBService (opens new window)。MixedProtocolLBService
特性允许在同一LoadBalancer
类型的 Service 实例中使用不同的协议。因此如果用户在 Kubernetes 上部署 EMQX 集群,并且使用LoadBalancer
类型的 Service,Service 里面同时存在 TCP 和 UDP 两种协议,请注意升级 Kubernetes 版本到 1.24及以上,否则会导致 Service 创建失败。如果用户不需要
MixedProtocolLBService
特性, EMQX Operator 需要的 Kubernetes 集群版本为>=1.21
。
# 安装 EMQX Operator
请先确认 cert-manager (opens new window) 已经就绪
helm repo add emqx https://repos.emqx.io/charts
helm repo update
helm install emqx-operator emqx/emqx-operator --namespace emqx-operator-system --create-namespace
2
3
检查 EMQX Operator 是否就绪
kubectl get pods -l "control-plane=controller-manager" -n emqx-operator-system
输出类似于:
NAME READY STATUS RESTARTS AGE
emqx-operator-controller-manager-68b866c8bf-kd4g6 1/1 Running 0 15s
2
# 升级 EMQX Operator
执行下面的命令可以升级 EMQX Operator,若想指定到升级版只需要增加 --version=x.x.x 参数即可
helm upgrade emqx-operator emqx/emqx-operator -n emqx-operator-system
不支持 1.x.x 版本 EMQX Operator 升级到 2.x.x 版本。
# 卸载 EMQX Operator
执行如下命令卸载 EMQX Operator
helm uninstall emqx-operator -n emqx-operator-system
# 部署 EMQX
# 部署 EMQX 5
- 部署 EMQX
cat << "EOF" | kubectl apply -f -
apiVersion: apps.emqx.io/v2alpha1
kind: EMQX
metadata:
name: emqx
spec:
image: emqx/emqx:5.0.14
EOF
2
3
4
5
6
7
8
完整的例子请查看 emqx-full.yaml (opens new window),每个字段的详细解释请参考 v2alpha1-reference (opens new window)。
- 检查 EMQX 集群是否就绪
kubectl get emqx emqx -o json | jq '.status.conditions[] | select( .type == "Running" and .status == "True")'
这可能需要等待一段时间命令才会执行成功,因为需要等待所有的 EMQX 节点启动并加入集群。
输出类似于:
{
"lastTransitionTime": "2023-02-10T02:46:36Z",
"lastUpdateTime": "2023-02-07T06:46:36Z",
"message": "Cluster is running",
"reason": "ClusterRunning",
"status": "True",
"type": "Running"
}
2
3
4
5
6
7
8
# 部署 EMQX 4
- 部署 EMQX
cat << "EOF" | kubectl apply -f -
apiVersion: apps.emqx.io/v1beta4
kind: EmqxBroker
metadata:
name: emqx
spec:
template:
spec:
emqxContainer:
image:
repository: emqx/emqx-ee
version: 4.4.14
EOF
2
3
4
5
6
7
8
9
10
11
12
13
完整的例子请查看 emqxbroker-full.yaml (opens new window),每个字段的详细解释请参考 v1beta4-reference (opens new window)。
- 检查 EMQX 集群是否就绪
kubectl get emqxBroker emqx -o json | jq '.status.conditions[] | select( .type == "Running" and .status == "True")'
这可能需要等待一段时间命令才会执行成功,因为需要等待所有的 EMQX 节点启动并加入集群。
输出类似于:
{
"lastTransitionTime": "2023-02-13T02:38:25Z",
"lastUpdateTime": "2023-02-13T02:44:19Z",
"message": "All resources are ready",
"reason": "ClusterReady",
"status": "True",
"type": "Running"
}
2
3
4
5
6
7
8
# 部署 EMQX Enterprise 4
- 部署 EMQX
cat << "EOF" | kubectl apply -f -
apiVersion: apps.emqx.io/v1beta4
kind: EmqxEnterprise
metadata:
name: emqx-ee
spec:
template:
spec:
emqxContainer:
image:
repository: emqx/emqx-ee
version: 4.4.14
EOF
2
3
4
5
6
7
8
9
10
11
12
13
完整的例子请查看 emqxenterprise-full.yaml (opens new window),每个字段的详细解释请参考 v1beta4-reference (opens new window)。
- 检查 EMQX 集群是否就绪
kubectl get emqxEnterprise emqx-ee -o json | jq '.status.conditions[] | select( .type == "Running" and .status == "True")'
这可能需要等待一段时间命令才会执行成功,因为需要等待所有的 EMQX 节点启动并加入集群。
输出类似于:
{
"lastTransitionTime": "2023-02-13T02:38:25Z",
"lastUpdateTime": "2023-02-13T02:44:19Z",
"message": "All resources are ready",
"reason": "ClusterReady",
"status": "True",
"type": "Running"
}
2
3
4
5
6
7
8