From aed5c5c11eb98417e41bf39f19adf46dcac8a59b Mon Sep 17 00:00:00 2001 From: dvirlabs Date: Sun, 21 Sep 2025 01:23:35 +0300 Subject: [PATCH] Add tennotrade --- argocd-apps/tennotrade.yaml | 21 +++++ charts/tennotrade-chart/Chart.yaml | 6 ++ .../templates/headless-service.yaml | 14 ++++ charts/tennotrade-chart/templates/secret.yaml | 9 +++ .../tennotrade-chart/templates/service.yaml | 18 +++++ .../templates/statefullset.yaml | 78 +++++++++++++++++++ charts/tennotrade-chart/values.yaml | 34 ++++++++ manifests/tennotrade/values.yaml | 34 ++++++++ 8 files changed, 214 insertions(+) create mode 100644 argocd-apps/tennotrade.yaml create mode 100644 charts/tennotrade-chart/Chart.yaml create mode 100644 charts/tennotrade-chart/templates/headless-service.yaml create mode 100644 charts/tennotrade-chart/templates/secret.yaml create mode 100644 charts/tennotrade-chart/templates/service.yaml create mode 100644 charts/tennotrade-chart/templates/statefullset.yaml create mode 100644 charts/tennotrade-chart/values.yaml create mode 100644 manifests/tennotrade/values.yaml diff --git a/argocd-apps/tennotrade.yaml b/argocd-apps/tennotrade.yaml new file mode 100644 index 0000000..d7d70d5 --- /dev/null +++ b/argocd-apps/tennotrade.yaml @@ -0,0 +1,21 @@ +apiVersion: argoproj.io/v1alpha1 +kind: Application +metadata: + name: tennotrade + namespace: argocd +spec: + project: my-apps + source: + repoURL: https://git.dvirlabs.com/dvirlabs/my-apps.git + targetRevision: HEAD + path: charts/tennotrade-chart + helm: + valueFiles: + - ../../manifests/tennotrade/values.yaml + destination: + server: https://kubernetes.default.svc + namespace: my-apps + syncPolicy: + automated: + prune: true + selfHeal: true diff --git a/charts/tennotrade-chart/Chart.yaml b/charts/tennotrade-chart/Chart.yaml new file mode 100644 index 0000000..539375c --- /dev/null +++ b/charts/tennotrade-chart/Chart.yaml @@ -0,0 +1,6 @@ +apiVersion: v2 +name: warframe-db +description: PostgreSQL (StatefulSet) for Warframe trade backend +type: application +version: 0.2.0 +appVersion: "16" diff --git a/charts/tennotrade-chart/templates/headless-service.yaml b/charts/tennotrade-chart/templates/headless-service.yaml new file mode 100644 index 0000000..edd11b4 --- /dev/null +++ b/charts/tennotrade-chart/templates/headless-service.yaml @@ -0,0 +1,14 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ include "warframe-db.fullname" . }}-headless + labels: + app.kubernetes.io/name: {{ include "warframe-db.name" . }} +spec: + clusterIP: None + ports: + - name: postgres + port: {{ .Values.postgres.port }} + targetPort: {{ .Values.postgres.port }} + selector: + app.kubernetes.io/name: {{ include "warframe-db.name" . }} diff --git a/charts/tennotrade-chart/templates/secret.yaml b/charts/tennotrade-chart/templates/secret.yaml new file mode 100644 index 0000000..6b8bd7e --- /dev/null +++ b/charts/tennotrade-chart/templates/secret.yaml @@ -0,0 +1,9 @@ +apiVersion: v1 +kind: Secret +metadata: + name: {{ include "warframe-db.fullname" . }} + labels: + app.kubernetes.io/name: {{ include "warframe-db.name" . }} +type: Opaque +stringData: + POSTGRES_PASSWORD: {{ .Values.postgres.password | quote }} diff --git a/charts/tennotrade-chart/templates/service.yaml b/charts/tennotrade-chart/templates/service.yaml new file mode 100644 index 0000000..d1ae57d --- /dev/null +++ b/charts/tennotrade-chart/templates/service.yaml @@ -0,0 +1,18 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ include "warframe-db.fullname" . }} + labels: + app.kubernetes.io/name: {{ include "warframe-db.name" . }} + {{- with .Values.service.annotations }} + annotations: +{{ toYaml . | indent 4 }} + {{- end }} +spec: + type: {{ .Values.service.type }} + ports: + - name: postgres + port: {{ .Values.service.port }} + targetPort: {{ .Values.postgres.port }} + selector: + app.kubernetes.io/name: {{ include "warframe-db.name" . }} diff --git a/charts/tennotrade-chart/templates/statefullset.yaml b/charts/tennotrade-chart/templates/statefullset.yaml new file mode 100644 index 0000000..05adbdf --- /dev/null +++ b/charts/tennotrade-chart/templates/statefullset.yaml @@ -0,0 +1,78 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: {{ include "warframe-db.fullname" . }} + labels: + app.kubernetes.io/name: {{ include "warframe-db.name" . }} +spec: + serviceName: {{ include "warframe-db.fullname" . }}-headless + replicas: 1 + selector: + matchLabels: + app.kubernetes.io/name: {{ include "warframe-db.name" . }} + template: + metadata: + labels: + app.kubernetes.io/name: {{ include "warframe-db.name" . }} + spec: + securityContext: + fsGroup: 999 # postgres user in official image + containers: + - name: postgres + image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" + imagePullPolicy: {{ .Values.image.pullPolicy }} + ports: + - name: postgres + containerPort: {{ .Values.postgres.port }} + env: + - name: POSTGRES_USER + value: {{ .Values.postgres.user | quote }} + - name: POSTGRES_DB + value: {{ .Values.postgres.database | quote }} + - name: POSTGRES_PASSWORD + valueFrom: + secretKeyRef: + name: {{ include "warframe-db.fullname" . }} + key: POSTGRES_PASSWORD + volumeMounts: + - name: data + mountPath: /var/lib/postgresql/data + {{- if .Values.probes.enabled }} + readinessProbe: + exec: + command: ["sh","-c","pg_isready -U $POSTGRES_USER -d $POSTGRES_DB -h 127.0.0.1 -p {{ .Values.postgres.port }}"] + initialDelaySeconds: {{ .Values.probes.initialDelaySeconds }} + periodSeconds: {{ .Values.probes.periodSeconds }} + timeoutSeconds: {{ .Values.probes.timeoutSeconds }} + failureThreshold: {{ .Values.probes.failureThreshold }} + livenessProbe: + exec: + command: ["sh","-c","pg_isready -U $POSTGRES_USER -d $POSTGRES_DB -h 127.0.0.1 -p {{ .Values.postgres.port }}"] + initialDelaySeconds: {{ add .Values.probes.initialDelaySeconds 10 }} + periodSeconds: {{ .Values.probes.periodSeconds }} + timeoutSeconds: {{ .Values.probes.timeoutSeconds }} + failureThreshold: {{ .Values.probes.failureThreshold }} + {{- end }} + {{- with .Values.nodeSelector }} + nodeSelector: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: +{{ toYaml . | indent 8 }} + {{- end }} + volumeClaimTemplates: + - metadata: + name: data + spec: + accessModes: ["ReadWriteOnce"] + resources: + requests: + storage: {{ .Values.persistence.size }} + {{- if .Values.persistence.storageClassName }} + storageClassName: {{ .Values.persistence.storageClassName }} + {{- end }} diff --git a/charts/tennotrade-chart/values.yaml b/charts/tennotrade-chart/values.yaml new file mode 100644 index 0000000..46d5e8a --- /dev/null +++ b/charts/tennotrade-chart/values.yaml @@ -0,0 +1,34 @@ +image: + repository: postgres + tag: "16" + pullPolicy: IfNotPresent + +postgres: + user: wfuser + password: wfpass # will be stored in a Secret + database: wf + port: 5432 + +service: + type: ClusterIP + port: 5432 + # Optional annotations: + annotations: {} + +persistence: + enabled: true + size: 5Gi + storageClassName: "nfs-client" # e.g., nfs-client / longhorn / left empty = default + +resources: {} +nodeSelector: {} +tolerations: [] +affinity: {} + +# Simple liveness/readiness probes (tuned for small clusters) +probes: + enabled: true + initialDelaySeconds: 20 + periodSeconds: 10 + timeoutSeconds: 3 + failureThreshold: 6 diff --git a/manifests/tennotrade/values.yaml b/manifests/tennotrade/values.yaml new file mode 100644 index 0000000..46d5e8a --- /dev/null +++ b/manifests/tennotrade/values.yaml @@ -0,0 +1,34 @@ +image: + repository: postgres + tag: "16" + pullPolicy: IfNotPresent + +postgres: + user: wfuser + password: wfpass # will be stored in a Secret + database: wf + port: 5432 + +service: + type: ClusterIP + port: 5432 + # Optional annotations: + annotations: {} + +persistence: + enabled: true + size: 5Gi + storageClassName: "nfs-client" # e.g., nfs-client / longhorn / left empty = default + +resources: {} +nodeSelector: {} +tolerations: [] +affinity: {} + +# Simple liveness/readiness probes (tuned for small clusters) +probes: + enabled: true + initialDelaySeconds: 20 + periodSeconds: 10 + timeoutSeconds: 3 + failureThreshold: 6