From e154de728ca7900f435e9150ce0d15cc714605a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9C=D0=BE=D1=81=D1=82=D0=BE=D0=B2=D0=BE=D0=B8=CC=86=20?= =?UTF-8?q?=D0=92=D0=BB=D0=B0=D0=B4=D0=B8=D0=BC=D0=B8=D1=80=20=D0=90=D0=BD?= =?UTF-8?q?=D0=B4=D1=80=D0=B5=D0=B5=D0=B2=D0=B8=D1=87?= Date: Wed, 9 Sep 2026 17:08:21 +0300 Subject: [PATCH] [flant] init repo --- .gitignore | 3 + .helm/templates/03-serviceaccount.yaml | 7 ++ .helm/templates/10-postgres.yaml | 107 ++++++++++++++++ .helm/templates/11-postgresql-exporter.yaml | 128 ++++++++++++++++++++ .helm/values.yaml | 31 +++++ werf.yaml | 12 ++ 6 files changed, 288 insertions(+) create mode 100644 .gitignore create mode 100644 .helm/templates/03-serviceaccount.yaml create mode 100644 .helm/templates/10-postgres.yaml create mode 100644 .helm/templates/11-postgresql-exporter.yaml create mode 100644 .helm/values.yaml create mode 100644 werf.yaml diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..6c74682 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +*.swp +.werf_secret_key +.idea diff --git a/.helm/templates/03-serviceaccount.yaml b/.helm/templates/03-serviceaccount.yaml new file mode 100644 index 0000000..8e86467 --- /dev/null +++ b/.helm/templates/03-serviceaccount.yaml @@ -0,0 +1,7 @@ +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: {{ .Chart.Name }}-sa + annotations: + werf.io/weight: "-31" diff --git a/.helm/templates/10-postgres.yaml b/.helm/templates/10-postgres.yaml new file mode 100644 index 0000000..08a9c34 --- /dev/null +++ b/.helm/templates/10-postgres.yaml @@ -0,0 +1,107 @@ +{{- $nodeSelector := dig .Values.werf.env .Values.postgres.nodeSelector._default .Values.postgres.nodeSelector }} +{{- $tolerations := dig .Values.werf.env .Values.postgres.tolerations._default .Values.postgres.tolerations }} +--- +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: {{ .Chart.Name }} + labels: + app: {{ .Chart.Name }} +spec: + replicas: 1 + selector: + matchLabels: + app: {{ .Chart.Name }} + template: + metadata: + labels: + app: {{ .Chart.Name }} + annotations: + secrets-store.deckhouse.io/role: "{{ .Values.werf.env }}-{{ .Chart.Name }}-role" + secrets-store.deckhouse.io/env-from-path: "{{ .Values.werf.env }}/data/{{ .Chart.Name }}" + spec: + serviceAccountName: {{ .Chart.Name }}-sa + imagePullSecrets: + - name: registrysecret + {{- if $nodeSelector }} + nodeSelector: {{ toYaml $nodeSelector | nindent 8 }} + {{- end }} + {{- if $tolerations }} + tolerations: {{ toYaml $tolerations | nindent 6 }} + {{- end }} + containers: + - name: postgres + image: {{ .Values.werf.image.postgresql }} + imagePullPolicy: IfNotPresent + args: + - -c + - shared_preload_libraries=pg_stat_statements + resources: + requests: + cpu: {{ dig .Values.werf.env .Values.postgres.resources.requests.cpu._default .Values.postgres.resources.requests.cpu }} + memory: {{ dig .Values.werf.env .Values.postgres.resources.requests.memory._default .Values.postgres.resources.requests.memory }} + limits: + memory: {{ dig .Values.werf.env .Values.postgres.resources.limits.memory._default .Values.postgres.resources.limits.memory }} + volumeMounts: + - name: data + mountPath: /var/lib/postgresql/data + subPath: postgresql + - name: {{ .Chart.Name }}-config + mountPath: /usr/share/postgresql/postgresql.conf.sample + subPath: postgresql.conf.sample + readinessProbe: + tcpSocket: + port: {{ dig .Values.werf.env .Values.postgres.port._default .Values.postgres.port }} + initialDelaySeconds: 5 + timeoutSeconds: 1 + livenessProbe: + tcpSocket: + port: {{ dig .Values.werf.env .Values.postgres.port._default .Values.postgres.port }} + initialDelaySeconds: 30 + periodSeconds: 5 + volumes: + - name: {{ .Chart.Name }}-config + configMap: + name: {{ .Chart.Name }}-configmap + + volumeClaimTemplates: + - metadata: + name: data + spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: {{ dig .Values.werf.env .Values.postgres.storage._default .Values.postgres.storage }} + storageClassName: {{ dig .Values.werf.env .Values.postgres.storageClassName._default .Values.postgres.storageClassName }} +--- +apiVersion: v1 +kind: Service +metadata: + name: {{ .Chart.Name }} +spec: + selector: + app: {{ .Chart.Name }} + ports: + - name: {{ .Chart.Name }} + port: {{ dig .Values.werf.env .Values.postgres.port._default .Values.postgres.port }} + +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ .Chart.Name }}-configmap + annotations: + werf.io/weight: "-31" +data: + postgresql.conf.sample: | + listen_addresses = '*' + log_checkpoints = on + log_connections = off + log_disconnections = off + log_duration = on + log_line_prefix = '%m %p %u@%d from %h [vxid:%v txid:%x] [%i]' + log_lock_waits = on + log_statement = 'all' + log_temp_files = 0 + log_timezone = 'UTC' diff --git a/.helm/templates/11-postgresql-exporter.yaml b/.helm/templates/11-postgresql-exporter.yaml new file mode 100644 index 0000000..b33d885 --- /dev/null +++ b/.helm/templates/11-postgresql-exporter.yaml @@ -0,0 +1,128 @@ +{{- $appName := "postgres-exporter" }} +{{- $nodeSelector := dig .Values.werf.env .Values.postgres.nodeSelector._default .Values.postgres.nodeSelector }} +{{- $tolerations := dig .Values.werf.env .Values.postgres.tolerations._default .Values.postgres.tolerations }} +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ $appName }} + labels: + app: {{ $appName }} +spec: + replicas: 1 + selector: + matchLabels: + app: {{ $appName }} + template: + metadata: + labels: + app: {{ $appName }} + annotations: + secrets-store.deckhouse.io/role: "{{ .Values.werf.env }}-{{ .Chart.Name }}-role" + secrets-store.deckhouse.io/env-from-path: "{{ .Values.werf.env }}/data/{{ .Chart.Name }}" + spec: + volumes: + - configMap: + defaultMode: 420 + name: {{ $appName }}-config + name: {{ $appName }}-config + serviceAccountName: {{ .Chart.Name }}-sa + imagePullSecrets: + - name: registrysecret + {{- if $nodeSelector }} + nodeSelector: {{ toYaml $nodeSelector | nindent 8 }} + {{- end }} + {{- if $tolerations }} + tolerations: {{ toYaml $tolerations | nindent 6 }} + {{- end }} + containers: + - name: postgres-exporter + volumeMounts: + - mountPath: /etc/postgres_exporter.yml + name: {{ $appName }}-config + subPath: postgres_exporter.yml + image: {{ .Values.werf.image.postgresqlExporter }} + args: + - --web.listen-address=:9187 + - --config.file=/etc/postgres_exporter.yml + - --collector.stat_statements + - --collector.stat_activity_autovacuum + - --collector.statio_user_indexes + - --collector.postmaster + - --collector.database_wraparound + - --collector.long_running_transactions + - --collector.process_idle + - --collector.stat_wal_receiver + - --collector.stat_statements.exclude_databases=postgres,template0,template1 + - --collector.stat_statements.include_query + - --collector.stat_statements.limit=100 + - --collector.stat_statements.query_length=2048 + ports: + - name: http-metrics + containerPort: 9187 + protocol: TCP + livenessProbe: + httpGet: + path: / + port: http-metrics + initialDelaySeconds: 15 + periodSeconds: 9 + readinessProbe: + httpGet: + path: / + port: http-metrics + initialDelaySeconds: 20 + periodSeconds: 11 + resources: + requests: + cpu: 50m + memory: 64Mi + limits: + memory: 64Mi + securityContext: + allowPrivilegeEscalation: false + readOnlyRootFilesystem: true + runAsNonRoot: true + runAsUser: 65534 + restartPolicy: Always +--- +apiVersion: v1 +kind: Service +metadata: + name: {{ $appName }} + labels: + app: {{ $appName }} + prometheus.deckhouse.io/custom-target: postgresql +spec: + type: ClusterIP + ports: + - name: http-metrics + port: 9187 + targetPort: http-metrics + protocol: TCP + selector: + app: {{ $appName }} +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ $appName }}-config +data: + postgres_exporter.yml: | + auth_modules: + postgres: + type: userpass + userpass: + username: {{ .Values.postgresqlExporter.user | quote }} + options: + sslmode: disable +--- +apiVersion: v1 +kind: Secret +metadata: + labels: + app: {{ $appName }} + name: {{ $appName }}-env +type: Opaque +data: + PG_EXPORTER_CONSTANT_LABELS: {{ printf "cluster=%s" .Chart.Name | b64enc | quote }} diff --git a/.helm/values.yaml b/.helm/values.yaml new file mode 100644 index 0000000..eaded68 --- /dev/null +++ b/.helm/values.yaml @@ -0,0 +1,31 @@ +postgres: + port: + _default: "5432" + storage: + _default: 10Gi + preprod: 20Gi + prod: 50Gi + storageClassName: + _default: local-storage-class-worker + resources: + requests: + cpu: + _default: 200m + memory: + _default: 256Mi + preprod: 512Mi + prod: 1Gi + limits: + memory: + _default: 512Mi + preprod: 1Gi + prod: 2Gi + + nodeSelector: + _default: + node-role.deckhouse.io/worker: "" + tolerations: + _default: [] + +postgresqlExporter: + user: okagent diff --git a/werf.yaml b/werf.yaml new file mode 100644 index 0000000..6f9cd03 --- /dev/null +++ b/werf.yaml @@ -0,0 +1,12 @@ +--- +configVersion: 1 +project: postgres +deploy: + namespace: '[[ env ]]' + helmRelease: '[[ project ]]-[[ env ]]' +--- +image: postgresql +from: registry.lukoil.ru:8123/external-pub/library/postgres:16.10-alpine3.22 +--- +image: postgresqlExporter +from: registry.lukoil.ru:8123/external-pub/prometheuscommunity/postgres-exporter:v0.19.0