dragonchain/dragonchain

View on GitHub
helm/dragonchain-k8s/templates/deployment.yaml

Summary

Maintainability
Test Coverage
# Webserver Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ .Release.Name }}-webserver
  labels:
    app.kubernetes.io/name: {{ .Release.Name }}-webserver
    helm.sh/chart: {{ include "dragonchain-k8s.chart" . }}
    app.kubernetes.io/instance: {{ .Release.Name }}
    app.kubernetes.io/managed-by: {{ .Release.Service }}
    app.kubernetes.io/part-of: dragonchain
    app.kubernetes.io/component: webserver
    app.kubernetes.io/version: {{ .Values.dragonchain.image.version }}
    stage: {{ .Values.global.environment.STAGE }}
    coreImage: 'true'
    dragonchainId: {{ .Values.global.environment.INTERNAL_ID }}
spec:
  replicas: {{ .Values.webserver.replicaCount }}
  selector:
    matchLabels:
      app.kubernetes.io/name: {{ .Release.Name }}-webserver
      dragonchainId: {{ .Values.global.environment.INTERNAL_ID }}
  strategy:
      type: Recreate
  template:
    metadata:
      name: {{ .Release.Name }}-webserver
      labels:
        app.kubernetes.io/name: {{ .Release.Name }}-webserver
        helm.sh/chart: {{ include "dragonchain-k8s.chart" . }}
        app.kubernetes.io/instance: {{ .Release.Name }}
        app.kubernetes.io/managed-by: {{ .Release.Service }}
        app.kubernetes.io/part-of: dragonchain
        app.kubernetes.io/component: webserver
        app.kubernetes.io/version: {{ .Values.dragonchain.image.version }}
        stage: {{ .Values.global.environment.STAGE }}
        coreImage: 'true'
        dragonchainId: {{ .Values.global.environment.INTERNAL_ID }}
    spec:
      enableServiceLinks: false
      securityContext:
        runAsNonRoot: true
        runAsUser: {{ .Values.runContainerUser }}
        fsGroup: {{ .Values.runContainerGroup }}
{{- if not .Values.isMinikube }}
        sysctls:
        - name: net.core.somaxconn
          value: "4096"
{{- end }}
      containers:
        - name: {{ .Release.Name }}-webserver
          image: "{{ .Values.dragonchain.image.value }}:{{ .Values.dragonchain.image.version }}"
          command: ["sh"]
          args: ["entrypoints/webserver.sh"]
          imagePullPolicy: {{ .Values.dragonchain.image.pullPolicy }}
{{ if .Values.webserverLiveliness }}
          livenessProbe:
            httpGet:
              path: /health
              port: http
{{- if .Values.global.environment.TLS_SUPPORT }}
              scheme: HTTPS
{{- end }}
            initialDelaySeconds: 10
            timeoutSeconds: 2
            periodSeconds: 15
{{ end }}
          readinessProbe:
            httpGet:
              path: /health
              port: http
{{- if .Values.global.environment.TLS_SUPPORT }}
              scheme: HTTPS
{{- end }}
            initialDelaySeconds: 10
            timeoutSeconds: 2
            periodSeconds: 15
          resources:
{{ toYaml .Values.webserver.resources | indent 12 }}
          ports:
            - name: http
              containerPort: 8080
              protocol: TCP
          envFrom:
            - configMapRef:
                name: "{{ .Release.Name }}-configmap"
          env:
            - name: SERVICE
              value: webserver
          volumeMounts:
            - name: secrets
              mountPath: {{ .Values.secret.mountPath }}
{{- if .Values.global.environment.TLS_SUPPORT }}
            - name: certificate
              mountPath: /etc/cert
              readOnly: true
{{- end }}
{{- if .Values.faas.mountFaasSecret }}
            - name: openfaas
              mountPath: /etc/openfaas-secret
              readOnly: true
{{- end }}
{{- if .Values.dragonchain.storage }}
            - name: storage
              mountPath: "{{ .Values.global.environment.STORAGE_LOCATION }}"
{{- end }}
      volumes:
        - name: secrets
          secret:
            secretName: "d-{{ .Values.global.environment.INTERNAL_ID }}-secrets"
{{- if .Values.faas.mountFaasSecret }}
        - name: openfaas
          secret:
            secretName: openfaas-auth
{{- end }}
{{- if .Values.global.environment.TLS_SUPPORT }}
        - name: certificate
          secret:
            secretName: "d-{{ .Values.global.environment.INTERNAL_ID }}-cert"
{{- end }}
{{- if .Values.dragonchain.storage }}
        - name: storage
          persistentVolumeClaim:
            claimName: "{{ .Release.Name }}-main-storage"
{{- end }}

