# 通用配置
# Replicas 配置
指定 EMQX 实例个数
例子:
spec:
replicas: 3
2
字段说明:
字段 | 默认值 | 描述 |
---|---|---|
replicas | 3 | EMQX实例个数 |
# 环境变量配置
用来设置实例的环境变量
例子:
spec:
env:
- name: Foo
value: Bar
2
3
4
字段说明:
字段 | 描述 |
---|---|
.spec.env.name | 变量名 |
.spec.env.value | 变量值 |
# 镜像拉取密钥
例子:
spec:
imagePullSecrets: [fake-secrets]
2
# 节点配置
- nodeName
通过这些配置来进行Pod的调度。
如果 nodeName
字段不为空,调度器会忽略该 Pod, 而指定节点上的 kubelet 会尝试将 Pod 放到该节点上。 使用 nodeName
规则的优先级会高于使用 nodeSelector
或亲和性与非亲和性的规则。
例子:
spec:
nodeName: kube-01
2
将调度到节点 kube-01
- nodeSelector
nodeSelector
是节点选择约束的最简单推荐形式。Kubernetes 只会将 Pod 调度到拥有你所指定的每个标签的节点上。
例子:
spec:
nodeSelector:
key: value
2
3
指定调度节点为带有label标记为 key=value 的 node 节点
# 亲和性配置
节点亲和性概念上类似于 nodeSelector
它使你可以根据节点上的标签来约束 Pod 可以调度到哪些节点上
例子:
spec:
affinity: [config of affinity]
2
详情请参考 Kubernetes 官方文档 (opens new window)
# 容忍度配置
如果一个节点标记为 Taints ,除非 POD 也被标识为可以容忍污点节点,否则该 Taints 节点不会被调度pod。
如果仍然希望某个 POD 调度到 taint 节点上,则必须在 Spec 中做出Toleration
定义,才能调度到该节点。
例子:
spec:
toleRations:
- key: "key"
operator: "Equal"
value: "value"
effect: "NoSchedule"
2
3
4
5
6
详情请参考 Kubernetes 官方文档 (opens new window)
# 持久化配置
配置pvc属性
例子:
spec:
persistent:
storageClassName: standard
resources:
requests:
storage: 20Mi
accessModes:
- ReadWriteOnce
2
3
4
5
6
7
8
字段 | 默认值 | 描述 |
---|---|---|
.spec.persistent.storageClassName | standard | storage class名称 |
.spec.persistent.resources.requests.storage | 20Mi | storage容量大小 |
.spec.persistent.accessModes | ReadWriteOnce | 访问模式,只推荐使用ReadWriteOnce |
# 初始化容器配置
Init 容器是一种特殊容器,在 Pod (opens new window) 内的应用容器启动之前运行。Init 容器可以包括一些应用镜像中不存在的实用工具和安装脚本。
例子:
spec:
initContainers:
name: busybox
image: busybox:stable
securityContext:
runAsUser: 0
runAsGroup: 0
capabilities:
add:
- SYS_ADMIN
drop:
- ALL
command:
- /bin/sh
- -c
- |
mount -o remount rw /proc/sys
sysctl -w net.core.somaxconn=65535
sysctl -w net.ipv4.ip_local_port_range="1024 65535"
sysctl -w kernel.core_uses_pid=0
sysctl -w net.ipv4.tcp_tw_reuse=1
sysctl -w fs.nr_open=1000000000
sysctl -w fs.file-max=1000000000
sysctl -w net.ipv4.ip_local_port_range='1025 65534'
sysctl -w net.ipv4.udp_mem='74583000 499445000 749166000'
sysctl -w net.ipv4.tcp_max_sync_backlog=163840
sysctl -w net.core.netdev_max_backlog=163840
sysctl -w net.core.optmem_max=16777216
sysctl -w net.ipv4.tcp_rmem='1024 4096 16777216'
sysctl -w net.ipv4.tcp_wmem='1024 4096 16777216'
sysctl -w net.ipv4.tcp_max_tw_buckets=1048576
sysctl -w net.ipv4.tcp_fin_timeout=15
sysctl -w net.core.rmem_default=262144000
sysctl -w net.core.wmem_default=262144000
sysctl -w net.core.rmem_max=262144000
sysctl -w net.core.wmem_max=262144000
sysctl -w net.ipv4.tcp_mem='378150000 504200000 756300000'
sysctl -w net.netfilter.nf_conntrack_max=1000000
sysctl -w net.netfilter.nf_conntrack_tcp_timeout_time_wait=30
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
上述这段配置用来对 EMQX 容器进行内核和网络优化
# 额外容器配置
类似 side-car 容器,可以和 EMQX 容器同时运行,用来对用户的业务进行处理。
例子:
spec:
extraContainers:
- name: extra
image: busybox:stable
command:
- /bin/sh
- -c
- |
tail -f /dev/null
2
3
4
5
6
7
8
9
# EMQX模版配置
# EMQX Dashboard账号配置
配置Dashboard登录账号
例子:
spec:
emqxTemplate:
username: "admin"
password: "public"
2
3
4
字段说明:
字段 | 默认值 | 描述 |
---|---|---|
.spec.emqxTemplate.imageusername | admin | 用户名 |
.spec.emqxTemplate.imagepassword | public | 密码 |
# 镜像配置
指定 EMQX 的镜像和拉取策略
例子:
spec:
emqxTemplate:
image: emqx/emqx-ee:4.4.8
imagePullPolicy: IfNotPresent
2
3
4
字段说明:
字段 | 默认值 | 描述 |
---|---|---|
.spec.emqxTemplate.image | 企业版镜像地址 | |
.spec.emqxTemplate.imagePullPolicy | IfNotPresent | IfNotPresent |
IfNotPresent: 只有当镜像在本地不存在时才会拉取。 |
详情请参考 Kubernetes 官方文档 (opens new window)
# 上下文安全配置
安全上下文(Security Context)定义 Pod 或 Container 的特权与访问控制设置。
例子:
spec:
emqxTemplate:
securityContext:
runAsUser: 1000
runAsGroup: 1000
fsGroup: 1000
fsGroupChangePolicy: Always
2
3
4
5
6
7
详情请参考 Kubernetes 官方文档 (opens new window)
# 额外卷配置
挂载额外的卷,例如:secret 或者 configmap。
例子:
spec:
emqxTemplate:
extraVolumes:
- name: fake-volume
emptyDir: {}
extraVolumeMounts:
- name: fake-volume
mountPath: /tmp/fake
2
3
4
5
6
7
8
# EMQX entrypoint 配置
EMQX 容器的 entrypoint,如果没有提供,那么就使用EMQX 镜像的CMD。
例子:
spec:
emqxTemplate:
args:
- bash
- -c
- |
printenv | grep "^EMQX_"
emqx foreground
2
3
4
5
6
7
8
详情请参考 Kubernetes 官方文档 (opens new window)
# EMQX 参数配置
EMQX 参数配置项
例子:
spec:
emqxTemplate:
config:
name: emqx-ee
cluster.discovery: dns
cluster.dns.type: srv
cluster.dns.app: emqx-ee
cluster.dns.name: emqx-ee-headless.default.svc.cluster.local
listener.tcp.external: "1883"
2
3
4
5
6
7
8
9
注意:spec.env
会覆盖 spec.emqxTemplate.config
详情请参考 EMQX 官方文档 (opens new window)
# ACL配置
EMQX ACL 规则
例子:
spec:
emqxTemplate:
- "{allow, all}."
2
3
详情请参考 EMQX 官方文档 (opens new window)
# EMQX 模块配置
配置 EMQX 中的功能模块
例子:
spec:
emqxTemplate:
modules:
- name: "emqx_mod_acl_internal"
enable: true
- name: "emqx_mod_presence"
enable: true
2
3
4
5
6
7
详情请参考 EMQX 官方文档 (opens new window)
# 探针配置
- readinessProbe 探针
周期性地检查 EMQX 容器是否就绪
例子:
spec:
emqxTemplate:
readinessProbe:
httpGet:
path: /status
port: 8081
initialDelaySeconds: 10
periodSeconds: 5
failureThreshold: 12
2
3
4
5
6
7
8
9
字段说明:
字段 | 默认值 | 描述 |
---|---|---|
.spec.emqxTemplate.readinessProbe.httpGet.path | 无 | Get 接口 path |
.spec.emqxTemplate.readinessProbe.httpGet.port | 无 | Get 接口 port |
.spec.emqxTemplate.readinessProbe.initialDelaySeconds | 0 | 告诉 kubelet 在执行第一次探测前应该等待 10 秒 |
.spec.emqxTemplate.readinessProbe.periodSeconds | 10 | 指定了 kubelet 每隔 5 秒执行一次就绪探测 |
.spec.emqxTemplate.readinessProbe.failureThreshold | 3 | 当探测失败时,Kubernetes 的重试次数 |
- livenessProbe 探针
周期性检查 EMQX 容器是否存活
例子:
spec:
emqxTemplate:
livenessProbe:
httpGet:
path: /status
port: 8081
initialDelaySeconds: 60
periodSeconds: 30
failureThreshold: 3
2
3
4
5
6
7
8
9
字段说明:
字段 | 默认值 | 描述 |
---|
| .spec.emqxTemplate.livenessProbe.httpGet.path | 无 | Get 接口 path | | .spec.emqxTemplate.livenessProbe.httpGet.port | 无 | Get 接口 port | | .spec.emqxTemplate.livenessProbe.initialDelaySeconds | 0 | 告诉 kubelet 在执行第一次探测前应该等待 60 秒 | | .spec.emqxTemplate.livenessProbe.periodSeconds | 10 | 指定了 kubelet 每隔 30 秒执行一次存活探测 | | .spec.emqxTemplate.livenessProbe.failureThreshold | 3 | 当探测失败时,Kubernetes 的重试次数 |
- startupProbe 探针
检查 EMQX 容器是否成功启动
例子:
spec:
emqxTemplate:
startupProbe:
httpGet:
path: /status
port: 8081
initialDelaySeconds: 10
periodSeconds: 5
failureThreshold: 12
2
3
4
5
6
7
8
9
字段说明:
字段 | 默认值 | 描述 |
---|
| .spec.emqxTemplate.startupProbe.httpGet.path | 无 | Get 接口 path | | .spec.emqxTemplate.startupProbe.httpGet.port | 无 | Get 接口 port | | .spec.emqxTemplate.startupProbe.initialDelaySeconds | 0 | 告诉 kubelet 在执行第一次探测前应该等待 10 秒 | | .spec.emqxTemplate.startupProbe.periodSeconds | 10 | 指定了 kubelet 每隔 5 秒执行一次启动探测 | | .spec.emqxTemplate.startupProbe.failureThreshold | 3 | 当探测失败时,Kubernetes 的重试次数 |
详情请参考 Kubernetes 官方文档 (opens new window)
# 容器资源配置
配置 EMQX 容器的 CPU 和内存资源
例子:
spec:
emqxTemplate:
resources:
requests:
memory: "64Mi"
cpu: "125m"
limits:
memory: "1024Mi"
cpu: "500m"
2
3
4
5
6
7
8
9
字段说明:
字段 | 描述 |
---|---|
.spec.emqxTemplate.resources.requests | 对资源的请求 |
.spec.emqxTemplate.resources.requests.limits | 对资源的限制 |
详情请参考 Kubernetes 官方文档 (opens new window)
# service 模版配置
配置 EMQX service 模版
例子:
spec:
emqxTemplate:
metadata:
name: emqx-ee
namespace: default
labels:
"apps.emqx.io/instance": "emqx-ee"
spec:
type: ClusterIP
selector:
"apps.emqx.io/instance": "emqx-ee"
ports:
- name: "http-management-8081"
port: 8081
protocol: "TCP"
targetPort: 8081
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16