titan-iac/services/quality/sonarqube-exporter-deployment.yaml

109 lines
3.4 KiB
YAML

# services/quality/sonarqube-exporter-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: sonarqube-exporter
namespace: quality
labels:
app: sonarqube-exporter
spec:
replicas: 1
selector:
matchLabels:
app: sonarqube-exporter
template:
metadata:
labels:
app: sonarqube-exporter
annotations:
vault.hashicorp.com/agent-inject: "true"
vault.hashicorp.com/role: "quality"
vault.hashicorp.com/agent-inject-secret-sonarqube-exporter-env.sh: "kv/data/atlas/quality/sonarqube-oidc"
vault.hashicorp.com/agent-inject-template-sonarqube-exporter-env.sh: |
{{- with secret "kv/data/atlas/quality/sonarqube-oidc" -}}
export SONARQUBE_TOKEN="{{ .Data.data.sonarqube_exporter_token }}"
{{- end -}}
prometheus.io/scrape: "true"
prometheus.io/port: "9798"
prometheus.io/path: /metrics
spec:
serviceAccountName: quality-vault-sync
nodeSelector:
node-role.kubernetes.io/worker: "true"
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/arch
operator: In
values: ["arm64"]
- key: hardware
operator: In
values: ["rpi5"]
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
preference:
matchExpressions:
- key: hardware
operator: In
values: ["rpi5"]
containers:
- name: exporter
image: registry.bstein.dev/bstein/python:3.12-slim
imagePullPolicy: IfNotPresent
command:
- /bin/sh
- -ec
args:
- |
if [ -f /vault/secrets/sonarqube-exporter-env.sh ]; then
. /vault/secrets/sonarqube-exporter-env.sh
fi
cp /config/exporter.py /app/exporter.py
python /app/exporter.py
env:
- name: SONARQUBE_URL
value: http://sonarqube.quality.svc.cluster.local:9000
- name: SONARQUBE_EXPORTER_PORT
value: "9798"
- name: SONARQUBE_EXPORTER_CACHE_TTL_SECONDS
value: "45"
- name: SONARQUBE_PROJECT_LIMIT
value: "250"
ports:
- name: metrics
containerPort: 9798
readinessProbe:
httpGet:
path: /-/healthy
port: 9798
initialDelaySeconds: 5
periodSeconds: 10
livenessProbe:
httpGet:
path: /-/healthy
port: 9798
initialDelaySeconds: 20
periodSeconds: 20
resources:
requests:
cpu: 25m
memory: 96Mi
limits:
cpu: 250m
memory: 256Mi
volumeMounts:
- name: exporter-script
mountPath: /config
readOnly: true
- name: app-tmp
mountPath: /app
volumes:
- name: exporter-script
configMap:
name: sonarqube-exporter-script
defaultMode: 493
- name: app-tmp
emptyDir: {}