---
# Transaction Processor Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ .Release.Name }}-tx-processor
  labels:
    app.kubernetes.io/name: {{ .Release.Name }}-tx-processor
    helm.sh/chart: {{ include "dragonchain-k8s.chart" . }}
    app.kubernetes.io/instance: {{ .Release.Name }}
    app.kubernetes.io/managed-by: {{ .Release.Service }}
    app.kubernetes.io/part-of: dragonchain
    app.kubernetes.io/component: tx-processor
    app.kubernetes.io/version: {{ .Values.dragonchain.image.version }}
    stage: {{ .Values.global.environment.STAGE }}
    coreImage: 'true'
    dragonchainId: {{ .Values.global.environment.INTERNAL_ID }}
spec:
  replicas: {{ .Values.transactionProcessor.replicaCount }}
  selector:
    matchLabels:
      app.kubernetes.io/name: {{ .Release.Name }}-tx-processor
      dragonchainId: {{ .Values.global.environment.INTERNAL_ID }}
  strategy:
      type: Recreate
  template:
    metadata:
      name: {{ .Release.Name }}-tx-processor
      labels:
        app.kubernetes.io/name: {{ .Release.Name }}-tx-processor
        helm.sh/chart: {{ include "dragonchain-k8s.chart" . }}
        app.kubernetes.io/instance: {{ .Release.Name }}
        app.kubernetes.io/managed-by: {{ .Release.Service }}
        app.kubernetes.io/part-of: dragonchain
        app.kubernetes.io/component: tx-processor
        app.kubernetes.io/version: {{ .Values.dragonchain.image.version }}
        stage: {{ .Values.global.environment.STAGE }}
        coreImage: 'true'
        dragonchainId: {{ .Values.global.environment.INTERNAL_ID }}
    spec:
      enableServiceLinks: false
      securityContext:
        runAsNonRoot: true
        runAsUser: {{ .Values.runContainerUser }}
        fsGroup: {{ .Values.runContainerGroup }}
      containers:
        - name: {{ .Release.Name }}-tx-processor
          image: "{{ .Values.dragonchain.image.value }}:{{ .Values.dragonchain.image.version }}"
          command: ["sh"]
          args: ["entrypoints/transaction_processor.sh"]
          imagePullPolicy: {{ .Values.dragonchain.image.pullPolicy }}
          resources:
{{ toYaml .Values.transactionProcessor.resources | indent 12 }}
          envFrom:
            - configMapRef:
                name: "{{ .Release.Name }}-configmap"
          env:
            - name: SERVICE
              value: txprocessor
          volumeMounts:
            - name: secrets
              mountPath: {{ .Values.secret.mountPath }}
{{- if .Values.dragonchain.storage }}
            - name: storage
              mountPath: "{{ .Values.global.environment.STORAGE_LOCATION }}"
{{- end }}
      volumes:
        - name: secrets
          secret:
            secretName: "d-{{ .Values.global.environment.INTERNAL_ID }}-secrets"
{{- if .Values.dragonchain.storage }}
        - name: storage
          persistentVolumeClaim:
            claimName: "{{ .Release.Name }}-main-storage"
{{- end }}

---
{{- if eq .Values.global.environment.LEVEL "1" }}
# Contract Invoker Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ .Release.Name }}-contract-invoker
  labels:
    app.kubernetes.io/name: {{ .Release.Name }}-contract-invoker
    helm.sh/chart: {{ include "dragonchain-k8s.chart" . }}
    app.kubernetes.io/instance: {{ .Release.Name }}
    app.kubernetes.io/managed-by: {{ .Release.Service }}
    app.kubernetes.io/part-of: dragonchain
    app.kubernetes.io/component: contract-invoker
    app.kubernetes.io/version: {{ .Values.dragonchain.image.version }}
    stage: {{ .Values.global.environment.STAGE }}
    coreImage: 'true'
    dragonchainId: {{ .Values.global.environment.INTERNAL_ID }}
