28 Commits

Author SHA1 Message Date
5b2c089d6f asdasd
Some checks failed
Helm / helm-lint (pull_request) Successful in 14s
Helm / helm-unittest (pull_request) Successful in 17s
Helm / helm-lint (push) Successful in 14s
Helm / helm-unittest (push) Successful in 15s
Release / generate-chart-publish (push) Failing after 29s
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
2025-01-12 15:27:25 +01:00
aede99f3f2 asdasd 2025-01-12 15:27:25 +01:00
0a72c4bb58 fix: only on yaml 2025-01-12 15:27:25 +01:00
378e799afa wip 2025-01-12 15:27:25 +01:00
89c43d7fb4 fix 2025-01-12 15:27:25 +01:00
7265403bd9 faasd 2025-01-12 15:27:25 +01:00
7937f9edf2 asd 2025-01-12 15:27:25 +01:00
fe2ab4417f wip 2025-01-12 15:27:25 +01:00
a9abdccaa3 wip 2025-01-12 15:27:25 +01:00
b52a4982a6 test 2025-01-12 15:27:25 +01:00
cc33ca2e0c fix 2025-01-12 15:27:25 +01:00
cc955c6178 asdas 2025-01-12 15:27:24 +01:00
e1f37b8ac9 asd 2025-01-12 15:27:24 +01:00
3e868aad35 fix 2025-01-12 15:27:24 +01:00
208acd6d96 fix 2025-01-12 15:27:24 +01:00
3be3977233 fix 2025-01-12 15:27:24 +01:00
1e0cdc6dfd asdasd 2025-01-12 15:27:24 +01:00
86bbd6f1d2 fix 2025-01-12 15:27:24 +01:00
6f6ad61352 test 2025-01-12 15:27:24 +01:00
bde198ab0f wip 2025-01-12 15:27:24 +01:00
22f0fd4176 fix: container runtime 2025-01-12 15:27:24 +01:00
c0aadbfa52 WIP 2025-01-12 15:27:24 +01:00
5744511f6e WIP 2025-01-12 15:27:24 +01:00
de3c85ba4d WIP 2025-01-12 15:27:24 +01:00
da18fbf50c WIP 2025-01-12 15:27:24 +01:00
0cc2323eb1 WIP 2025-01-12 15:27:24 +01:00
a3358b0be5 wip 2025-01-12 15:27:24 +01:00
a53ab3b2a0 wip(ci): run gitea action 2025-01-12 15:27:24 +01:00
10 changed files with 243 additions and 121 deletions

200
.drone.yml Normal file
View File

@ -0,0 +1,200 @@
---
kind: pipeline
type: kubernetes
name: Linters
clone:
disable: true
platform:
os: linux
arch: amd64
steps:
- name: clone repository
image: git.cryptic.systems/volker.raschek/git:1.4.0
- name: helm lint
commands:
- helm lint
image: git.cryptic.systems/volker.raschek/helm:3.16.4
resources:
limits:
cpu: 150
memory: 150M
- name: email-notification
environment:
SMTP_FROM_ADDRESS:
from_secret: smtp_from_address
SMTP_FROM_NAME:
from_secret: smtp_from_name
SMTP_HOST:
from_secret: smtp_host
SMTP_USERNAME:
from_secret: smtp_username
SMTP_PASSWORD:
from_secret: smtp_password
image: git.cryptic.systems/volker.raschek/drone-email:0.1.5
resources:
limits:
cpu: 150
memory: 150M
when:
status:
- changed
- failure
trigger:
event:
exclude:
- tag
---
kind: pipeline
type: kubernetes
name: Unit tests
clone:
disable: true
platform:
os: linux
arch: amd64
steps:
- name: clone repository
image: git.cryptic.systems/volker.raschek/git:1.4.0
- name: helm unittest
commands:
- helm unittest --strict --file 'unittests/**/*.yaml' ./
image: git.cryptic.systems/volker.raschek/helm:3.16.4
resources:
limits:
cpu: 150
memory: 150M
- name: email-notification
environment:
SMTP_FROM_ADDRESS:
from_secret: smtp_from_address
SMTP_FROM_NAME:
from_secret: smtp_from_name
SMTP_HOST:
from_secret: smtp_host
SMTP_USERNAME:
from_secret: smtp_username
SMTP_PASSWORD:
from_secret: smtp_password
image: git.cryptic.systems/volker.raschek/drone-email:0.1.5
resources:
limits:
cpu: 150
memory: 150M
when:
status:
- changed
- failure
trigger:
event:
exclude:
- tag
---
kind: pipeline
type: kubernetes
name: Generate, compare and lint README.md
clone:
disable: true
platform:
os: linux
arch: amd64
steps:
- name: clone repository
image: git.cryptic.systems/volker.raschek/git:1.4.0
- name: execute NPM modules
commands:
- npm install
- npm run readme:link
- npm run readme:lint
- npm run readme:parameters
image: docker.io/library/node:23.6.0-alpine
resources:
limits:
cpu: 150
memory: 150M
- name: detect diff
commands:
- git diff --exit-code --name-only README.md
image: git.cryptic.systems/volker.raschek/git:1.4.0
- name: email-notification
environment:
SMTP_FROM_ADDRESS:
from_secret: smtp_from_address
SMTP_FROM_NAME:
from_secret: smtp_from_name
SMTP_HOST:
from_secret: smtp_host
SMTP_USERNAME:
from_secret: smtp_username
SMTP_PASSWORD:
from_secret: smtp_password
image: git.cryptic.systems/volker.raschek/drone-email:0.1.5
resources:
limits:
cpu: 150
memory: 150M
when:
status:
- changed
- failure
trigger:
event:
exclude:
- tag
# ---
# kind: pipeline
# type: kubernetes
# name: Release
# clone:
# disable: true
# platform:
# os: linux
# steps:
# - name: clone repository
# image: git.cryptic.systems/volker.raschek/git:1.4.0
# - name: release-helm-chart
# commands:
# - helm repo add prometheus-exporters https://charts.cryptic.systems/prometheus-exporters
# - helm package --version ${DRONE_TAG} .
# - helm cm-push ${DRONE_REPO_NAME}-${DRONE_TAG}.tgz prometheus-exporters
# environment:
# HELM_REPO_PASSWORD:
# from_secret: helm_repo_password
# HELM_REPO_USERNAME:
# from_secret: helm_repo_username
# image: git.cryptic.systems/volker.raschek/helm:3.16.4
# resources:
# limits:
# cpu: 150
# memory: 150M
# trigger:
# event:
# - tag
# repo:
# - volker.raschek/prometheus-postgres-exporter

