Supports horizontal pod autoscaling (hpa) for backend and frontend pods: - use cpu and memory averages - adjust base memory + cpu for backend - threshold set to 80% cpu and 95% memory utilization by default (configurable in values.yaml) - instead of backend and frontend replicas, set max replicas in values.yaml - only enable hpa if backend_max_replicas or frontend_max_replicas is >1, default to 1 for now
		
			
				
	
	
		
			142 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
			
		
		
	
	
			142 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
---
 | 
						|
apiVersion: apps/v1
 | 
						|
kind: Deployment
 | 
						|
metadata:
 | 
						|
  name: {{ .Values.name }}-frontend
 | 
						|
  namespace: {{ .Release.Namespace }}
 | 
						|
 | 
						|
spec:
 | 
						|
  selector:
 | 
						|
    matchLabels:
 | 
						|
      app: {{ .Values.name }}
 | 
						|
      role: frontend
 | 
						|
  {{- if eq (int .Values.frontend_max_replicas) 1 }}
 | 
						|
  replicas: 1
 | 
						|
  {{- end }}
 | 
						|
  template:
 | 
						|
    metadata:
 | 
						|
      labels:
 | 
						|
        app: {{ .Values.name }}
 | 
						|
        role: frontend
 | 
						|
 | 
						|
      annotations:
 | 
						|
        # force helm to update the deployment each time
 | 
						|
        {{- if not .Values.backend_only }}
 | 
						|
        "helm.update": {{ randAlphaNum 5 | quote }}
 | 
						|
        {{- end }}
 | 
						|
 | 
						|
 | 
						|
    spec:
 | 
						|
      {{- if .Values.main_node_type }}
 | 
						|
      nodeSelector:
 | 
						|
        nodeType: {{ .Values.main_node_type }}
 | 
						|
      {{- end }}
 | 
						|
 | 
						|
      containers:
 | 
						|
        - name: nginx
 | 
						|
          image: {{ .Values.frontend_image }}
 | 
						|
          imagePullPolicy: {{ .Values.frontend_pull_policy }}
 | 
						|
          env:
 | 
						|
            - name: BACKEND_HOST
 | 
						|
              value: {{ .Values.name }}-backend
 | 
						|
 | 
						|
            - name: CRAWLER_FQDN_SUFFIX
 | 
						|
              value: ".{{ .Values.crawler_namespace }}.svc.cluster.local"
 | 
						|
 | 
						|
            - name: NGINX_ENTRYPOINT_WORKER_PROCESSES_AUTOTUNE
 | 
						|
              value: "1"
 | 
						|
 | 
						|
            - name: RWP_BASE_URL
 | 
						|
              value: {{ .Values.rwp_base_url }}
 | 
						|
 | 
						|
            {{- if .Values.minio_local }}
 | 
						|
            - name: LOCAL_MINIO_HOST
 | 
						|
              value: "{{ .Values.minio_host }}"
 | 
						|
 | 
						|
            - name: LOCAL_BUCKET
 | 
						|
              value: "{{ .Values.minio_local_bucket_name }}"
 | 
						|
            {{- end }}
 | 
						|
 | 
						|
          resources:
 | 
						|
            limits:
 | 
						|
              memory: {{ .Values.frontend_memory }}
 | 
						|
 | 
						|
            requests:
 | 
						|
              cpu: {{ .Values.frontend_cpu }}
 | 
						|
              memory: {{ .Values.frontend_memory }}
 | 
						|
 | 
						|
          readinessProbe:
 | 
						|
            httpGet:
 | 
						|
              path: /healthz
 | 
						|
              port: 8880
 | 
						|
            failureThreshold: 3
 | 
						|
            initialDelaySeconds: 10
 | 
						|
            periodSeconds: 10
 | 
						|
            successThreshold: 1
 | 
						|
            timeoutSeconds: 1
 | 
						|
---
 | 
						|
 | 
						|
apiVersion: v1
 | 
						|
kind: Service
 | 
						|
 | 
						|
metadata:
 | 
						|
  namespace: {{ .Release.Namespace }}
 | 
						|
  name: {{ .Values.name }}-frontend
 | 
						|
  labels:
 | 
						|
    app: {{ .Values.name }}
 | 
						|
    role: frontend
 | 
						|
 | 
						|
{{- 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: frontend
 | 
						|
 | 
						|
  ports:
 | 
						|
    - protocol: TCP
 | 
						|
      port: 80
 | 
						|
      name: frontend
 | 
						|
 | 
						|
  {{- if and .Values.local_service_port (not .Values.ingress.host) }}
 | 
						|
      nodePort: {{ .Values.local_service_port }}
 | 
						|
 | 
						|
  type: NodePort
 | 
						|
  {{- end }}
 | 
						|
 | 
						|
 | 
						|
{{- if gt (int .Values.frontend_max_replicas) 1 }}
 | 
						|
---
 | 
						|
apiVersion: autoscaling/v2
 | 
						|
kind: HorizontalPodAutoscaler
 | 
						|
metadata:
 | 
						|
  name: frontend-autoscaler
 | 
						|
spec:
 | 
						|
  scaleTargetRef:
 | 
						|
    apiVersion: apps/v1
 | 
						|
    kind: Deployment
 | 
						|
    name: {{ .Values.name }}-frontend
 | 
						|
  minReplicas: 1
 | 
						|
  maxReplicas: {{ .Values.frontend_max_replicas }}
 | 
						|
  metrics:
 | 
						|
  - type: Resource
 | 
						|
    resource:
 | 
						|
      name: cpu
 | 
						|
      target:
 | 
						|
        type: Utilization
 | 
						|
        averageUtilization: {{ .Values.frontend_avg_cpu_threshold }}
 | 
						|
  - type: Resource
 | 
						|
    resource:
 | 
						|
      name: memory
 | 
						|
      target:
 | 
						|
        type: Utilization
 | 
						|
        averageUtilization: {{ .Values.frontend_avg_memory_threshold }}
 | 
						|
{{ end }}
 |