spec:
  replicas: {{ .Values.contractInvoker.replicaCount }}
  selector:
    matchLabels:
      app.kubernetes.io/name: {{ .Release.Name }}-contract-invoker
      dragonchainId: {{ .Values.global.environment.INTERNAL_ID }}
  strategy:
      type: Recreate
  template:
    metadata:
      name: {{ .Release.Name }}-contract-invoker
      labels:
        app.kubernetes.io/name: {{ .Release.Name }}-contract-invoker
        helm.sh/chart: {{ include "dragonchain-k8s.chart" . }}
        app.kubernetes.io/instance: {{ .Release.Name }}
        app.kubernetes.io/managed-by: {{ .Release.Service }}
        app.kubernetes.io/part-of: dragonchain
        app.kubernetes.io/component: contract-invoker
        app.kubernetes.io/version: {{ .Values.dragonchain.image.version }}
        stage: {{ .Values.global.environment.STAGE }}
        coreImage: 'true'
        dragonchainId: {{ .Values.global.environment.INTERNAL_ID }}
    spec:
      enableServiceLinks: false
      securityContext:
        runAsNonRoot: true
        runAsUser: {{ .Values.runContainerUser }}
        fsGroup: {{ .Values.runContainerGroup }}
      containers:
        - name: {{ .Release.Name }}-contract-invoker
          image: "{{ .Values.dragonchain.image.value }}:{{ .Values.dragonchain.image.version }}"
          command: ["sh"]
          args: ["entrypoints/contract_invoker.sh"]
          imagePullPolicy: {{ .Values.dragonchain.image.pullPolicy }}
          resources:
{{ toYaml .Values.contractInvoker.resources | indent 12 }}
          envFrom:
            - configMapRef:
                name: "{{ .Release.Name }}-configmap"
          env:
            - name: SERVICE
              value: contractInvoker
          volumeMounts:
            - name: secrets
              mountPath: {{ .Values.secret.mountPath }}
{{- if .Values.dragonchain.storage }}
            - name: storage
              mountPath: "{{ .Values.global.environment.STORAGE_LOCATION }}"
{{- end }}
      volumes:
        - name: secrets
          secret:
            secretName: "d-{{ .Values.global.environment.INTERNAL_ID }}-secrets"
{{- if .Values.dragonchain.storage }}
        - name: storage
          persistentVolumeClaim:
            claimName: "{{ .Release.Name }}-main-storage"
{{- end }}
{{- end }}
---
{{- if and (eq .Values.global.environment.LEVEL "1") }}
# Job Processor Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ .Release.Name }}-job-processor
  labels:
    app.kubernetes.io/name: {{ .Release.Name }}-job-processor
    helm.sh/chart: {{ include "dragonchain-k8s.chart" . }}
    app.kubernetes.io/instance: {{ .Release.Name }}
    app.kubernetes.io/managed-by: {{ .Release.Service }}
    app.kubernetes.io/part-of: dragonchain
    app.kubernetes.io/component: job-processor
    app.kubernetes.io/version: {{ .Values.dragonchain.image.version }}
    stage: {{ .Values.global.environment.STAGE }}
    coreImage: 'true'
    dragonchainId: {{ .Values.global.environment.INTERNAL_ID }}
