267 lines
7.4 KiB
YAML
267 lines
7.4 KiB
YAML
---
|
||
apiVersion: apps/v1
|
||
kind: StatefulSet
|
||
metadata:
|
||
labels:
|
||
cmii.app: helm-emqxs
|
||
cmii.emqx.architecture: cluster
|
||
cmii.type: middleware
|
||
name: helm-emqxs
|
||
namespace: bj-sh-uas-260511
|
||
spec:
|
||
persistentVolumeClaimRetentionPolicy:
|
||
whenDeleted: Retain
|
||
whenScaled: Retain
|
||
podManagementPolicy: Parallel
|
||
replicas: 1
|
||
revisionHistoryLimit: 10
|
||
selector:
|
||
matchLabels:
|
||
cmii.app: helm-emqxs
|
||
cmii.emqx.architecture: cluster
|
||
cmii.type: middleware
|
||
serviceName: helm-emqxs-headless
|
||
template:
|
||
metadata:
|
||
creationTimestamp: null
|
||
labels:
|
||
cmii.app: helm-emqxs
|
||
cmii.emqx.architecture: cluster
|
||
cmii.type: middleware
|
||
spec:
|
||
affinity:
|
||
nodeAffinity:
|
||
requiredDuringSchedulingIgnoredDuringExecution:
|
||
nodeSelectorTerms:
|
||
- matchExpressions:
|
||
- key: uavcloud.env
|
||
operator: In
|
||
values:
|
||
- bj-sh-uas-260511
|
||
podAntiAffinity:
|
||
preferredDuringSchedulingIgnoredDuringExecution:
|
||
- podAffinityTerm:
|
||
labelSelector:
|
||
matchExpressions:
|
||
- key: cmii.app
|
||
operator: In
|
||
values:
|
||
- helm-emqxs
|
||
topologyKey: kubernetes.io/hostname
|
||
weight: 100
|
||
containers:
|
||
- env:
|
||
- name: POD_NAME
|
||
valueFrom:
|
||
fieldRef:
|
||
apiVersion: v1
|
||
fieldPath: metadata.name
|
||
- name: EMQX_DATA_DIR
|
||
value: /opt/emqx/data
|
||
image: 192.168.3.31:8088/cmii/emqx:5.8.8
|
||
imagePullPolicy: IfNotPresent
|
||
livenessProbe:
|
||
failureThreshold: 3
|
||
httpGet:
|
||
path: /status
|
||
port: 18083
|
||
scheme: HTTP
|
||
initialDelaySeconds: 60
|
||
periodSeconds: 30
|
||
successThreshold: 1
|
||
timeoutSeconds: 10
|
||
name: emqx
|
||
ports:
|
||
- containerPort: 1883
|
||
name: mqtt
|
||
protocol: TCP
|
||
- containerPort: 8883
|
||
name: mqttssl
|
||
protocol: TCP
|
||
- containerPort: 8083
|
||
name: ws
|
||
protocol: TCP
|
||
- containerPort: 18083
|
||
name: dashboard
|
||
protocol: TCP
|
||
- containerPort: 4370
|
||
name: ekka
|
||
protocol: TCP
|
||
readinessProbe:
|
||
failureThreshold: 3
|
||
httpGet:
|
||
path: /status
|
||
port: 18083
|
||
scheme: HTTP
|
||
initialDelaySeconds: 10
|
||
periodSeconds: 10
|
||
successThreshold: 1
|
||
timeoutSeconds: 5
|
||
resources:
|
||
limits:
|
||
cpu: "2"
|
||
memory: 2Gi
|
||
requests:
|
||
cpu: 500m
|
||
memory: 512Mi
|
||
startupProbe:
|
||
failureThreshold: 30
|
||
httpGet:
|
||
path: /status
|
||
port: 18083
|
||
scheme: HTTP
|
||
initialDelaySeconds: 10
|
||
periodSeconds: 5
|
||
successThreshold: 1
|
||
timeoutSeconds: 1
|
||
terminationMessagePath: /dev/termination-log
|
||
terminationMessagePolicy: File
|
||
volumeMounts:
|
||
- mountPath: /opt/emqx/data
|
||
name: emqx-data
|
||
- mountPath: /opt/emqx/etc/emqx.conf
|
||
name: bootstrap-config
|
||
subPath: emqx.conf
|
||
- command:
|
||
- /bin/sh
|
||
- -c
|
||
- |
|
||
# 等待主容器启动
|
||
echo "等待EMQX启动..."
|
||
sleep 20
|
||
|
||
# 执行初始化
|
||
/bin/sh /scripts/init-dashboard.sh
|
||
|
||
# 保持运行
|
||
echo "初始化完成,进入守护模式..."
|
||
while true; do sleep 3600; done
|
||
env:
|
||
- name: DASHBOARD_ADMIN_PASSWORD
|
||
valueFrom:
|
||
secretKeyRef:
|
||
key: dashboard-admin-password
|
||
name: emqx-credentials
|
||
image: 192.168.3.31:8088/cmii/tools:1.0
|
||
imagePullPolicy: IfNotPresent
|
||
name: init-dashboard
|
||
resources:
|
||
limits:
|
||
cpu: 200m
|
||
memory: 128Mi
|
||
requests:
|
||
cpu: 100m
|
||
memory: 64Mi
|
||
terminationMessagePath: /dev/termination-log
|
||
terminationMessagePolicy: File
|
||
volumeMounts:
|
||
- mountPath: /scripts
|
||
name: init-script
|
||
- mountPath: /bootstrap
|
||
name: bootstrap-users
|
||
dnsPolicy: ClusterFirst
|
||
imagePullSecrets:
|
||
- name: harborsecret
|
||
initContainers:
|
||
- command:
|
||
- /bin/sh
|
||
- -c
|
||
- |
|
||
echo "准备bootstrap文件..."
|
||
|
||
# 创建数据目录
|
||
mkdir -p /opt/emqx/data
|
||
|
||
# 复制bootstrap文件到数据目录
|
||
# 只在文件不存在时复制,避免覆盖已有数据
|
||
if [ ! -f /opt/emqx/data/bootstrap_users.json ]; then
|
||
cp /bootstrap-src/bootstrap_users.json /opt/emqx/data/
|
||
echo "✓ 已复制用户bootstrap文件"
|
||
else
|
||
echo "ℹ 用户bootstrap文件已存在,跳过"
|
||
fi
|
||
|
||
# 设置权限 (现在有root权限,可以成功)
|
||
chown -R 1000:1000 /opt/emqx/data
|
||
|
||
echo "✓ Bootstrap准备完成"
|
||
image: 192.168.3.31:8088/cmii/tools:1.0
|
||
imagePullPolicy: IfNotPresent
|
||
name: prepare-bootstrap
|
||
resources: {}
|
||
securityContext:
|
||
runAsUser: 0
|
||
terminationMessagePath: /dev/termination-log
|
||
terminationMessagePolicy: File
|
||
volumeMounts:
|
||
- mountPath: /opt/emqx/data
|
||
name: emqx-data
|
||
- mountPath: /bootstrap-src
|
||
name: bootstrap-users
|
||
nodeSelector:
|
||
mysql-deploy: "true"
|
||
restartPolicy: Always
|
||
schedulerName: default-scheduler
|
||
securityContext:
|
||
fsGroup: 1000
|
||
runAsUser: 1000
|
||
serviceAccount: helm-emqxs
|
||
serviceAccountName: helm-emqxs
|
||
terminationGracePeriodSeconds: 30
|
||
volumes:
|
||
- configMap:
|
||
defaultMode: 420
|
||
name: emqx-bootstrap-config
|
||
name: bootstrap-config
|
||
- configMap:
|
||
defaultMode: 420
|
||
name: emqx-bootstrap-users
|
||
name: bootstrap-users
|
||
- configMap:
|
||
defaultMode: 493
|
||
name: emqx-init-dashboard
|
||
name: init-script
|
||
- name: emqx-data
|
||
hostPath:
|
||
path: /var/lib/docker/emqx-pv/bj-sh-uas-260511/
|
||
type: ""
|
||
updateStrategy:
|
||
type: RollingUpdate
|
||
---
|
||
apiVersion: v1
|
||
kind: Service
|
||
metadata:
|
||
labels:
|
||
cmii.app: helm-emqxs
|
||
cmii.type: middleware
|
||
name: helm-emqxs
|
||
namespace: bj-sh-uas-260511
|
||
spec:
|
||
ports:
|
||
- name: mqtt
|
||
nodePort: 31883
|
||
port: 1883
|
||
protocol: TCP
|
||
targetPort: 1883
|
||
- name: dashboard
|
||
nodePort: 38085
|
||
port: 18083
|
||
protocol: TCP
|
||
targetPort: 18083
|
||
- name: ws
|
||
nodePort: 38083
|
||
port: 8083
|
||
protocol: TCP
|
||
targetPort: 8083
|
||
- name: mqttssl
|
||
nodePort: 38883
|
||
port: 8883
|
||
protocol: TCP
|
||
targetPort: 8883
|
||
selector:
|
||
cmii.app: helm-emqxs
|
||
cmii.emqx.architecture: cluster
|
||
cmii.type: middleware
|
||
sessionAffinity: None
|
||
type: NodePort
|