View File

@ -6,21 +6,19 @@ on:
types: [ "opened", "reopened", "synchronize" ]
push:
paths: [ "README.md", "values.yaml" ]
tags-ignore:
- '**'
workflow_dispatch: {}
jobs:
generate-parameters:
container:
image: docker.io/library/node:22.13.0-alpine
image: docker.io/library/node:22.9.0-alpine
runs-on:
- ubuntu-latest
steps:
- name: Install tooling
run: |
apk update
apk add git npm
apk add git
- uses: actions/checkout@v4.2.2
- name: Generate parameter section in README
run: |

View File

@ -3,15 +3,13 @@ name: Helm
on:
pull_request:
types: [ "opened", "reopened", "synchronize" ]
push:
tags-ignore:
- '**'
push: {}
workflow_dispatch: {}
jobs:
helm-lint:
container:
image: docker.io/volkerraschek/helm:3.16.4
image: docker.io/volkerraschek/helm:3.16.1
runs-on:
- ubuntu-latest
steps:
@ -26,7 +24,7 @@ jobs:
helm-unittest:
container:
image: docker.io/volkerraschek/helm:3.16.4
image: docker.io/volkerraschek/helm:3.16.1
runs-on:
- ubuntu-latest
steps:

View File

@ -6,21 +6,19 @@ on:
types: [ "opened", "reopened", "synchronize" ]
push:
paths: [ "**/*.md" ]
tags-ignore:
- '**'
workflow_dispatch: {}
jobs:
markdown-link-checker:
container:
image: docker.io/library/node:22.13.0-alpine
image: docker.io/library/node:22.9.0-alpine
runs-on:
- ubuntu-latest
steps:
- name: Install tooling
run: |
apk update
apk add git npm
apk add git
- uses: actions/checkout@v4.2.2
- name: Verify links in markdown files
run: |
@ -29,7 +27,7 @@ jobs:
markdown-lint:
container:
image: docker.io/library/node:22.13.0-alpine
image: docker.io/library/node:22.9.0-alpine
runs-on:
- ubuntu-latest
steps:

View File

