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 }}
 |