database and data
renovate / renovate (push) Waiting to run

This commit is contained in:
Daren Lord committed 2024-11-19 20:49:29 +00:00
1 parent 4307357430
commit 7f8db0c466
26 files changed
+643

No files matched your search

@@ -0,0 +1,32 @@
---
# yaml-language-server: $schema=https://kubernetes-schemas.pages.dev/helm.toolkit.fluxcd.io/helmrelease_v2.json
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
name: cloudnative-pg
spec:
interval: 30m
chart:
spec:
# renovate: registryUrl=https://cloudnative-pg.github.io/charts
chart: cloudnative-pg
version: 0.22.1
sourceRef:
kind: HelmRepository
name: cloudnative-pg
namespace: flux-system
install:
remediation:
retries: 3
upgrade:
cleanupOnFail: true
remediation:
strategy: rollback
retries: 3
values:
crds:
create: true
monitoring:
podMonitorEnabled: false
grafanaDashboard:
create: true
@@ -0,0 +1,6 @@
---
# yaml-language-server: $schema=https://json.schemastore.org/kustomization
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- ./helmrelease.yaml
@@ -0,0 +1,87 @@
---
# yaml-language-server: $schema=https://kubernetes-schemas.pages.dev/postgresql.cnpg.io/cluster_v1.json
apiVersion: postgresql.cnpg.io/v1
kind: Cluster
metadata:
name: postgres
spec:
instances: 3
imageName: ghcr.io/cloudnative-pg/postgresql:16.5-1
primaryUpdateStrategy: unsupervised
storage:
size: 20Gi
storageClass: cifs-database
superuserSecret:
name: cloudnative-pg
enableSuperuserAccess: true
postgresql:
parameters:
max_connections: "600"
max_slot_wal_keep_size: 10GB
shared_buffers: 512MB
nodeMaintenanceWindow:
inProgress: false
reusePVC: true
resources:
requests:
cpu: 500m
memory: 2Gi
limits:
cpu: 1
memory: 4Gi
monitoring:
enablePodMonitor: true
# backup:
# retentionPolicy: 30d
# barmanObjectStore: &barmanObjectStore
# data:
# compression: bzip2
# wal:
# compression: bzip2
# maxParallel: 8
# destinationPath: "s3://cloudnative-pg-v1"
# endpointURL: "https://${SECRET_QNAP_HOSTNAME}:8010"
# # Note: serverName version needs to be incremented or changed
# # when recovering from an existing cnpg cluster
# serverName: &currentCluster postgres-v2
# s3Credentials:
# accessKeyId:
# name: cloudnative-pg
# key: s3-key-id
# secretAccessKey:
# name: cloudnative-pg
# key: s3-secret-key
# # Note: externalClusters is needed when recovering from an existing cnpg cluster
# externalClusters:
# # s3 instance recovery
# - name: &previousCluster postgres-v1
# barmanObjectStore:
# <<: *barmanObjectStore
# serverName: *previousCluster
# running instance
#- name: postgres
# connectionParameters:
# host: 10.1.0.23
# user: postgres
# dbname: postgres
# sslmode: require
# password:
# name: cloudnative-pg
# key: password
# Note: previousCluster needs to be set to the name of the previous
# cluster when recovering from an existing cnpg cluster
bootstrap:
# # s3 instance recovery
# recovery:
# source: *previousCluster
# recover from another running instance
initdb: {}
# import:
# type: monolith
# databases:
# - "*"
# roles:
# - "*"
# source:
# externalCluster: postgres
@@ -0,0 +1,24 @@
---
# yaml-language-server: $schema=https://kubernetes-schemas.pages.dev/external-secrets.io/externalsecret_v1beta1.json
apiVersion: external-secrets.io/v1beta1
kind: ExternalSecret
metadata:
name: &name cloudnative-pg
spec:
secretStoreRef:
kind: ClusterSecretStore
name: bitwarden-secrets-manager
target:
name: *name
template:
engineVersion: v2
data:
username: "{{ .POSTGRES_ADMIN }}"
password: "{{ .POSTGRES_ADMIN_PASS }}"
s3-key-id: "{{ .S3_KEY_ID }}"
s3-secret-key: "{{ .S3_SECRET_KEY }}"
dataFrom:
- extract:
key: postgres
- extract:
key: qnap
@@ -0,0 +1,11 @@
---
# yaml-language-server: $schema=https://json.schemastore.org/kustomization
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- ./externalsecret.yaml
- ./cluster.yaml
# - ./gatus.yaml
- ./prometheusrule.yaml
- ./scheduledbackup.yaml
- ./service.yaml
@@ -0,0 +1,67 @@
---
# yaml-language-server: $schema=https://kubernetes-schemas.pages.dev/monitoring.coreos.com/prometheusrule_v1.json
apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
name: cloudnative-pg-rules
labels:
prometheus: k8s
role: alert-rules
spec:
groups:
- name: cloudnative-pg.rules
rules:
- alert: LongRunningTransaction
annotations:
description: Pod {{ $labels.pod }} is taking more than 5 minutes (300 seconds) for a query.
summary: A query is taking longer than 5 minutes.
expr: |-
cnpg_backends_max_tx_duration_seconds > 300
for: 1m
labels:
severity: warning
- alert: BackendsWaiting
annotations:
description: Pod {{ $labels.pod }} has been waiting for longer than 5 minutes
summary: If a backend is waiting for longer than 5 minutes
expr: |-
cnpg_backends_waiting_total > 300
for: 1m
labels:
severity: warning
- alert: PGDatabase
annotations:
description: Over 150,000,000 transactions from frozen xid on pod {{ $labels.pod }}
summary: Number of transactions from the frozen XID to the current one
expr: |-
cnpg_pg_database_xid_age > 150000000
for: 1m
labels:
severity: warning
- alert: PGReplication
annotations:
description: Standby is lagging behind by over 300 seconds (5 minutes)
summary: The standby is lagging behind the primary
expr: |-
cnpg_pg_replication_lag > 300
for: 1m
labels:
severity: warning
- alert: LastFailedArchiveTime
annotations:
description: Archiving failed for {{ $labels.pod }}
summary: Checks the last time archiving failed. Will be < 0 when it has not failed.
expr: |-
(cnpg_pg_stat_archiver_last_failed_time - cnpg_pg_stat_archiver_last_archived_time) > 1
for: 1m
labels:
severity: warning
- alert: DatabaseDeadlockConflicts
annotations:
description: There are over 10 deadlock conflicts in {{ $labels.pod }}
summary: Checks the number of database conflicts
expr: |-
cnpg_pg_stat_database_deadlocks > 10
for: 1m
labels:
severity: warning
@@ -0,0 +1,12 @@
---
# yaml-language-server: $schema=https://kubernetes-schemas.pages.dev/postgresql.cnpg.io/scheduledbackup_v1.json
apiVersion: postgresql.cnpg.io/v1
kind: ScheduledBackup
metadata:
name: postgres
spec:
schedule: "@daily"
immediate: true
backupOwnerReference: self
cluster:
name: postgres
@@ -0,0 +1,68 @@
---
# yaml-language-server: $schema=https://kubernetesjsonschema.dev/v1.18.1-standalone-strict/service-v1.json
apiVersion: v1
kind: Service
metadata:
name: postgres-lb
annotations:
external-dns.alpha.kubernetes.io/hostname: postgres.${SECRET_INTERNAL_DOMAIN}
io.cilium/lb-ipam-ips: "${SVC_POSTGRES_ADDR}"
spec:
type: LoadBalancer
ports:
- name: postgres
port: 5432
protocol: TCP
targetPort: 5432
selector:
cnpg.io/cluster: postgres
role: primary
---
# yaml-language-server: $schema=https://kubernetesjsonschema.dev/v1.18.1-standalone-strict/service-v1.json
apiVersion: v1
kind: Service
metadata:
name: postgres-r
spec:
type: ClusterIP
ports:
- name: postgres
port: 5432
protocol: TCP
targetPort: 5432
selector:
cnpg.io/cluster: postgres
cnpg.io/podRole: instance
---
# yaml-language-server: $schema=https://kubernetesjsonschema.dev/v1.18.1-standalone-strict/service-v1.json
apiVersion: v1
kind: Service
metadata:
name: postgres-ro
spec:
type: ClusterIP
ports:
- name: postgres
port: 5432
protocol: TCP
targetPort: 5432
selector:
cnpg.io/cluster: postgres
role: replica
---
# yaml-language-server: $schema=https://kubernetesjsonschema.dev/v1.18.1-standalone-strict/service-v1.json
apiVersion: v1
kind: Service
metadata:
name: postgres-rw
spec:
type: ClusterIP
ports:
- name: postgres
port: 5432
protocol: TCP
targetPort: 5432
selector:
cnpg.io/cluster: postgres
role: primary
sessionAffinity: None
@@ -0,0 +1,47 @@
---
# yaml-language-server: $schema=https://kubernetes-schemas.pages.dev/kustomize.toolkit.fluxcd.io/kustomization_v1.json
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: &app cloudnative-pg
namespace: flux-system
spec:
targetNamespace: databases
commonMetadata:
labels:
app.kubernetes.io/name: *app
dependsOn:
- name: external-secrets-stores
- name: openebs-hostpath
path: ./kubernetes/apps/databases/cloudnative-pg/app
prune: true
sourceRef:
kind: GitRepository
name: home-kubernetes
wait: true
interval: 30m
retryInterval: 1m
timeout: 5m
---
# yaml-language-server: $schema=https://kubernetes-schemas.pages.dev/kustomize.toolkit.fluxcd.io/kustomization_v1.json
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: &app cloudnative-pg-cluster
namespace: flux-system
spec:
targetNamespace: databases
commonMetadata:
labels:
app.kubernetes.io/name: *app
dependsOn:
- name: cloudnative-pg
path: ./kubernetes/apps/databases/cloudnative-pg/cluster
prune: true
sourceRef:
kind: GitRepository
name: home-kubernetes
wait: true
interval: 30m
retryInterval: 1m
timeout: 5m
@@ -0,0 +1,8 @@
---
# yaml-language-server: $schema=https://json.schemastore.org/kustomization
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- ./namespace.yaml
- ./cloudnative-pg/ks.yaml
- ./redis/ks.yaml
+38
View File
@@ -0,0 +1,38 @@
---
# yaml-language-server: $schema=https://kubernetesjsonschema.dev/v1.18.1-standalone-strict/namespace-v1.json
apiVersion: v1
kind: Namespace
metadata:
name: databases
labels:
kustomize.toolkit.fluxcd.io/prune: disabled
# ---
# # yaml-language-server: $schema=https://kubernetes-schemas.pages.dev/notification.toolkit.fluxcd.io/provider_v1beta3.json
# apiVersion: notification.toolkit.fluxcd.io/v1beta3
# kind: Provider
# metadata:
# name: alert-manager
# namespace: databases
# spec:
# type: alertmanager
# address: http://alertmanager-operated.observability.svc.cluster.local:9093/api/v2/alerts/
# ---
# # yaml-language-server: $schema=https://kubernetes-schemas.pages.dev/notification.toolkit.fluxcd.io/alert_v1beta3.json
# apiVersion: notification.toolkit.fluxcd.io/v1beta3
# kind: Alert
# metadata:
# name: alert-manager
# namespace: databases
# spec:
# providerRef:
# name: alert-manager
# eventSeverity: error
# eventSources:
# - kind: HelmRelease
# name: "*"
# exclusionList:
# - "error.*lookup github\\.com"
# - "error.*lookup raw\\.githubusercontent\\.com"
# - "dial.*tcp.*timeout"
# - "waiting.*socket"
# suspend: false
@@ -0,0 +1,47 @@
---
# yaml-language-server: $schema=https://kubernetes-schemas.pages.dev/helm.toolkit.fluxcd.io/helmrelease_v2.json
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
name: &app redis
spec:
interval: 30m
chart:
spec:
chart: *app
version: 20.2.1
sourceRef:
kind: HelmRepository
name: bitnami
namespace: flux-system
install:
remediation:
retries: 3
upgrade:
cleanupOnFail: true
remediation:
strategy: rollback
retries: 3
values:
auth:
enabled: false
sentinel: false
master:
persistence:
enabled: false
replica:
persistence:
enabled: false
sentinel:
enabled: true
masterSet: redis-master
getMasterTimeout: 10
startupProbe:
failureThreshold: 2
persistence:
enabled: false
metrics:
enabled: true
serviceMonitor:
enabled: true
interval: 1m
@@ -0,0 +1,7 @@
---
# yaml-language-server: $schema=https://json.schemastore.org/kustomization
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
namespace: databases
resources:
- ./helmrelease.yaml
+24
View File
@@ -0,0 +1,24 @@
---
# yaml-language-server: $schema=https://kubernetes-schemas.pages.dev/kustomize.toolkit.fluxcd.io/kustomization_v1.json
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: &app redis
namespace: flux-system
spec:
targetNamespace: databases
commonMetadata:
labels:
app.kubernetes.io/name: *app
path: ./kubernetes/apps/databases/redis/app
prune: true
sourceRef:
kind: GitRepository
name: home-kubernetes
wait: true
interval: 30m
retryInterval: 1m
timeout: 5m
postBuild:
substitute:
APP: *app