You've already forked prometheus-postgres-exporter
							
							fix(deployment): automatically set GOMAXPROCS
This commit is contained in:
		
							
								
								
									
										29
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										29
									
								
								README.md
									
									
									
									
									
								
							| @@ -63,6 +63,35 @@ for customizations. These can be configured in more detail via `values.yaml`. | ||||
|  | ||||
| The following examples serve as individual configurations and as inspiration for how deployment problems can be solved. | ||||
|  | ||||
| #### Avoid CPU throttling by defining a CPU limit | ||||
|  | ||||
| If the application is deployed with a CPU resource limit, Prometheus may throw a CPU throttling warning for the | ||||
| application. This has more or less to do with the fact that the application finds the number of CPUs of the host, but | ||||
| cannot use the available CPU time to perform computing operations. | ||||
|  | ||||
| The application must be informed that despite several CPUs only a part (limit) of the available computing time is | ||||
| available. As this is a Golang application, this can be implemented using `GOMAXPROCS`. The following example is one way | ||||
| of defining `GOMAXPROCS` automatically based on the defined CPU limit like `100m`. Please keep in mind, that the CFS | ||||
| rate of `100ms` - default on each kubernetes node, is also very important to avoid CPU throttling. | ||||
|  | ||||
| Further information about this topic can be found [here](https://kanishk.io/posts/cpu-throttling-in-containerized-go-apps/). | ||||
|  | ||||
| > [!NOTE] | ||||
| > The environment variable `GOMAXPROCS` is set automatically, when a CPU limit is defined. An explicit configuration is | ||||
| > not anymore required. | ||||
|  | ||||
| ```bash | ||||
| helm install prometheus-postgres-exporter prometheus-exporters/prometheus-postgres-exporter \ | ||||
|   --set 'config.database.secret.databaseUsername=postgres' \ | ||||
|   --set 'config.database.secret.databasePassword=postgres' \ | ||||
|   --set 'config.database.secret.databaseConnectionUrl="postgres.example.local:5432/postgres?ssl=disable"' \ | ||||
|   --set 'prometheus.metrics.enabled=true' \ | ||||
|   --set 'prometheus.metrics.serviceMonitor.enabled=true' \ | ||||
|   --set 'deployment.postgresExporter.env.name=GOMAXPROCS' \ | ||||
|   --set 'deployment.postgresExporter.env.valueFrom.resourceFieldRef.resource=limits.cpu' \ | ||||
|   --set 'deployment.postgresExporter.resources.limits.cpu=100m' | ||||
| ``` | ||||
|  | ||||
| #### TLS authentication and encryption | ||||
|  | ||||
| The first example shows how to deploy the metric exporter with TLS encryption. The verification of the custom TLS | ||||
|   | ||||
| @@ -9,6 +9,17 @@ | ||||
| {{- end }} | ||||
| {{- end }} | ||||
|  | ||||
| {{/* env */}} | ||||
|  | ||||
| {{- define "prometheus-postgres-exporter.deployment.env" -}} | ||||
| {{- $env := dict "env" (.Values.deployment.postgresExporter.env | default (list) ) }} | ||||
| {{- if and (hasKey .Values.deployment.postgresExporter.resources "limits") (hasKey .Values.deployment.postgresExporter.resources.limits "cpu") }} | ||||
| {{- $env = merge $env (dict "env" (list (dict "name" "GOMAXPROCS" "valueFrom" (dict "resourceFieldRef" (dict "resource" "limits.cpu"))))) }} | ||||
| {{- end }} | ||||
| {{ toYaml $env }} | ||||
| {{- end -}} | ||||
|  | ||||
|  | ||||
| {{/* envFrom */}} | ||||
|  | ||||
| {{- define "prometheus-postgres-exporter.deployment.envFrom" -}} | ||||
|   | ||||
| @@ -34,9 +34,10 @@ spec: | ||||
|         {{- range .Values.deployment.postgresExporter.args }} | ||||
|         - {{ . | quote }} | ||||
|         {{- end }} | ||||
|         {{- with .Values.deployment.postgresExporter.env }} | ||||
|         {{- $env := (include "prometheus-postgres-exporter.deployment.env" . | fromYaml) }} | ||||
|         {{- if and (hasKey $env "env") (gt (len $env.env) 0) }} | ||||
|         env: | ||||
|         {{- toYaml . | nindent 8 }} | ||||
|         {{- toYaml $env.env | nindent 8 }} | ||||
|         {{- end }} | ||||
|         {{- $envFrom := (include "prometheus-postgres-exporter.deployment.envFrom" . | fromYaml) }} | ||||
|         {{- if hasKey $envFrom "envFrom" }} | ||||
|   | ||||
| @@ -227,6 +227,13 @@ tests: | ||||
|         cpu: 25m | ||||
|         memory: 100MB | ||||
|   asserts: | ||||
|   - equal: | ||||
|       path: spec.template.spec.containers[0].env | ||||
|       value: | ||||
|       - name: GOMAXPROCS | ||||
|         valueFrom: | ||||
|           resourceFieldRef: | ||||
|             resource: limits.cpu | ||||
|   - equal: | ||||
|       path: spec.template.spec.containers[0].resources | ||||
|       value: | ||||
|   | ||||
		Reference in New Issue
	
	Block a user