feat: add siriusdevops CNPG cluster + waitlist API K8s manifests (#112)
- New CNPG PostgreSQL cluster (siriusdevops-pgdb) in customer1 namespace - Single-instance, 20Gi storage, GCS backups to siriusdevops-backups/ - Waitlist database definition (waitlist-db.yaml) - Scheduled backup manifest - Waitlist API deployment, service, HTTPRoute, and Telegram secret placeholder - Kustomization wiring for both siriusdevops-db and waitlist-api
This commit is contained in:
parent
e3b56d397d
commit
36b1d637f1
9 changed files with 232 additions and 0 deletions
8
apps/base/customer1/siriusdevops-db/kustomization.yaml
Normal file
8
apps/base/customer1/siriusdevops-db/kustomization.yaml
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||
kind: Kustomization
|
||||
|
||||
resources:
|
||||
- pg-cluster-siriusdevops.yaml
|
||||
- waitlist-db-credentials.yaml
|
||||
- waitlist-db.yaml
|
||||
- siriusdevops-scheduled-backup.yaml
|
||||
|
|
@ -0,0 +1,45 @@
|
|||
apiVersion: postgresql.cnpg.io/v1
|
||||
kind: Cluster
|
||||
metadata:
|
||||
name: siriusdevops-pgdb
|
||||
namespace: customer1
|
||||
|
||||
spec:
|
||||
instances: 1
|
||||
imageName: ghcr.io/cloudnative-pg/postgresql:15.2
|
||||
storage:
|
||||
size: 20Gi
|
||||
|
||||
managed:
|
||||
roles:
|
||||
- name: waitlist
|
||||
ensure: present
|
||||
login: true
|
||||
passwordSecret:
|
||||
name: waitlist-db-credentials
|
||||
|
||||
bootstrap:
|
||||
initdb:
|
||||
database: waitlist
|
||||
owner: waitlist
|
||||
secret:
|
||||
name: waitlist-db-credentials
|
||||
|
||||
serviceAccountTemplate:
|
||||
metadata:
|
||||
name: cnpg-backup-sa
|
||||
annotations:
|
||||
iam.gke.io/gcp-service-account: cnpg-backup-sa@devops-lab-cluster.iam.gserviceaccount.com
|
||||
|
||||
backup:
|
||||
barmanObjectStore:
|
||||
destinationPath: "gs://customer1_db_backup/siriusdevops-backups/"
|
||||
googleCredentials:
|
||||
gkeEnvironment: true
|
||||
wal:
|
||||
compression: gzip
|
||||
data:
|
||||
compression: gzip
|
||||
jobs: 2
|
||||
retentionPolicy: "30d"
|
||||
target: primary
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
apiVersion: postgresql.cnpg.io/v1
|
||||
kind: ScheduledBackup
|
||||
metadata:
|
||||
name: siriusdevops-daily-backup
|
||||
namespace: customer1
|
||||
spec:
|
||||
schedule: "0 4 * * *" # Daily at 04:00 UTC
|
||||
suspend: false
|
||||
immediate: false
|
||||
backupOwnerReference: self
|
||||
cluster:
|
||||
name: siriusdevops-pgdb
|
||||
|
|
@ -0,0 +1,13 @@
|
|||
apiVersion: v1
|
||||
kind: Secret
|
||||
metadata:
|
||||
name: waitlist-db-credentials
|
||||
namespace: customer1
|
||||
type: Opaque
|
||||
stringData:
|
||||
username: waitlist
|
||||
password: CHANGEME
|
||||
sops:
|
||||
age:
|
||||
- recipient: age1uuxf066xuuqgvjppxfcmqkwfcufnwp3wcwnl9h20g9k4l8nkw9jsaungf7
|
||||
encrypted_regex: ^(data|stringData)$
|
||||
10
apps/base/customer1/siriusdevops-db/waitlist-db.yaml
Normal file
10
apps/base/customer1/siriusdevops-db/waitlist-db.yaml
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
apiVersion: postgresql.cnpg.io/v1
|
||||
kind: Database
|
||||
metadata:
|
||||
name: waitlist-db
|
||||
namespace: customer1
|
||||
spec:
|
||||
cluster:
|
||||
name: siriusdevops-pgdb
|
||||
name: waitlist
|
||||
owner: waitlist
|
||||
104
apps/base/customer1/waitlist-api/deployment.yaml
Normal file
104
apps/base/customer1/waitlist-api/deployment.yaml
Normal file
|
|
@ -0,0 +1,104 @@
|
|||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: waitlist-api
|
||||
namespace: customer1
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: waitlist-api
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: waitlist-api
|
||||
spec:
|
||||
containers:
|
||||
- name: api
|
||||
image: ghcr.io/sirius0xdev/waitlist-api:latest
|
||||
imagePullPolicy: Always
|
||||
ports:
|
||||
- containerPort: 8080
|
||||
protocol: TCP
|
||||
env:
|
||||
- name: DB_HOST
|
||||
value: "siriusdevops-pgdb-rw.customer1.svc.cluster.local"
|
||||
- name: DB_PORT
|
||||
value: "5432"
|
||||
- name: DB_NAME
|
||||
value: "waitlist"
|
||||
- name: DB_USER
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: waitlist-db-credentials
|
||||
key: username
|
||||
- name: DB_PASSWORD
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: waitlist-db-credentials
|
||||
key: password
|
||||
- name: TELEGRAM_BOT_TOKEN
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: waitlist-telegram-secret
|
||||
key: bot_token
|
||||
- name: TELEGRAM_CHAT_ID
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: waitlist-telegram-secret
|
||||
key: chat_id
|
||||
resources:
|
||||
requests:
|
||||
cpu: 50m
|
||||
memory: 128Mi
|
||||
limits:
|
||||
cpu: 200m
|
||||
memory: 256Mi
|
||||
|
||||
startupProbe:
|
||||
httpGet:
|
||||
path: /healthz
|
||||
port: 8080
|
||||
scheme: HTTP
|
||||
initialDelaySeconds: 10
|
||||
periodSeconds: 5
|
||||
timeoutSeconds: 5
|
||||
failureThreshold: 30
|
||||
successThreshold: 1
|
||||
|
||||
readinessProbe:
|
||||
httpGet:
|
||||
path: /healthz
|
||||
port: 8080
|
||||
scheme: HTTP
|
||||
initialDelaySeconds: 3
|
||||
periodSeconds: 5
|
||||
timeoutSeconds: 5
|
||||
failureThreshold: 3
|
||||
successThreshold: 1
|
||||
|
||||
livenessProbe:
|
||||
httpGet:
|
||||
path: /healthz
|
||||
port: 8080
|
||||
scheme: HTTP
|
||||
initialDelaySeconds: 30
|
||||
periodSeconds: 10
|
||||
timeoutSeconds: 5
|
||||
failureThreshold: 3
|
||||
successThreshold: 1
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: waitlist-api-svc
|
||||
namespace: customer1
|
||||
spec:
|
||||
selector:
|
||||
app: waitlist-api
|
||||
ports:
|
||||
- protocol: TCP
|
||||
port: 80
|
||||
targetPort: 8080
|
||||
type: ClusterIP
|
||||
21
apps/base/customer1/waitlist-api/http-route.yaml
Normal file
21
apps/base/customer1/waitlist-api/http-route.yaml
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
apiVersion: gateway.networking.k8s.io/v1
|
||||
kind: HTTPRoute
|
||||
metadata:
|
||||
name: waitlist-api-route
|
||||
namespace: customer1
|
||||
spec:
|
||||
parentRefs:
|
||||
- name: external-http-gateway
|
||||
hostnames:
|
||||
- "sirius-sec.com"
|
||||
- "www.sirius-sec.com"
|
||||
- "agentforge.ai"
|
||||
- "www.agentforge.ai"
|
||||
rules:
|
||||
- matches:
|
||||
- path:
|
||||
type: PathPrefix
|
||||
value: /api/waitlist
|
||||
backendRefs:
|
||||
- name: waitlist-api-svc
|
||||
port: 80
|
||||
6
apps/base/customer1/waitlist-api/kustomization.yaml
Normal file
6
apps/base/customer1/waitlist-api/kustomization.yaml
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||
kind: Kustomization
|
||||
resources:
|
||||
- deployment.yaml
|
||||
- waitlist-telegram-secret.yaml
|
||||
- http-route.yaml
|
||||
|
|
@ -0,0 +1,13 @@
|
|||
apiVersion: v1
|
||||
kind: Secret
|
||||
metadata:
|
||||
name: waitlist-telegram-secret
|
||||
namespace: customer1
|
||||
type: Opaque
|
||||
stringData:
|
||||
bot_token: CHANGEME
|
||||
chat_id: CHANGEME
|
||||
sops:
|
||||
age:
|
||||
- recipient: age1uuxf066xuuqgvjppxfcmqkwfcufnwp3wcwnl9h20g9k4l8nkw9jsaungf7
|
||||
encrypted_regex: ^(data|stringData)$
|
||||
Loading…
Add table
Reference in a new issue