spec:
  replicas: {{ .Values.jobProcessor.replicaCount }}
  selector:
    matchLabels:
      app.kubernetes.io/name: {{ .Release.Name }}-job-processor
      dragonchainId: {{ .Values.global.environment.INTERNAL_ID }}
  strategy:
      type: Recreate
  template:
    metadata:
      name: {{ .Release.Name }}-job-processor
      labels:
        app.kubernetes.io/name: {{ .Release.Name }}-job-processor
        helm.sh/chart: {{ include "dragonchain-k8s.chart" . }}
        app.kubernetes.io/instance: {{ .Release.Name }}
        app.kubernetes.io/managed-by: {{ .Release.Service }}
        app.kubernetes.io/part-of: dragonchain
        app.kubernetes.io/component: job-processor
        app.kubernetes.io/version: {{ .Values.dragonchain.image.version }}
        stage: {{ .Values.global.environment.STAGE }}
        coreImage: 'true'
        dragonchainId: {{ .Values.global.environment.INTERNAL_ID }}
    spec:
      serviceAccountName: openfaas-builder
      automountServiceAccountToken: true
      enableServiceLinks: false
      securityContext:
        runAsNonRoot: true
        runAsUser: {{ .Values.runContainerUser }}
        fsGroup: {{ .Values.runContainerGroup }}
      containers:
        - name: {{ .Release.Name }}-job-processor
          image: "{{ .Values.dragonchain.image.value }}:{{ .Values.dragonchain.image.version }}"
          command: ["sh"]
          args: ["entrypoints/job_processor.sh"]
          imagePullPolicy: {{ .Values.dragonchain.image.pullPolicy }}
          resources:
{{ toYaml .Values.jobProcessor.resources | indent 12 }}
          envFrom:
            - configMapRef:
                name: "{{ .Release.Name }}-configmap"
          env:
            - name: SERVICE
              value: jobprocessor
          volumeMounts:
            - name: secrets
              mountPath: {{ .Values.secret.mountPath }}
{{- if .Values.dragonchain.storage }}
            - name: storage
              mountPath: "{{ .Values.global.environment.STORAGE_LOCATION }}"
{{- end }}
      volumes:
        - name: secrets
          secret:
            secretName: "d-{{ .Values.global.environment.INTERNAL_ID }}-secrets"
{{- if .Values.dragonchain.storage }}
        - name: storage
          persistentVolumeClaim:
            claimName: "{{ .Release.Name }}-main-storage"
{{- end }}
{{- end }}
---
{{- if and (eq .Values.global.environment.LEVEL "1") (eq .Values.global.environment.BROADCAST "true") }}
# Broadcast Processor Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ .Release.Name }}-bc-processor
  labels:
    app.kubernetes.io/name: {{ .Release.Name }}-bc-processor
    helm.sh/chart: {{ include "dragonchain-k8s.chart" . }}
    app.kubernetes.io/instance: {{ .Release.Name }}
    app.kubernetes.io/managed-by: {{ .Release.Service }}
    app.kubernetes.io/part-of: dragonchain
    app.kubernetes.io/component: bc-processor
    app.kubernetes.io/version: {{ .Values.dragonchain.image.version }}
    stage: {{ .Values.global.environment.STAGE }}
    coreImage: 'true'
    dragonchainId: {{ .Values.global.environment.INTERNAL_ID }}
