Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Chart.yaml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
apiVersion: v1
name: pgdog
version: v0.31
version: v0.32
appVersion: "0.1.22"
26 changes: 26 additions & 0 deletions templates/_helpers.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -85,3 +85,29 @@ app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/component: gateway
{{- end }}
{{- end }}

{{/*
Common labels for prometheus-collector
*/}}
{{- define "pgdog.prometheusCollector.labels" -}}
{{- if .Values.prometheusCollector.labels }}
{{- toYaml .Values.prometheusCollector.labels }}
{{- else -}}
app.kubernetes.io/name: {{ include "pgdog.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/component: prometheus-collector
{{- end }}
{{- end }}

{{/*
Selector labels for prometheus-collector
*/}}
{{- define "pgdog.prometheusCollector.selectorLabels" -}}
{{- if .Values.prometheusCollector.selectorLabels }}
{{- toYaml .Values.prometheusCollector.selectorLabels }}
{{- else -}}
app.kubernetes.io/name: {{ include "pgdog.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/component: prometheus-collector
{{- end }}
{{- end }}
55 changes: 55 additions & 0 deletions templates/prometheus-collector/config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
{{- if .Values.prometheusCollector.enabled }}
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ include "pgdog.fullname" . }}-prometheus-collector
labels:
{{- include "pgdog.prometheusCollector.labels" . | nindent 4 }}
data:
prometheus.yml: |
global:
scrape_interval: {{ .Values.prometheusCollector.scrapeInterval | default "15s" }}
evaluation_interval: {{ .Values.prometheusCollector.evaluationInterval | default "15s" }}
{{- if .Values.clusterName }}
external_labels:
cluster: {{ .Values.clusterName | quote }}
{{- end }}

scrape_configs:
- job_name: 'pgdog'
kubernetes_sd_configs:
- role: pod
namespaces:
names:
- {{ .Release.Namespace }}
relabel_configs:
# Only scrape pods matching pgdog selector labels
- source_labels: [__meta_kubernetes_pod_label_app_kubernetes_io_name]
action: keep
regex: {{ include "pgdog.name" . }}
- source_labels: [__meta_kubernetes_pod_label_app_kubernetes_io_instance]
action: keep
regex: {{ .Release.Name }}
- source_labels: [__meta_kubernetes_pod_label_app_kubernetes_io_component]
action: keep
regex: pgdog
# Set the metrics port
- source_labels: [__address__]
action: replace
regex: ([^:]+)(?::\d+)?
replacement: $1:{{ .Values.openMetricsPort }}
target_label: __address__
# Add pod metadata as labels
- source_labels: [__meta_kubernetes_pod_name]
action: replace
target_label: pod
- source_labels: [__meta_kubernetes_pod_node_name]
action: replace
target_label: node
- source_labels: [__meta_kubernetes_namespace]
action: replace
target_label: namespace
- source_labels: [__meta_kubernetes_pod_ip]
action: replace
target_label: pod_ip
{{- end }}
122 changes: 122 additions & 0 deletions templates/prometheus-collector/deployment.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
{{- if .Values.prometheusCollector.enabled }}
{{- $tlsEnabled := .Values.prometheusCollector.tls.enabled }}
{{- $basicAuthEnabled := .Values.prometheusCollector.basicAuth.enabled }}
{{- $webConfigEnabled := or $tlsEnabled $basicAuthEnabled }}
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ include "pgdog.fullname" . }}-prometheus-collector
labels:
{{- include "pgdog.prometheusCollector.labels" . | nindent 4 }}
spec:
replicas: 1
selector:
matchLabels:
{{- include "pgdog.prometheusCollector.selectorLabels" . | nindent 6 }}
template:
metadata:
labels:
{{- include "pgdog.prometheusCollector.selectorLabels" . | nindent 8 }}
{{- if .Values.prometheusCollector.podAnnotations }}
annotations:
{{- toYaml .Values.prometheusCollector.podAnnotations | nindent 8 }}
{{- end }}
spec:
{{- if .Values.serviceAccount.create }}
serviceAccountName: {{ include "pgdog.serviceAccountName" . }}
{{- end }}
containers:
- name: prometheus
image: {{ .Values.prometheusCollector.image.repository }}:{{ .Values.prometheusCollector.image.tag }}
imagePullPolicy: {{ .Values.prometheusCollector.image.pullPolicy }}
args:
- "--config.file=/etc/prometheus/prometheus.yml"
- "--storage.tsdb.path=/prometheus"
- "--web.listen-address=:{{ .Values.prometheusCollector.port }}"
- "--web.enable-lifecycle"
- "--storage.tsdb.retention.time={{ .Values.prometheusCollector.retention.time }}"
- "--storage.tsdb.retention.size={{ .Values.prometheusCollector.retention.size }}"
{{- if $webConfigEnabled }}
- "--web.config.file=/etc/prometheus-web/web.yml"
{{- end }}
ports:
- name: prometheus
containerPort: {{ .Values.prometheusCollector.port }}
protocol: TCP
{{- if .Values.prometheusCollector.resources }}
resources:
{{- toYaml .Values.prometheusCollector.resources | nindent 12 }}
{{- end }}
volumeMounts:
- name: config
mountPath: /etc/prometheus
- name: storage
mountPath: /prometheus
{{- if $webConfigEnabled }}
- name: web-config
mountPath: /etc/prometheus-web
readOnly: true
{{- end }}
livenessProbe:
{{- if or $tlsEnabled $basicAuthEnabled }}
exec:
command:
- /bin/sh
- -c
- |
{{- if $basicAuthEnabled }}
wget -q --spider {{ if $tlsEnabled }}--no-check-certificate https{{ else }}http{{ end }}://{{ .Values.prometheusCollector.basicAuth.username }}:$(cat /etc/prometheus-web/password)@localhost:{{ .Values.prometheusCollector.port }}/-/healthy
{{- else }}
wget -q --spider --no-check-certificate https://localhost:{{ .Values.prometheusCollector.port }}/-/healthy
{{- end }}
{{- else }}
httpGet:
path: /-/healthy
port: prometheus
{{- end }}
initialDelaySeconds: 30
periodSeconds: 15
readinessProbe:
{{- if or $tlsEnabled $basicAuthEnabled }}
exec:
command:
- /bin/sh
- -c
- |
{{- if $basicAuthEnabled }}
wget -q --spider {{ if $tlsEnabled }}--no-check-certificate https{{ else }}http{{ end }}://{{ .Values.prometheusCollector.basicAuth.username }}:$(cat /etc/prometheus-web/password)@localhost:{{ .Values.prometheusCollector.port }}/-/ready
{{- else }}
wget -q --spider --no-check-certificate https://localhost:{{ .Values.prometheusCollector.port }}/-/ready
{{- end }}
{{- else }}
httpGet:
path: /-/ready
port: prometheus
{{- end }}
initialDelaySeconds: 5
periodSeconds: 5
volumes:
- name: config
configMap:
name: {{ include "pgdog.fullname" . }}-prometheus-collector
- name: storage
emptyDir:
sizeLimit: {{ .Values.prometheusCollector.storage.size }}
{{- if $webConfigEnabled }}
- name: web-config
secret:
secretName: {{ include "pgdog.fullname" . }}-prometheus-collector
{{- end }}
{{- with .Values.prometheusCollector.nodeSelector }}
nodeSelector:
{{- toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.prometheusCollector.tolerations }}
tolerations:
{{- toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.prometheusCollector.affinity }}
affinity:
{{- toYaml . | nindent 8 }}
{{- end }}
{{- end }}
34 changes: 34 additions & 0 deletions templates/prometheus-collector/secret.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
{{- if .Values.prometheusCollector.enabled }}
{{- $tlsEnabled := .Values.prometheusCollector.tls.enabled }}
{{- $basicAuthEnabled := .Values.prometheusCollector.basicAuth.enabled }}
{{- if or $tlsEnabled $basicAuthEnabled }}
{{- $cert := genSelfSignedCert "prometheus-collector" nil (list "localhost" (printf "%s-prometheus-collector" (include "pgdog.fullname" .))) 3650 }}
apiVersion: v1
kind: Secret
metadata:
name: {{ include "pgdog.fullname" . }}-prometheus-collector
labels:
{{- include "pgdog.prometheusCollector.labels" . | nindent 4 }}
type: Opaque
stringData:
web.yml: |
{{- if $tlsEnabled }}
tls_server_config:
cert_file: /etc/prometheus-web/tls.crt
key_file: /etc/prometheus-web/tls.key
{{- end }}
{{- if $basicAuthEnabled }}
basic_auth_users:
{{ .Values.prometheusCollector.basicAuth.username }}: {{ .Values.prometheusCollector.basicAuth.passwordHash }}
{{- end }}
{{- if $basicAuthEnabled }}
password: {{ .Values.prometheusCollector.basicAuth.password | quote }}
{{- end }}
{{- if $tlsEnabled }}
tls.crt: |
{{ $cert.Cert | indent 4 }}
tls.key: |
{{ $cert.Key | indent 4 }}
{{- end }}
{{- end }}
{{- end }}
35 changes: 35 additions & 0 deletions templates/prometheus-collector/service.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
{{- if .Values.prometheusCollector.enabled }}
apiVersion: v1
kind: Service
metadata:
name: {{ include "pgdog.fullname" . }}-prometheus-collector
labels:
{{- include "pgdog.prometheusCollector.labels" . | nindent 4 }}
{{- if or .Values.prometheusCollector.service.annotations .Values.prometheusCollector.service.aws.enabled }}
annotations:
{{- if .Values.prometheusCollector.service.aws.enabled }}
service.beta.kubernetes.io/aws-load-balancer-scheme: {{ .Values.prometheusCollector.service.aws.scheme | quote }}
service.beta.kubernetes.io/aws-load-balancer-cross-zone-load-balancing-enabled: "true"
service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: "ip"
service.beta.kubernetes.io/aws-load-balancer-type: "nlb"
service.beta.kubernetes.io/aws-load-balancer-manage-backend-security-group-rules: "true"
{{- end }}
{{- with .Values.prometheusCollector.service.annotations }}
{{- toYaml . | nindent 4 }}
{{- end }}
{{- end }}
spec:
{{- if .Values.prometheusCollector.service.aws.enabled }}
type: LoadBalancer
loadBalancerClass: service.k8s.aws/nlb
{{- else }}
type: {{ .Values.prometheusCollector.service.type }}
{{- end }}
ports:
- name: prometheus
port: {{ .Values.prometheusCollector.port }}
targetPort: prometheus
protocol: TCP
selector:
{{- include "pgdog.prometheusCollector.selectorLabels" . | nindent 4 }}
{{- end }}
6 changes: 6 additions & 0 deletions templates/role.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -14,5 +14,11 @@ rules:
- apiGroups: [""]
resources: ["secrets"]
verbs: ["get", "list", "watch"]
{{- if .Values.prometheusCollector.enabled }}
# Allow Prometheus to discover pods for scraping
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "list", "watch"]
{{- end }}
{{- end }}

