--- apiVersion: apps/v1 kind: Deployment metadata: name: {{ .Values.name }}-backend namespace: {{ .Release.Namespace }} spec: selector: matchLabels: app: {{ .Values.name }} role: backend {{- if eq (int .Values.backend_max_replicas) 1 }} replicas: 1 {{- end }} template: metadata: labels: app: {{ .Values.name }} role: backend annotations: # force helm to update the deployment each time {{- if not .Values.frontend_only }} "helm.update": {{ randAlphaNum 5 | quote }} {{- end }} spec: {{- if .Values.main_node_type }} nodeSelector: nodeType: {{ .Values.main_node_type }} {{- end }} volumes: - name: config-volume configMap: name: shared-job-config items: - key: config.yaml path: config.yaml - name: ops-configs secret: secretName: ops-configs - name: ops-proxy-configs secret: secretName: ops-proxy-configs optional: true - name: app-templates configMap: name: app-templates - name: email-templates configMap: name: email-templates containers: - name: api image: {{ .Values.backend_image }} imagePullPolicy: {{ .Values.backend_pull_policy }} command: - gunicorn - btrixcloud.main:app_root - --bind - "0.0.0.0:8000" - --access-logfile - "-" - --workers - "{{ .Values.backend_workers | default 1 }}" - --worker-class - uvicorn.workers.UvicornWorker envFrom: - configMapRef: name: backend-env-config - secretRef: name: backend-auth - secretRef: name: mongo-auth env: - name: MOTOR_MAX_WORKERS value: "{{ .Values.backend_mongodb_workers | default 1 }}" - name: BTRIX_SUBS_APP_API_KEY valueFrom: secretKeyRef: name: btrix-subs-app-secret key: BTRIX_SUBS_APP_API_KEY optional: true - name: BTRIX_SUBS_APP_URL valueFrom: secretKeyRef: name: btrix-subs-app-secret key: BTRIX_SUBS_APP_URL optional: true volumeMounts: - name: ops-configs mountPath: /ops-configs/ - name: ops-proxy-configs mountPath: /ops-proxy-configs/ - name: app-templates mountPath: /app/btrixcloud/templates/ - name: email-templates mountPath: /app/btrixcloud/email-templates/ resources: limits: memory: {{ .Values.backend_memory }} requests: cpu: {{ .Values.backend_cpu }} memory: {{ .Values.backend_memory }} startupProbe: httpGet: path: /healthzStartup port: 8000 periodSeconds: 10 failureThreshold: 8640 successThreshold: 1 readinessProbe: httpGet: path: /healthz port: 8000 initialDelaySeconds: 5 periodSeconds: 30 failureThreshold: 5 successThreshold: 1 livenessProbe: httpGet: path: /healthz port: 8000 initialDelaySeconds: 5 periodSeconds: 30 failureThreshold: 15 successThreshold: 1 - name: op image: {{ .Values.backend_image }} imagePullPolicy: {{ .Values.backend_pull_policy }} command: - gunicorn - btrixcloud.main_op:app_root - --bind - "0.0.0.0:{{ .Values.opPort }}" - --access-logfile - "-" - --workers - "{{ .Values.backend_workers | default 1 }}" - --worker-class - uvicorn.workers.UvicornWorker envFrom: - configMapRef: name: backend-env-config - secretRef: name: backend-auth - secretRef: name: mongo-auth env: - name: MOTOR_MAX_WORKERS value: "{{ .Values.backend_mongodb_workers | default 1 }}" volumeMounts: - name: config-volume mountPath: /config - name: ops-configs mountPath: /ops-configs/ - name: ops-proxy-configs mountPath: /ops-proxy-configs/ - name: app-templates mountPath: /app/btrixcloud/templates/ - name: email-templates mountPath: /app/btrixcloud/email-templates/ resources: limits: memory: {{ .Values.backend_memory }} requests: cpu: {{ .Values.backend_cpu }} memory: {{ .Values.backend_memory }} startupProbe: httpGet: path: /healthz port: {{ .Values.opPort }} initialDelaySeconds: 5 periodSeconds: 5 failureThreshold: 5 successThreshold: 1 readinessProbe: httpGet: path: /healthz port: {{ .Values.opPort }} initialDelaySeconds: 5 periodSeconds: 30 failureThreshold: 5 successThreshold: 1 livenessProbe: httpGet: path: /healthz port: {{ .Values.opPort }} initialDelaySeconds: 5 periodSeconds: 30 failureThreshold: 15 successThreshold: 1 --- apiVersion: v1 kind: Service metadata: namespace: {{ .Release.Namespace }} name: {{ .Values.name }}-backend labels: app: {{ .Values.name }} role: backend {{- if .Values.service }} {{- if .Values.service.annotations }} annotations: {{- range $key, $val := .Values.service.annotations }} {{ $key }}: {{ $val | quote }} {{- end }} {{- end }} {{- end }} spec: selector: app: {{ .Values.name }} role: backend ports: - protocol: TCP port: 8000 name: api - protocol: TCP port: {{ .Values.opPort }} name: operator {{- if gt (int .Values.backend_max_replicas) 1 }} --- apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: backend-autoscaler spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: {{ .Values.name }}-backend minReplicas: 1 maxReplicas: {{ .Values.backend_max_replicas }} metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: {{ .Values.backend_avg_cpu_threshold }} - type: Resource resource: name: memory target: type: Utilization averageUtilization: {{ .Values.backend_avg_memory_threshold }} {{- end }}