spec:
  replicas: {{ .Values.broadcastProcessor.replicaCount }}
  selector:
    matchLabels:
      app.kubernetes.io/name: {{ .Release.Name }}-bc-processor
      dragonchainId: {{ .Values.global.environment.INTERNAL_ID }}
  strategy:
      type: Recreate
  template:
    metadata:
      name: {{ .Release.Name }}-bc-processor
      labels:
        app.kubernetes.io/name: {{ .Release.Name }}-bc-processor
        helm.sh/chart: {{ include "dragonchain-k8s.chart" . }}
        app.kubernetes.io/instance: {{ .Release.Name }}
        app.kubernetes.io/managed-by: {{ .Release.Service }}
        app.kubernetes.io/part-of: dragonchain
        app.kubernetes.io/component: bc-processor
        app.kubernetes.io/version: {{ .Values.dragonchain.image.version }}
        stage: {{ .Values.global.environment.STAGE }}
        coreImage: 'true'
        dragonchainId: {{ .Values.global.environment.INTERNAL_ID }}
    spec:
      enableServiceLinks: false
      securityContext:
        runAsNonRoot: true
        runAsUser: {{ .Values.runContainerUser }}
        fsGroup: {{ .Values.runContainerGroup }}
      containers:
        - name: {{ .Release.Name }}-bc-processor
          image: "{{ .Values.dragonchain.image.value }}:{{ .Values.dragonchain.image.version }}"
          command: ["sh"]
          args: ["entrypoints/broadcast_processor.sh"]
          imagePullPolicy: {{ .Values.dragonchain.image.pullPolicy }}
          resources:
{{ toYaml .Values.broadcastProcessor.resources | indent 12 }}
          envFrom:
            - configMapRef:
                name: "{{ .Release.Name }}-configmap"
          env:
            - name: SERVICE
              value: bcprocessor
          volumeMounts:
            - name: secrets
              mountPath: {{ .Values.secret.mountPath }}
{{- if .Values.dragonchain.storage }}
            - name: storage
              mountPath: "{{ .Values.global.environment.STORAGE_LOCATION }}"
{{- end }}
      volumes:
        - name: secrets
          secret:
            secretName: "d-{{ .Values.global.environment.INTERNAL_ID }}-secrets"
{{- if .Values.dragonchain.storage }}
        - name: storage
          persistentVolumeClaim:
            claimName: "{{ .Release.Name }}-main-storage"
{{- end }}
{{- end }}
---
{{- if eq .Values.global.environment.LEVEL "1" }}
# Scheduler Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ .Release.Name }}-scheduler
  labels:
    app.kubernetes.io/name: {{ .Release.Name }}-scheduler
    helm.sh/chart: {{ include "dragonchain-k8s.chart" . }}
    app.kubernetes.io/instance: {{ .Release.Name }}
    app.kubernetes.io/managed-by: {{ .Release.Service }}
    app.kubernetes.io/part-of: dragonchain
    app.kubernetes.io/component: scheduler
    app.kubernetes.io/version: {{ .Values.dragonchain.image.version }}
    stage: {{ .Values.global.environment.STAGE }}
    coreImage: 'true'
    dragonchainId: {{ .Values.global.environment.INTERNAL_ID }}
spec:
  replicas: {{ .Values.scheduler.replicaCount }}
  selector:
    matchLabels:
      app.kubernetes.io/name: {{ .Release.Name }}-scheduler
      dragonchainId: {{ .Values.global.environment.INTERNAL_ID }}
  strategy:
      type: Recreate
  template:
    metadata:
      name: {{ .Release.Name }}-scheduler
      labels:
        app.kubernetes.io/name: {{ .Release.Name }}-scheduler
        helm.sh/chart: {{ include "dragonchain-k8s.chart" . }}
        app.kubernetes.io/instance: {{ .Release.Name }}
        app.kubernetes.io/managed-by: {{ .Release.Service }}
        app.kubernetes.io/part-of: dragonchain
        app.kubernetes.io/component: scheduler
        app.kubernetes.io/version: {{ .Values.dragonchain.image.version }}
        stage: {{ .Values.global.environment.STAGE }}
        coreImage: 'true'
        dragonchainId: {{ .Values.global.environment.INTERNAL_ID }}
    spec:
      enableServiceLinks: false
      securityContext:
        runAsNonRoot: true
        runAsUser: {{ .Values.runContainerUser }}
        fsGroup: {{ .Values.runContainerGroup }}
      containers:
        - name: {{ .Release.Name }}-scheduler
          image: "{{ .Values.dragonchain.image.value }}:{{ .Values.dragonchain.image.version }}"
          command: ["sh"]
          args: ["entrypoints/scheduler.sh"]
          imagePullPolicy: {{ .Values.dragonchain.image.pullPolicy }}
          resources:
{{ toYaml .Values.scheduler.resources | indent 12 }}
          envFrom:
            - configMapRef:
                name: "{{ .Release.Name }}-configmap"
          env:
            - name: SERVICE
              value: scheduler
          volumeMounts:
            - name: secrets
              mountPath: {{ .Values.secret.mountPath }}
{{- if .Values.dragonchain.storage }}
            - name: storage
              mountPath: "{{ .Values.global.environment.STORAGE_LOCATION }}"
{{- end }}
      volumes:
        - name: secrets
          secret:
            secretName: "d-{{ .Values.global.environment.INTERNAL_ID }}-secrets"
{{- if .Values.dragonchain.storage }}
        - name: storage
          persistentVolumeClaim:
            claimName: "{{ .Release.Name }}-main-storage"
{{- end }}
{{- end }}
---
# Cache Redis
apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ .Release.Name }}-cacheredis
  labels:
    app.kubernetes.io/name: {{ .Release.Name }}-cacheredis
    helm.sh/chart: {{ include "dragonchain-k8s.chart" . }}
    app.kubernetes.io/instance: {{ .Release.Name }}
    app.kubernetes.io/managed-by: {{ .Release.Service }}
    app.kubernetes.io/part-of: dragonchain
    app.kubernetes.io/component: cacheredis
    dragonchainId: {{ .Values.global.environment.INTERNAL_ID }}