2 changes: 1 addition & 1 deletion templates/service.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ metadata:
service.beta.kubernetes.io/aws-load-balancer-scheme: {{ .Values.service.aws.scheme | quote }}
service.beta.kubernetes.io/aws-load-balancer-cross-zone-load-balancing-enabled: "true"
service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: "ip"
service.beta.kubernetes.io/aws-load-balancer-type: "external"
service.beta.kubernetes.io/aws-load-balancer-type: "nlb"
service.beta.kubernetes.io/aws-load-balancer-manage-backend-security-group-rules: "true"
service.beta.kubernetes.io/aws-load-balancer-listener-attributes.TCP-{{ .Values.port }}: tcp.idle_timeout.seconds=1800
{{- if .Values.healthcheckPort }}
Expand Down
51 changes: 51 additions & 0 deletions test/values-prometheus-collector.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
# Test Prometheus collector configuration
prometheusCollector:
enabled: true
port: 9090
scrapeInterval: 30s
evaluationInterval: 30s
image:
repository: prom/prometheus
tag: v2.48.0
pullPolicy: IfNotPresent
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: 200m
memory: 256Mi
storage:
size: 5Gi
retention:
time: 7d
size: 2GB
# basicAuth:
# enabled: true
# username: prometheus
# # bcrypt hash of "testpassword"
# passwordHash: "$2a$10$IpLmUJvKPpVJkhbP6YVmAOQXoKr4kXXXXXXXXXXXXXXXXXXXXXXX"
service:
type: ClusterIP
annotations: {}
aws:
enabled: true
scheme: internal
nodeSelector:
monitoring: "true"
tolerations:
- key: dedicated
operator: Equal
value: monitoring
effect: NoSchedule
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: monitoring
operator: In
values:
- "true"
podAnnotations:
prometheus.io/scrape: "false"
Loading
Loading