安装
官方文档
kubectl create ns pro-emqx
kubectl apply -f - <<EOF
kind: StatefulSet
apiVersion: apps/v1
metadata:
name: emqx
namespace: pro-emqx
labels:
app.kubernetes.io/instance: emqx
app.kubernetes.io/name: emqx
spec:
replicas: 3
selector:
matchLabels:
app.kubernetes.io/instance: emqx
app.kubernetes.io/name: emqx
template:
metadata:
creationTimestamp: null
labels:
app: emqx
app.kubernetes.io/instance: emqx
app.kubernetes.io/name: emqx
version: latest
spec:
volumes:
- name: pro-emqx-data
persistentVolumeClaim:
claimName: emqx-data
- name: tz-config
hostPath:
path: /usr/share/zoneinfo/Asia/Shanghai
type: ''
- name: pro-emqx-conf
persistentVolumeClaim:
claimName: emqx-conf
containers:
- name: emqx
image: 'harbor.axzo.cn/axzo-k8s/emqx:4.3.10'
ports:
- name: mqtt
containerPort: 1883
protocol: TCP
- name: mqttssl
containerPort: 8883
protocol: TCP
- name: ws
containerPort: 8083
protocol: TCP
- name: wss
containerPort: 8084
protocol: TCP
- name: dashboard
containerPort: 18083
protocol: TCP
- name: ekka
containerPort: 4370
protocol: TCP
- name: mgmt
containerPort: 8081
protocol: TCP
envFrom:
- configMapRef:
name: emqx-env
env:
- name: EMQX_CLUSTER__DISCOVERY
value: k8s
- name: EMQX_CLUSTER__K8S__APP_NAME
value: emqx
- name: EMQX_CLUSTER__K8S__NAMESPACE
value: pro-emqx
- name: EMQX_CLUSTER__K8S__SERVICE_NAME
value: emqx-headless
- name: EMQX_NAME
value: emqx
resources: {}
volumeMounts:
- name: emqx-data
mountPath: /opt/emqx/data
- name: tz-config
mountPath: /etc/localtime
- name: emqx-conf
mountPath: /opt/emqx/etc
livenessProbe:
httpGet:
path: /status
port: 8081
scheme: HTTP
initialDelaySeconds: 5
timeoutSeconds: 2
periodSeconds: 2
successThreshold: 1
failureThreshold: 3
readinessProbe:
httpGet:
path: /status
port: 8081
scheme: HTTP
initialDelaySeconds: 5
timeoutSeconds: 2
periodSeconds: 2
successThreshold: 2
failureThreshold: 3
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
imagePullPolicy: IfNotPresent
securityContext:
runAsUser: 1000
runAsNonRoot: true
restartPolicy: Always
terminationGracePeriodSeconds: 30
dnsPolicy: ClusterFirst
serviceAccountName: emqx
serviceAccount: emqx
securityContext:
runAsUser: 1000
supplementalGroups:
- 1000
fsGroup: 1000
imagePullSecrets:
- name: harbor
schedulerName: default-scheduler
serviceName: emqx-headless
podManagementPolicy: Parallel
updateStrategy:
type: RollingUpdate
revisionHistoryLimit: 10
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: emqx
namespace: pro-emqx
---
kind: ConfigMap
apiVersion: v1
metadata:
name: emqx-env
namespace: pro-emqx
labels:
app.kubernetes.io/instance: emqx
app.kubernetes.io/name: emqx
data:
EMQX_CLUSTER__K8S__ADDRESS_TYPE: hostname
EMQX_CLUSTER__K8S__APISERVER: 'https://kubernetes.default.svc:443'
EMQX_CLUSTER__K8S__SUFFIX: svc.cluster.local
---
metadata:
name: emqx-nodeport
namespace: pro-emqx
spec:
ports:
- name: mqtt
protocol: TCP
port: 1883
targetPort: 1883
nodePort: 30011
selector:
app.kubernetes.io/instance: emqx
app.kubernetes.io/name: emqx
workloadID_emqx: 'true'
type: NodePort
sessionAffinity: None
externalTrafficPolicy: Cluster
apiVersion: v1
kind: Service
---
metadata:
name: emqx
namespace: pro-emqx
labels:
app.kubernetes.io/instance: emqx
app.kubernetes.io/name: emqx
spec:
ports:
- name: mqtt
protocol: TCP
port: 1883
targetPort: mqtt
- name: mqttssl
protocol: TCP
port: 8883
targetPort: mqttssl
- name: ws
protocol: TCP
port: 8083
targetPort: ws
- name: wss
protocol: TCP
port: 8084
targetPort: wss
- name: dashboard
protocol: TCP
port: 18083
targetPort: dashboard
- name: mgmt
protocol: TCP
port: 8081
targetPort: mgmt
selector:
app.kubernetes.io/instance: emqx
app.kubernetes.io/name: emqx
type: ClusterIP
sessionAffinity: None
apiVersion: v1
kind: Service
---
metadata:
name: emqx-headless
namespace: pro-emqx
labels:
app.kubernetes.io/instance: emqx
app.kubernetes.io/name: emqx
spec:
ports:
- name: mqtt
protocol: TCP
port: 1883
targetPort: mqtt
- name: mqttssl
protocol: TCP
port: 8883
targetPort: mqttssl
- name: ws
protocol: TCP
port: 8083
targetPort: ws
- name: wss
protocol: TCP
port: 8084
targetPort: wss
- name: dashboard
protocol: TCP
port: 18083
targetPort: dashboard
- name: ekka
protocol: TCP
port: 4370
targetPort: ekka
- name: mgmt
protocol: TCP
port: 8081
targetPort: mgmt
selector:
app.kubernetes.io/instance: emqx
app.kubernetes.io/name: emqx
clusterIP: None
type: ClusterIP
sessionAffinity: None
publishNotReadyAddresses: true
apiVersion: v1
kind: Service
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: emqx
namespace: pro-emqx
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: emqx
namespace: pro-emqx
rules:
- apiGroups:
- ""
resources:
- endpoints
verbs:
- get
- watch
- list
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: emqx
namespace: pro-emqx
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: emqx
subjects:
- kind: ServiceAccount
name: emqx
namespace: pro-emqx
---
EOF
5.X版本安装
安装cert-manager
helm repo add jetstack https://charts.jetstack.io
helm repo update
helm upgrade --install cert-manager jetstack/cert-manager \
--namespace cert-manager \
--create-namespace \
--set installCRDs=true
安装 EMQX Operator
helm repo add emqx https://repos.emqx.io/charts
helm repo update
helm upgrade --install emqx-operator emqx/emqx-operator \
--namespace emqx-operator-system \
--create-namespace
kubectl wait --for=condition=Ready pods -l "control-plane=controller-manager" -n emqx-operator-system
安装 EMQX
kubectl apply -f - <<EOF
apiVersion: apps.emqx.io/v2beta1
kind: EMQX
metadata:
name: open-emqx
namespace: java-dev
spec:
image: harbor.axzo.cn/library/emqx:5
coreTemplate:
spec:
volumeClaimTemplates:
storageClassName: sfsturbo-sc-dev
resources:
requests:
storage: 10Gi
accessModes:
- ReadWriteMany
EOF
kubectl get emqx -n java-dev
kubectl apply -f - <<EOF
metadata:
name: open-emqx-nodeport
namespace: java-dev
labels:
apps.emqx.io/instance: open-emqx
apps.emqx.io/managed-by: emqx-operator
spec:
ports:
- name: open-emqx-1883
protocol: TCP
port: 1883
targetPort: 1883
- name: open-emqx-8883
protocol: TCP
port: 8883
targetPort: 8883
selector:
apps.emqx.io/instance: open-emqx
apps.emqx.io/managed-by: emqx-operator
type: NodePort
apiVersion: v1
kind: Service
EOF