spec:
  replicas: 1
  selector:
    matchLabels:
      app.kubernetes.io/name: {{ .Release.Name }}-cacheredis
      dragonchainId: {{ .Values.global.environment.INTERNAL_ID }}
  strategy:
      type: Recreate
  template:
    metadata:
      name: {{ .Release.Name }}-cacheredis
      labels:
        app.kubernetes.io/name: {{ .Release.Name }}-cacheredis
        helm.sh/chart: {{ include "dragonchain-k8s.chart" . }}
        app.kubernetes.io/instance: {{ .Release.Name }}
        app.kubernetes.io/managed-by: {{ .Release.Service }}
        app.kubernetes.io/part-of: dragonchain
        app.kubernetes.io/component: cacheredis
        stage: {{ .Values.global.environment.STAGE }}
        dragonchainId: {{ .Values.global.environment.INTERNAL_ID }}
        dragonchainRedis: {{ .Values.global.environment.INTERNAL_ID }}
    spec:
      enableServiceLinks: false
      securityContext:
        runAsNonRoot: true
        runAsUser: {{ .Values.runContainerUser }}
        fsGroup: {{ .Values.runContainerGroup }}
{{- if not .Values.isMinikube }}
        sysctls:
        - name: net.core.somaxconn
          value: "1024"
{{- end }}
      containers:
        - name: {{ .Release.Name }}-cacheredis
          image: "{{ .Values.redis.image.repository }}:{{ .Values.redis.image.tag }}"
          imagePullPolicy: {{ .Values.dragonchain.image.pullPolicy }}
          command: ["redis-server"]
          args: ["/usr/local/etc/redis/redis.conf"]
          ports:
            - name: http
              containerPort: 6379
          resources:
{{ toYaml .Values.cacheredis.resources | indent 12 }}
          volumeMounts:
            - mountPath: /usr/local/etc/redis
              name: config
      volumes:
        - name: config
          configMap:
            name: {{ .Release.Name }}-cr-configmap
            items:
              - key: redis-config
                path: redis.conf

---
# Persistent Redis
apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ .Release.Name }}-persistent-redis
  labels:
    app.kubernetes.io/name: {{ .Release.Name }}-persistent-redis
    helm.sh/chart: {{ include "dragonchain-k8s.chart" . }}
    app.kubernetes.io/instance: {{ .Release.Name }}
    app.kubernetes.io/managed-by: {{ .Release.Service }}
    app.kubernetes.io/part-of: dragonchain
    app.kubernetes.io/component: persistent-redis
    dragonchainId: {{ .Values.global.environment.INTERNAL_ID }}