@ -3,44 +3,38 @@ name: Release
on:
push:
tags:
- "**"
- "*"
env:
# renovate: datasource=docker depName=alpine/helm
HELM_VERSION: "3.16.4"
jobs:
publish-chart:
generate-chart-publish:
container:
image: docker.io/volkerraschek/helm:3.16.4
image: docker.io/volkerraschek/helm:3.16.1
runs-on: ubuntu-latest
steps:
- name: Install tooling
run: |
apk update
apk add git npm
- uses: actions/checkout@v4
- name: Package chart
# - name: Import GPG key
# id: import_gpg
# uses: https://github.com/crazy-max/ghaction-import-gpg@v6
# with:
# gpg_private_key: ${{ secrets.GPGSIGN_KEY }}
# passphrase: ${{ secrets.GPGSIGN_PASSPHRASE }}
# fingerprint: CC64B1DB67ABBEECAB24B6455FC346329753F4B0
# Using helm gpg plugin as 'helm package --sign' has issues with gpg2: https://github.com/helm/helm/issues/2843
- name: package chart
env:
HELM_REPO_NAME: upload
CHARTMUSEUM_PASSWORD: ${{ secrets.CHARTMUSEUM_PASSWORD }}
CHARTMUSEUM_REPOSITORY: ${{ vars.CHARTMUSEUM_REPOSITORY }}
CHARTMUSEUM_USERNAME: ${{ secrets.CHARTMUSEUM_USERNAME }}
CHARTMUSEUM_HOSTNAME: ${{ vars.CHARTMUSEUM_HOSTNAME }}
GITEA_PACKAGE_REGISTRY_TOKEN: ${{ secrets.GIT_CRYPTIC_SYSTEMS_PACKAGE_REGISTRY_TOKEN }}
GITEA_SERVER_URL: ${{ github.server_url }}
HELM_REPO_NAME: test
HELM_REPO_PASSWORD: ${{ secrets.HELM_REPO_PASSWORD }}
HELM_REPO_USERNAME: ${{ secrets.HELM_REPO_USERNAME }}
run: |
PACKAGE_VERSION=${GITHUB_REF#refs/tags/}
REPOSITORY_NAME=$(echo ${GITHUB_REPOSITORY} | cut -d '/' -f 2)
REPOSITORY_OWNER=$(echo ${GITHUB_REPOSITORY} | cut -d '/' -f 1)
PACKAGE_VERSION=${GITHUB_REF#refs/tags/v}
helm repo add ${HELM_REPO_NAME} https://charts.cryptic.systems/${HELM_REPO_NAME}
helm dependency build
helm package --version "${PACKAGE_VERSION}" ./
# chart-museum
helm repo add --username ${CHARTMUSEUM_USERNAME} --password ${CHARTMUSEUM_PASSWORD} chartmuseum https://${CHARTMUSEUM_HOSTNAME}/${CHARTMUSEUM_REPOSITORY}
helm cm-push ${REPOSITORY_NAME}-${PACKAGE_VERSION}.tgz chartmuseum
helm repo remove chartmuseum
# gitea
helm repo add --username ${REPOSITORY_OWNER} --password ${GITEA_PACKAGE_REGISTRY_TOKEN} gitea ${GITEA_SERVER_URL}/api/packages/${REPOSITORY_OWNER}/helm
helm cm-push ${REPOSITORY_NAME}-${PACKAGE_VERSION}.tgz gitea
helm repo remove gitea
helm cm-push ${REPOSITORY_NAME}-${PACKAGE_VERSION}.tgz ${HELM_REPO_NAME}

View File

@ -63,35 +63,6 @@ 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

View File

@ -17,50 +17,32 @@
},
{
"description": "Detect helm chart version in README",
"fileMatch": ["^README\\.md$"],
"fileMatch": [
"^README\\.md$"
],
"matchStrings": [
"^CHART_VERSION=(?<currentValue>.*)$"
],
"datasourceTemplate": "git-tags",
"depNameTemplate": "volker.raschek/prometheus-postgres-exporter",
"packageNameTemplate": "https://git.cryptic.systems/volker.raschek/prometheus-postgres-exporter",
"packageNameTemplate": "git.cryptic.systems/volker.raschek/prometheus-postgres-exporter",
"versioningTemplate": "semver"
}
],
"labels": [ "renovate" ],
"packageRules": [
{
"addLabels": [ "renovate/automerge", "renovate/droneci" ],
"automerge": true,
"matchManagers": "droneci",
"matchUpdateTypes": [ "minor", "patch"]
},
{
"addLabels": [ "renovate/automerge", "renovate/npm" ],
"automerge": true,
"matchPackageNames": [ "markdownlint-cli", "@bitnami/readme-generator-for-helm" ],
"matchManagers": [ "npm" ],
"matchUpdateTypes": [ "minor", "patch"]
},
{
"addLabels": [ "renovate/automerge", "renovate/container" ],
"automerge": true,
"excludePackagePatterns": [
"prometheuscommunity/postgres-exporter"
],
"matchDatasources": [
"docker"
],
"matchUpdateTypes": [
"minor",
"patch"
]
},
{
"addLabels": [ "renovate/automerge", "renovate/documentation" ],
"automerge": true,
"matchDepNames": [
"volker.raschek/prometheus-postgres-exporter"
],
"matchUpdateTypes": [
"major",
"minor",
"patch"
]
}
],
"rebaseLabel": "renovate/rebase",

View File

@ -9,17 +9,6 @@
{{- 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" -}}

View File

@ -34,10 +34,9 @@ spec:
{{- range .Values.deployment.postgresExporter.args }}
- {{ . | quote }}
{{- end }}
{{- $env := (include "prometheus-postgres-exporter.deployment.env" . | fromYaml) }}
{{- if and (hasKey $env "env") (gt (len $env.env) 0) }}
{{- with .Values.deployment.postgresExporter.env }}
env:
{{- toYaml $env.env | nindent 8 }}
{{- toYaml . | nindent 8 }}
{{- end }}
{{- $envFrom := (include "prometheus-postgres-exporter.deployment.envFrom" . | fromYaml) }}
{{- if hasKey $envFrom "envFrom" }}

View File

@ -227,13 +227,6 @@ 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: