{{- if .Values.nats.enabled }} {{- $name := include "hrbox.component" (dict "ctx" . "name" "nats") -}} --- apiVersion: apps/v1 kind: StatefulSet metadata: name: {{ $name }} labels: {{- include "hrbox.labels" (dict "ctx" . "name" "nats") | nindent 4 }} spec: selector: matchLabels: app.kubernetes.io/name: nats app.kubernetes.io/instance: {{ .Release.Name }} replicas: {{ .Values.nats.replicas }} serviceName: {{ $name }} template: metadata: labels: app.kubernetes.io/name: nats app.kubernetes.io/instance: {{ .Release.Name }} spec: volumes: - name: config-volume configMap: name: {{ printf "%s-config" $name }} - name: pid emptyDir: {} shareProcessNamespace: true terminationGracePeriodSeconds: {{ .Values.nats.terminationGracePeriodSeconds }} {{- include "hrbox.imagePullSecrets" . | nindent 6 }} containers: - name: nats image: {{ .Values.image.nats | quote }} imagePullPolicy: {{ .Values.image.pullPolicy }} ports: - containerPort: 4222 name: client - containerPort: 6222 name: cluster - containerPort: 8222 name: monitor - containerPort: 7777 name: metrics command: - "nats-server" - "--config" - "/etc/nats-config/nats.conf" env: - name: POD_NAME valueFrom: fieldRef: fieldPath: metadata.name - name: SERVER_NAME value: $(POD_NAME) - name: POD_NAMESPACE valueFrom: fieldRef: fieldPath: metadata.namespace - name: CLUSTER_ADVERTISE value: $(POD_NAME).{{ $name }}.$(POD_NAMESPACE).svc.{{ .Values.cluster.domain }} {{- include "hrbox.resources" (dict "ctx" . "component" "nats") | indent 10 }} volumeMounts: - name: config-volume mountPath: /etc/nats-config - name: pid mountPath: /var/run/nats {{- if .Values.nats.jetstream.fileStorage.enabled }} - name: {{ printf "%s-js-pvc" $name }} mountPath: {{ .Values.nats.jetstream.fileStorage.storageDirectory }} {{- end }} livenessProbe: httpGet: path: / port: 8222 initialDelaySeconds: 10 timeoutSeconds: 5 readinessProbe: httpGet: path: / port: 8222 initialDelaySeconds: 10 timeoutSeconds: 5 lifecycle: preStop: exec: command: - "/bin/sh" - "-c" - "nats-server -sl=ldm=/var/run/nats/nats.pid && /bin/sleep {{ .Values.nats.terminationGracePeriodSeconds }}" {{- if .Values.nats.reloader.enabled }} - name: reloader image: {{ .Values.image.natsConfigReloader | quote }} imagePullPolicy: {{ .Values.image.pullPolicy }} command: - "nats-server-config-reloader" - "-pid" - "/var/run/nats/nats.pid" - "-config" - "/etc/nats-config/nats.conf" volumeMounts: - name: config-volume mountPath: /etc/nats-config - name: pid mountPath: /var/run/nats {{- end }} {{- if .Values.nats.jetstream.fileStorage.enabled }} volumeClaimTemplates: - metadata: name: {{ printf "%s-js-pvc" $name }} spec: accessModes: - ReadWriteOnce resources: requests: storage: {{ .Values.nats.jetstream.fileStorage.size }} {{- with .Values.nats.jetstream.fileStorage.storageClassName }} storageClassName: {{ . | quote }} {{- end }} {{- end }} --- apiVersion: v1 kind: Service metadata: name: {{ $name }} labels: {{- include "hrbox.labels" (dict "ctx" . "name" "nats") | nindent 4 }} spec: clusterIP: None selector: app.kubernetes.io/name: nats app.kubernetes.io/instance: {{ .Release.Name }} ports: - name: client port: 4222 - name: cluster port: 6222 - name: monitor port: 8222 - name: metrics port: 7777 {{- end }}