spec:
  replicas: 1
  selector:
    matchLabels:
      app.kubernetes.io/name: {{ .Release.Name }}-persistent-redis
      dragonchainId: {{ .Values.global.environment.INTERNAL_ID }}
  strategy:
      type: Recreate
  template:
    metadata:
      name: {{ .Release.Name }}-persistent-redis
      labels:
        app.kubernetes.io/name: {{ .Release.Name }}-persistent-redis
        helm.sh/chart: {{ include "dragonchain-k8s.chart" . }}
        app.kubernetes.io/instance: {{ .Release.Name }}
        app.kubernetes.io/managed-by: {{ .Release.Service }}
        app.kubernetes.io/part-of: dragonchain
        app.kubernetes.io/component: persistent-redis
        stage: {{ .Values.global.environment.STAGE }}
        dragonchainId: {{ .Values.global.environment.INTERNAL_ID }}
        dragonchainRedis: {{ .Values.global.environment.INTERNAL_ID }}
    spec:
      enableServiceLinks: false
      securityContext:
        runAsNonRoot: true
        runAsUser: {{ .Values.runContainerUser }}
        fsGroup: {{ .Values.runContainerGroup }}
{{- if not .Values.isMinikube }}
        sysctls:
        - name: net.core.somaxconn
          value: "1024"
{{- end }}
      containers:
        - name: {{ .Release.Name }}-persistent-redis
          image: "{{ .Values.redis.image.repository }}:{{ .Values.redis.image.tag }}"
          imagePullPolicy: {{ .Values.dragonchain.image.pullPolicy }}
          command: ["redis-server"]
          args: ["/usr/local/etc/redis/redis.conf"]
          ports:
            - name: http
              containerPort: 6379
          resources:
{{ toYaml .Values.persistentredis.resources | indent 12 }}
          volumeMounts:
            - mountPath: /usr/local/etc/redis
              name: config
            - mountPath: /data
              name: storage
      volumes:
        - name: config
          configMap:
            name: {{ .Release.Name }}-pr-configmap
            items:
              - key: redis-config
                path: redis.conf
        - name: storage
          persistentVolumeClaim:
            claimName: {{ .Release.Name }}-redis-volume

---
{{- if not (and (eq .Values.global.environment.USE_REDISEARCH "false") (not (eq .Values.global.environment.LEVEL "1"))) }}
# Redisearch
apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ .Release.Name }}-redisearch
  labels:
    app.kubernetes.io/name: {{ .Release.Name }}-redisearch
    helm.sh/chart: {{ include "dragonchain-k8s.chart" . }}
    app.kubernetes.io/instance: {{ .Release.Name }}
    app.kubernetes.io/managed-by: {{ .Release.Service }}
    app.kubernetes.io/part-of: dragonchain
    app.kubernetes.io/component: redisearch
    dragonchainId: {{ .Values.global.environment.INTERNAL_ID }}
spec:
  replicas: 1
  selector:
    matchLabels:
      app.kubernetes.io/name: {{ .Release.Name }}-redisearch
      dragonchainId: {{ .Values.global.environment.INTERNAL_ID }}
  strategy:
      type: Recreate
  template:
    metadata:
      name: {{ .Release.Name }}-redisearch
      labels:
        app.kubernetes.io/name: {{ .Release.Name }}-redisearch
        helm.sh/chart: {{ include "dragonchain-k8s.chart" . }}
        app.kubernetes.io/instance: {{ .Release.Name }}
        app.kubernetes.io/managed-by: {{ .Release.Service }}
        app.kubernetes.io/part-of: dragonchain
        app.kubernetes.io/component: redisearch
        stage: {{ .Values.global.environment.STAGE }}
        dragonchainId: {{ .Values.global.environment.INTERNAL_ID }}
        dragonchainRedis: {{ .Values.global.environment.INTERNAL_ID }}
    spec:
      enableServiceLinks: false
      securityContext:
        runAsNonRoot: true
        runAsUser: {{ .Values.runContainerUser }}
        fsGroup: {{ .Values.runContainerGroup }}
{{- if not .Values.isMinikube }}
        sysctls:
        - name: net.core.somaxconn
          value: "1024"
{{- end }}
      containers:
        - name: {{ .Release.Name }}-redisearch
          image: "{{ .Values.redisearch.image.repository }}:{{ .Values.redisearch.image.tag }}"
          imagePullPolicy: {{ .Values.dragonchain.image.pullPolicy }}
          command: ["redis-server"]
          args: ["/usr/local/etc/redis/redis.conf"]
          ports:
            - name: http
              containerPort: 6379
          resources:
{{ toYaml .Values.redisearch.resources | indent 12 }}
          volumeMounts:
            - mountPath: /usr/local/etc/redis
              name: config
            - mountPath: /data
              name: storage
      volumes:
        - name: config
          configMap:
            name: {{ .Release.Name }}-rs-configmap
            items:
              - key: redis-config
                path: redis.conf
        - name: storage
          persistentVolumeClaim:
            claimName: {{ .Release.Name }}-redisearch-volume
{{- end }}