--- apiVersion: apps/v1 kind: StatefulSet metadata: name: {{ .Chart.Name }}-nats labels: app.kubernetes.io/name: nats app.kubernetes.io/instance: {{ .Release.Name }} spec: selector: matchLabels: app.kubernetes.io/name: nats app.kubernetes.io/instance: {{ .Release.Name }} replicas: {{ .Values.nats.replicas }} serviceName: {{ .Chart.Name }}-nats template: metadata: labels: app.kubernetes.io/name: nats app.kubernetes.io/instance: {{ .Release.Name }} spec: volumes: - name: config-volume configMap: name: {{ .Chart.Name }}-nats-config - name: pid emptyDir: {} shareProcessNamespace: true terminationGracePeriodSeconds: {{ .Values.nats.terminationGracePeriodSeconds }} imagePullSecrets: - name: regsecret containers: - name: nats image: {{ .Values.nats.image }} imagePullPolicy: IfNotPresent 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).{{ .Chart.Name }}-nats.$(POD_NAMESPACE).svc.cluster.local volumeMounts: - name: config-volume mountPath: /etc/nats-config - name: pid mountPath: /var/run/nats {{- if .Values.nats.jetstream.fileStorage.enabled }} - name: {{ .Chart.Name }}-nats-js-pvc 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 120" {{- if .Values.nats.reloader.enabled }} - name: reloader image: natsio/nats-server-config-reloader:0.6.2 imagePullPolicy: IfNotPresent 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: {{ .Chart.Name }}-nats-js-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: {{ .Values.nats.jetstream.fileStorage.size }} {{- if .Values.nats.jetstream.fileStorage.storageClassName }} storageClassName: {{ .Values.nats.jetstream.fileStorage.storageClassName }} {{- end }} {{- end }} --- apiVersion: v1 kind: Service metadata: name: {{ .Chart.Name }}-nats labels: app.kubernetes.io/name: nats app.kubernetes.io/instance: {{ .Release.Name }} spec: selector: app.kubernetes.io/name: nats app.kubernetes.io/instance: {{ .Release.Name }} clusterIP: None ports: - name: client port: 4222 - name: cluster port: 6222 - name: monitor port: 8222 - name: metrics port: 7777