# 通用配置

# Replicas 配置

指定 EMQX 实例个数

例子:

spec:
  replicas: 3
1
2

字段说明:

字段默认值描述
replicas3EMQX实例个数

# 环境变量配置

用来设置实例的环境变量

例子:

spec:
  env:
    - name: Foo
      value: Bar
1
2
3
4

字段说明:

字段描述
.spec.env.name变量名
.spec.env.value变量值

# 镜像拉取密钥

例子:

spec:
  imagePullSecrets: [fake-secrets]
1
2

# 节点配置

  • nodeName

通过这些配置来进行Pod的调度。

如果 nodeName字段不为空,调度器会忽略该 Pod, 而指定节点上的 kubelet 会尝试将 Pod 放到该节点上。 使用 nodeName 规则的优先级会高于使用 nodeSelector或亲和性与非亲和性的规则。

例子:

spec:
  nodeName: kube-01
1
2

将调度到节点 kube-01

  • nodeSelector

nodeSelector是节点选择约束的最简单推荐形式。Kubernetes 只会将 Pod 调度到拥有你所指定的每个标签的节点上。

例子:

spec:
  nodeSelector:
    key: value
1
2
3

指定调度节点为带有label标记为 key=value 的 node 节点

# 亲和性配置

节点亲和性概念上类似于 nodeSelector 它使你可以根据节点上的标签来约束 Pod 可以调度到哪些节点上

例子:

spec:
  affinity: [config of affinity]
1
2

详情请参考 Kubernetes 官方文档 (opens new window)

# 容忍度配置

如果一个节点标记为 Taints ,除非 POD 也被标识为可以容忍污点节点,否则该 Taints 节点不会被调度pod。

如果仍然希望某个 POD 调度到 taint 节点上,则必须在 Spec 中做出Toleration定义,才能调度到该节点。

例子:

spec:
  toleRations:
    - key: "key"
      operator: "Equal"
      value: "value"
      effect: "NoSchedule"
1
2
3
4
5
6

详情请参考 Kubernetes 官方文档 (opens new window)

# 持久化配置

配置pvc属性

例子:

spec:
  persistent:
    storageClassName: standard
    resources:
      requests:
        storage: 20Mi
    accessModes:
    - ReadWriteOnce
1
2
3
4
5
6
7
8
字段默认值描述
.spec.persistent.storageClassNamestandardstorage class名称
.spec.persistent.resources.requests.storage20Mistorage容量大小
.spec.persistent.accessModesReadWriteOnce访问模式,只推荐使用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
1
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
1
2
3
4
5
6
7
8
9

# EMQX模版配置

# EMQX Dashboard账号配置

配置Dashboard登录账号

例子:

spec:
  emqxTemplate:
    username: "admin"
    password: "public"
1
2
3
4

字段说明:

字段默认值描述
.spec.emqxTemplate.imageusernameadmin用户名
.spec.emqxTemplate.imagepasswordpublic密码

# 镜像配置

指定 EMQX 的镜像和拉取策略

例子:

spec:
	emqxTemplate:
		image: emqx/emqx-ee:4.4.8
		imagePullPolicy: IfNotPresent
1
2
3
4

字段说明:

字段默认值描述
.spec.emqxTemplate.image企业版镜像地址
.spec.emqxTemplate.imagePullPolicyIfNotPresentIfNotPresent
IfNotPresent: 只有当镜像在本地不存在时才会拉取。

详情请参考 Kubernetes 官方文档 (opens new window)

# 上下文安全配置

安全上下文(Security Context)定义 Pod 或 Container 的特权与访问控制设置。

例子:

spec:
  emqxTemplate:
    securityContext:
      runAsUser: 1000
      runAsGroup: 1000
      fsGroup: 1000
      fsGroupChangePolicy: Always
1
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
1
2
3
4
5
6
7
8

参考这个 issue (opens new window)

# EMQX entrypoint 配置

EMQX 容器的 entrypoint,如果没有提供,那么就使用EMQX 镜像的CMD。

例子:

spec:
  emqxTemplate:
    args:
      - bash
      - -c
      - |
        printenv | grep "^EMQX_"
        emqx foreground
1
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"
1
2
3
4
5
6
7
8
9

注意spec.env 会覆盖 spec.emqxTemplate.config

详情请参考 EMQX 官方文档 (opens new window)

# ACL配置

EMQX ACL 规则

例子:

spec:
	emqxTemplate:
		- "{allow, all}."
1
2
3

详情请参考 EMQX 官方文档 (opens new window)

# EMQX 模块配置

配置 EMQX 中的功能模块

例子:

spec:
  emqxTemplate:
    modules:
      - name: "emqx_mod_acl_internal"
        enable: true
      - name: "emqx_mod_presence"
        enable: true
1
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
1
2
3
4
5
6
7
8
9

字段说明:

字段默认值描述
.spec.emqxTemplate.readinessProbe.httpGet.pathGet 接口 path
.spec.emqxTemplate.readinessProbe.httpGet.portGet 接口 port
.spec.emqxTemplate.readinessProbe.initialDelaySeconds0告诉 kubelet 在执行第一次探测前应该等待 10 秒
.spec.emqxTemplate.readinessProbe.periodSeconds10指定了 kubelet 每隔 5 秒执行一次就绪探测
.spec.emqxTemplate.readinessProbe.failureThreshold3当探测失败时,Kubernetes 的重试次数
  • livenessProbe 探针

周期性检查 EMQX 容器是否存活

例子:

spec:
  emqxTemplate:
    livenessProbe:
      httpGet:
        path: /status
        port: 8081
      initialDelaySeconds: 60
      periodSeconds: 30
      failureThreshold: 3
1
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
1
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"
1
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16