k8s/sonarqube/chart/sonarqube/templates/sonarqube-sts.yaml (113 lines of code) (raw):
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: {{ .Release.Name}}-sonarqube
labels: &SonarQubeLabels
app.kubernetes.io/component: sonarqube
app.kubernetes.io/name: "{{ .Release.Name }}"
spec:
replicas: 1
selector:
matchLabels: *SonarQubeLabels
serviceName: {{ .Release.Name }}-sonarqube-svc
template:
metadata:
labels: *SonarQubeLabels
spec:
initContainers:
- name: check-db-ready
image: {{ .Values.postgresql.image }}
command: ['sh', '-c',
'until pg_isready -h {{ .Release.Name }}-postgresql-service -p 5432;
do echo waiting for database; sleep 2; done;']
# https://docs.sonarqube.org/latest/requirements/requirements/#header-6
# According to the documentation, vm.max_map_count should be greater or equal to 262144
- name: increase-max-map-count
image: {{ .Values.deployer.image }}
command:
- /bin/bash
- -c
- |
echo "262144" > /proc/sys/vm/max_map_count
imagePullPolicy: IfNotPresent
securityContext:
privileged: true
containers:
- name: {{ .Release.Name}}-sonarqube
image: "{{ .Values.sonarqube.image.repo }}:{{ .Values.sonarqube.image.tag }}"
resources:
requests:
cpu: 100m
memory: "2048Mi"
limits:
memory: "3072Mi"
imagePullPolicy: Always
env:
- name: SONARQUBE_JDBC_PASSWORD
valueFrom:
secretKeyRef:
key: password
name: {{.Release.Name}}-secret
- name: SONARQUBE_JDBC_URL
value: jdbc:postgresql://{{ .Release.Name }}-postgresql-service:5432/{{.Values.postgresql.db.name}}
- name: SONARQUBE_JDBC_USERNAME
value: {{.Values.postgresql.db.user}}
- name: JAVA_OPTS
value: >-
-Dlog4j2.formatMsgNoLookups=true
-Dlog4j2.disable.jmx=true
ports:
- containerPort: 9000
name: sonar-port
livenessProbe:
httpGet:
path: /sessions/new
port: 9000
initialDelaySeconds: 60
periodSeconds: 30
readinessProbe:
httpGet:
path: /sessions/new
port: 9000
initialDelaySeconds: 60
periodSeconds: 30
failureThreshold: 6
volumeMounts:
- mountPath: "/opt/sonarqube/extensions/"
name: {{ .Release.Name}}-ext
{{ if .Values.metrics.exporter.enabled }}
- name: prometheus-to-sd
image: {{ .Values.metrics.image }}
ports:
- name: profiler
containerPort: 6060
command:
- /monitor
- --stackdriver-prefix=custom.googleapis.com
- --source=sonarqube:http://localhost:9000/api/prometheus/metrics
- --pod-id=$(POD_NAME)
- --namespace-id=$(POD_NAMESPACE)
- --monitored-resource-types=k8s
env:
- name: POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
{{ end }}
volumes:
- name: {{ .Release.Name}}-ext
persistentVolumeClaim:
claimName: {{ .Release.Name}}-ext
volumeClaimTemplates:
- metadata:
name: {{ .Release.Name}}-ext
labels: *SonarQubeLabels
spec:
accessModes:
- ReadWriteOnce
storageClassName: {{.Values.sonarqube.persistence.storageClass }}
resources:
requests:
storage: {{ .Values.sonarqube.persistence.size }}