StatefulSet.yaml 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  1. apiVersion: apps/v1
  2. kind: StatefulSet
  3. metadata:
  4. name: {{ include "emqx.fullname" . }}
  5. namespace: {{ .Release.Namespace }}
  6. labels:
  7. app.kubernetes.io/name: {{ include "emqx.name" . }}
  8. helm.sh/chart: {{ include "emqx.chart" . }}
  9. app.kubernetes.io/instance: {{ .Release.Name }}
  10. app.kubernetes.io/managed-by: {{ .Release.Service }}
  11. spec:
  12. serviceName: {{ include "emqx.fullname" . }}-headless
  13. podManagementPolicy: {{ .Values.podManagementPolicy }}
  14. {{- if and .Values.persistence.enabled (not .Values.persistence.existingClaim) }}
  15. volumeClaimTemplates:
  16. - metadata:
  17. name: emqx-data
  18. namespace: {{ .Release.Namespace }}
  19. labels:
  20. app.kubernetes.io/name: {{ include "emqx.name" . }}
  21. app.kubernetes.io/instance: {{ .Release.Name }}
  22. app.kubernetes.io/managed-by: {{ .Release.Service }}
  23. spec:
  24. {{- if .Values.persistence.storageClassName }}
  25. storageClassName: {{ .Values.persistence.storageClassName | quote }}
  26. {{- end }}
  27. accessModes:
  28. - {{ .Values.persistence.accessMode | quote }}
  29. resources:
  30. requests:
  31. storage: {{ .Values.persistence.size | quote }}
  32. {{- end }}
  33. updateStrategy:
  34. type: RollingUpdate
  35. {{- if .Values.minReadySeconds }}
  36. minReadySeconds: {{ .Values.minReadySeconds }}
  37. {{- end }}
  38. replicas: {{ .Values.replicaCount }}
  39. selector:
  40. matchLabels:
  41. app.kubernetes.io/name: {{ include "emqx.name" . }}
  42. app.kubernetes.io/instance: {{ .Release.Name }}
  43. template:
  44. metadata:
  45. labels:
  46. {{- with .Values.podLabels }}
  47. {{- toYaml . | nindent 8 }}
  48. {{- end }}
  49. app: {{ include "emqx.name" . }}
  50. version: {{ .Chart.AppVersion }}
  51. app.kubernetes.io/name: {{ include "emqx.name" . }}
  52. app.kubernetes.io/instance: {{ .Release.Name }}
  53. annotations:
  54. {{- with .Values.podAnnotations }}
  55. {{- toYaml . | nindent 8 }}
  56. {{- end }}
  57. {{- if .Values.recreatePods }}
  58. checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum | quote }}
  59. {{- end }}
  60. spec:
  61. serviceAccountName: {{ include "emqx.serviceAccountName" . }}
  62. {{- if .Values.priorityClassName }}
  63. priorityClassName: {{ .Values.priorityClassName }}
  64. {{- end }}
  65. volumes:
  66. {{- if .Values.ssl.enabled }}
  67. - name: ssl-cert
  68. secret:
  69. secretName: {{ include "emqx.ssl.secretName" . }}
  70. {{- end }}
  71. {{- if not .Values.persistence.enabled }}
  72. - name: emqx-data
  73. emptyDir: {}
  74. {{- else if .Values.persistence.existingClaim }}
  75. - name: emqx-data
  76. persistentVolumeClaim:
  77. {{- with .Values.persistence.existingClaim }}
  78. claimName: {{ tpl . $ }}
  79. {{- end }}
  80. {{- end }}
  81. {{- if .Values.emqxLicenseSecretName }}
  82. - name: emqx-license
  83. secret:
  84. secretName: {{ .Values.emqxLicenseSecretName }}
  85. {{- end }}
  86. {{- if .Values.extraVolumes }}
  87. {{- toYaml .Values.extraVolumes | nindent 6 }}
  88. {{- end }}
  89. {{- if .Values.podSecurityContext.enabled }}
  90. securityContext: {{- omit .Values.podSecurityContext "enabled" | toYaml | nindent 8 }}
  91. {{- end }}
  92. {{- if .Values.initContainers }}
  93. initContainers:
  94. {{- toYaml .Values.initContainers | nindent 8 }}
  95. {{- end }}
  96. {{- if .Values.image.pullSecrets }}
  97. imagePullSecrets:
  98. {{- range .Values.image.pullSecrets }}
  99. - name: {{ . }}
  100. {{- end }}
  101. {{- end }}
  102. containers:
  103. - name: emqx
  104. image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
  105. imagePullPolicy: {{ .Values.image.pullPolicy }}
  106. {{- if .Values.containerSecurityContext.enabled }}
  107. securityContext: {{- omit .Values.containerSecurityContext "enabled" | toYaml | nindent 12 }}
  108. {{- end }}
  109. ports:
  110. - name: mqtt
  111. containerPort: {{ splitList ":" ( .Values.emqxConfig.EMQX_LISTENERS__TCP__DEFAULT__BIND | default "1883" ) | last }}
  112. - name: mqttssl
  113. containerPort: {{ splitList ":" ( .Values.emqxConfig.EMQX_LISTENERS__SSL__DEFAULT__BIND | default "8883" ) | last }}
  114. - name: ws
  115. containerPort: {{ splitList ":" ( .Values.emqxConfig.EMQX_LISTENERS__WS__DEFAULT__BIND | default "8083" ) | last }}
  116. - name: wss
  117. containerPort: {{ splitList ":" ( .Values.emqxConfig.EMQX_LISTENERS__WSS__DEFAULT__BIND | default "8084" ) | last }}
  118. - name: dashboard
  119. containerPort: {{ splitList ":" ( .Values.emqxConfig.EMQX_DASHBOARD__LISTENERS__HTTP__BIND | default "18083" ) | last }}
  120. {{- if not (empty .Values.emqxConfig.EMQX_DASHBOARD__LISTENERS__HTTPS__BIND) }}
  121. - name: dashboardtls
  122. containerPort: {{ splitList ":" .Values.emqxConfig.EMQX_DASHBOARD__LISTENERS__HTTPS__BIND | last }}
  123. {{- end }}
  124. - name: ekka
  125. containerPort: 4370
  126. - name: genrpc-manual
  127. containerPort: 5369
  128. env:
  129. - name: POD_NAME
  130. valueFrom:
  131. fieldRef:
  132. apiVersion: v1
  133. fieldPath: metadata.name
  134. - name: EMQX_HOST
  135. value: $(POD_NAME).{{ include "emqx.fullname" . }}-headless.{{ .Release.Namespace }}.svc.cluster.local
  136. envFrom:
  137. - configMapRef:
  138. name: {{ include "emqx.fullname" . }}-env
  139. {{- if .Values.envFromSecret }}
  140. - secretRef:
  141. name: {{ .Values.envFromSecret }}
  142. {{- end }}
  143. resources:
  144. {{ toYaml .Values.resources | indent 12 }}
  145. volumeMounts:
  146. - name: emqx-data
  147. mountPath: "/opt/emqx/data"
  148. {{- if .Values.ssl.enabled }}
  149. - name: ssl-cert
  150. mountPath: /tmp/ssl
  151. readOnly: true
  152. {{- end}}
  153. {{ if .Values.emqxLicenseSecretName }}
  154. - name: emqx-license
  155. mountPath: "/opt/emqx/etc/emqx.lic"
  156. subPath: "emqx.lic"
  157. readOnly: true
  158. {{- end }}
  159. {{- if .Values.extraVolumeMounts }}
  160. {{- toYaml .Values.extraVolumeMounts | nindent 10 }}
  161. {{- end }}
  162. readinessProbe:
  163. httpGet:
  164. path: /status
  165. port: {{ splitList ":" ( .Values.emqxConfig.EMQX_DASHBOARD__LISTENERS__HTTP__BIND | default "18083" ) | last }}
  166. initialDelaySeconds: 10
  167. periodSeconds: 5
  168. failureThreshold: 30
  169. livenessProbe:
  170. httpGet:
  171. path: /status
  172. port: {{ splitList ":" ( .Values.emqxConfig.EMQX_DASHBOARD__LISTENERS__HTTP__BIND | default "18083" ) | last }}
  173. initialDelaySeconds: 60
  174. periodSeconds: 30
  175. failureThreshold: 10
  176. {{- with .Values.nodeSelector }}
  177. nodeSelector:
  178. {{- toYaml . | nindent 8 }}
  179. {{- end }}
  180. {{- with .Values.affinity }}
  181. affinity:
  182. {{- toYaml . | nindent 8 }}
  183. {{- end }}
  184. {{- with .Values.tolerations }}
  185. tolerations:
  186. {{- toYaml . | nindent 8 }}
  187. {{- end }}
  188. {{- with .Values.topologySpreadConstraints }}
  189. topologySpreadConstraints:
  190. {{- range . }}
  191. - maxSkew: {{ .maxSkew }}
  192. topologyKey: {{ .topologyKey }}
  193. whenUnsatisfiable: {{ .whenUnsatisfiable }}
  194. labelSelector:
  195. matchLabels:
  196. app.kubernetes.io/name: {{ include "emqx.name" $ }}
  197. app.kubernetes.io/instance: {{ $.Release.Name }}
  198. {{- if .minDomains }}
  199. minDomains: {{ .minDomains }}
  200. {{- end }}
  201. {{- if .matchLabelKeys }}
  202. matchLabelKeys:
  203. {{- range .matchLabelKeys }}
  204. - {{ . }}
  205. {{- end }}
  206. {{- end }}
  207. {{- if .nodeAffinityPolicy }}
  208. nodeAffinityPolicy: {{ .nodeAffinityPolicy }}
  209. {{- end }}
  210. {{- if .nodeTaintsPolicy }}
  211. nodeTaintsPolicy: {{ .nodeTaintsPolicy }}
  212. {{- end }}
  213. {{- end }}
  214. {{- end }}