cluster

Infrastructure files for Nordgedanken and Midnightthoughts.
git clone git://archive.git.mtrnord.blog/MTRNord/cluster.git
Log | Files | Refs | README

commit fdd88b8d5e173a19a322c70a1e0e22c1cf35e84f
parent ad85f311f90fdd201488fe0798f95c6b6d85bc5d
Author: MTRNord <MTRNord@users.noreply.github.com>
Date:   Mon,  4 Aug 2025 10:48:25 +0200

Migrate actual budget

Diffstat:
Mapps/base/actualbudget-server/release.yaml | 64++++++++++++++++++++++++++++++++--------------------------------
Mapps/talos_cluster/actualbudget-server/kustomization.yaml | 2+-
Mapps/talos_cluster/actualbudget-server/release.yaml | 65++++++++++++++++++++++++++++++++---------------------------------
Mapps/talos_cluster/draupnir4all/deployment.yaml | 180+++++++++++++++++++++++++++++++++++++------------------------------------------
Mapps/talos_cluster/envoy-gateway/gateway_settings.yaml | 24++++++++++++------------
5 files changed, 162 insertions(+), 173 deletions(-)

diff --git a/apps/base/actualbudget-server/release.yaml b/apps/base/actualbudget-server/release.yaml @@ -32,44 +32,44 @@ spec: image: ghcr.io/actualbudget/actual:25.7.1 imagePullPolicy: IfNotPresent resources: - limits: - cpu: 100m - memory: 128Mi - requests: - cpu: 100m - memory: 128Mi + limits: + cpu: 100m + memory: 128Mi + requests: + cpu: 100m + memory: 128Mi env: - - name: NODE_ENV - value: "production" + - name: NODE_ENV + value: "production" # - name: DEBUG # value: "*" ports: - - containerPort: 5006 + - containerPort: 5006 livenessProbe: - httpGet: - path: / - port: 5006 - initialDelaySeconds: 30 - periodSeconds: 10 - timeoutSeconds: 5 - successThreshold: 1 - failureThreshold: 3 + httpGet: + path: / + port: 5006 + initialDelaySeconds: 30 + periodSeconds: 10 + timeoutSeconds: 5 + successThreshold: 1 + failureThreshold: 3 readinessProbe: - httpGet: - path: / - port: 5006 - initialDelaySeconds: 30 - periodSeconds: 10 - timeoutSeconds: 5 - successThreshold: 1 - failureThreshold: 3 + httpGet: + path: / + port: 5006 + initialDelaySeconds: 30 + periodSeconds: 10 + timeoutSeconds: 5 + successThreshold: 1 + failureThreshold: 3 volumeMounts: - - name: actualbudget-server - mountPath: /data + - name: actualbudget-server + mountPath: /data volumes: - name: actualbudget-server persistentVolumeClaim: - claimName: actualbudget-server + claimName: actualbudget-server --- apiVersion: v1 kind: Service @@ -97,8 +97,8 @@ spec: - budget.midnightthoughts.space rules: - backendRefs: - - name: actualbudget-server-service - port: 5006 + - name: actualbudget-server-service + port: 5006 timeouts: - request: 240s - backendRequest: 0s + request: 240s + backendRequest: 0s diff --git a/apps/talos_cluster/actualbudget-server/kustomization.yaml b/apps/talos_cluster/actualbudget-server/kustomization.yaml @@ -3,4 +3,4 @@ kind: Kustomization namespace: actualbudget-server resources: - pvc.yaml - #- release.yaml + - release.yaml diff --git a/apps/talos_cluster/actualbudget-server/release.yaml b/apps/talos_cluster/actualbudget-server/release.yaml @@ -1,4 +1,3 @@ ---- apiVersion: apps/v1 kind: Deployment metadata: @@ -19,44 +18,44 @@ spec: image: ghcr.io/actualbudget/actual:25.8.0 imagePullPolicy: IfNotPresent resources: - limits: - cpu: 100m - memory: 128Mi - requests: - cpu: 100m - memory: 128Mi + limits: + cpu: 100m + memory: 128Mi + requests: + cpu: 100m + memory: 128Mi env: - - name: NODE_ENV - value: "production" + - name: NODE_ENV + value: "production" # - name: DEBUG # value: "*" ports: - - containerPort: 5006 + - containerPort: 5006 livenessProbe: - httpGet: - path: / - port: 5006 - initialDelaySeconds: 30 - periodSeconds: 10 - timeoutSeconds: 5 - successThreshold: 1 - failureThreshold: 3 + httpGet: + path: / + port: 5006 + initialDelaySeconds: 30 + periodSeconds: 10 + timeoutSeconds: 5 + successThreshold: 1 + failureThreshold: 3 readinessProbe: - httpGet: - path: / - port: 5006 - initialDelaySeconds: 30 - periodSeconds: 10 - timeoutSeconds: 5 - successThreshold: 1 - failureThreshold: 3 + httpGet: + path: / + port: 5006 + initialDelaySeconds: 30 + periodSeconds: 10 + timeoutSeconds: 5 + successThreshold: 1 + failureThreshold: 3 volumeMounts: - - name: actualbudget-server - mountPath: /data + - name: actualbudget-server + mountPath: /data volumes: - name: actualbudget-server persistentVolumeClaim: - claimName: actualbudget-server + claimName: actualbudget-server --- apiVersion: v1 kind: Service @@ -84,8 +83,8 @@ spec: - budget.midnightthoughts.space rules: - backendRefs: - - name: actualbudget-server-service - port: 5006 + - name: actualbudget-server-service + port: 5006 timeouts: - request: 240s - backendRequest: 0s + request: 240s + backendRequest: 0s diff --git a/apps/talos_cluster/draupnir4all/deployment.yaml b/apps/talos_cluster/draupnir4all/deployment.yaml @@ -42,11 +42,11 @@ spec: podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: - matchExpressions: - - key: app - operator: In - values: - - draupnir4all + matchExpressions: + - key: app + operator: In + values: + - draupnir4all topologyKey: "kubernetes.io/hostname" containers: - name: draupnir4all @@ -66,107 +66,97 @@ spec: # - name: TRACING_METRIC_URL # value: http://tempo.monitoring.svc.cluster.local:4318/v1/metrics env: - - name: NODE_OPTIONS - value: "--trace-warnings" + - name: NODE_OPTIONS + value: "--trace-warnings" command: ["./draupnir-entrypoint.sh"] - args: - [ - "appservice", - "-c", - "/data/config/config.appservice.yaml", - "-f", - "/data/config/draupnir-registration.yaml", - "--draupnir-config", - "/data/config/draupnir-config.yaml", - "-p", - "9000", - ] + args: ["appservice", "-c", "/data/config/config.appservice.yaml", "-f", "/data/config/draupnir-registration.yaml", + "--draupnir-config", "/data/config/draupnir-config.yaml", "-p", "9000"] resources: - limits: {} - requests: - memory: "344Mi" - cpu: "252m" + limits: {} + requests: + memory: "344Mi" + cpu: "252m" securityContext: - runAsUser: 1000 - runAsGroup: 1000 - readOnlyRootFilesystem: true + runAsUser: 1000 + runAsGroup: 1000 + readOnlyRootFilesystem: true ports: - - containerPort: 9001 - name: api - protocol: TCP - - containerPort: 9000 - name: appservice - protocol: TCP + - containerPort: 9001 + name: api + protocol: TCP + - containerPort: 9000 + name: appservice + protocol: TCP volumeMounts: - - name: configs - mountPath: "/data/config" - readOnly: true - - mountPath: /data/storage - name: storage - - mountPath: /tmp - name: tmp + - name: configs + mountPath: "/data/config" + readOnly: true + - mountPath: /data/storage + name: storage + - mountPath: /tmp + name: tmp livenessProbe: - httpGet: - path: /healthz - port: appservice - scheme: HTTP - initialDelaySeconds: 15 - periodSeconds: 10 + httpGet: + path: /healthz + port: appservice + scheme: HTTP + initialDelaySeconds: 15 + periodSeconds: 10 startupProbe: - httpGet: - path: /healthz - port: appservice - initialDelaySeconds: 15 - failureThreshold: 30 - periodSeconds: 10 - # - name: draupnir4all-web - # image: ghcr.io/mtrnord/draupnir4all-web:latest - # imagePullPolicy: Always - # env: - # - name: SESSION_SECRET - # valueFrom: - # secretKeyRef: - # name: draupnir4all-web - # key: session-secret - # - name: D4ALL_INSTANCE_ADDRESS - # value: "http://localhost:9001" - # resources: - # limits: {} - # requests: - # memory: "344Mi" - # cpu: "252m" - # securityContext: - # runAsUser: 1000 - # runAsGroup: 1000 - # readOnlyRootFilesystem: true - # ports: - # - containerPort: 3000 - # name: web - # protocol: TCP - # volumeMounts: - # - mountPath: /tmp - # name: tmp - # livenessProbe: - # httpGet: - # path: / - # port: web - # scheme: HTTP - # initialDelaySeconds: 15 - # periodSeconds: 10 - # startupProbe: - # httpGet: - # path: / - # port: web - # initialDelaySeconds: 15 - # failureThreshold: 30 - # periodSeconds: 10 + httpGet: + path: /healthz + port: appservice + initialDelaySeconds: 15 + failureThreshold: 30 + periodSeconds: 10 + # - name: draupnir4all-web + # image: ghcr.io/mtrnord/draupnir4all-web:latest + # imagePullPolicy: Always + # env: + # - name: SESSION_SECRET + # valueFrom: + # secretKeyRef: + # name: draupnir4all-web + # key: session-secret + # - name: D4ALL_INSTANCE_ADDRESS + # value: "http://localhost:9001" + # resources: + # limits: {} + # requests: + # memory: "344Mi" + # cpu: "252m" + # securityContext: + # runAsUser: 1000 + # runAsGroup: 1000 + # readOnlyRootFilesystem: true + # ports: + # - containerPort: 3000 + # name: web + # protocol: TCP + # volumeMounts: + # - mountPath: /tmp + # name: tmp + # livenessProbe: + # httpGet: + # path: / + # port: web + # scheme: HTTP + # initialDelaySeconds: 15 + # periodSeconds: 10 + # startupProbe: + # httpGet: + # path: / + # port: web + # initialDelaySeconds: 15 + # failureThreshold: 30 + # periodSeconds: 10 volumes: - name: configs secret: - secretName: draupnir-appservice + secretName: draupnir-appservice - name: storage persistentVolumeClaim: - claimName: d4all-persistent-storage + claimName: d4all-persistent-storage - name: tmp emptyDir: - sizeLimit: 2048Mi + sizeLimit: 2048Mi diff --git a/apps/talos_cluster/envoy-gateway/gateway_settings.yaml b/apps/talos_cluster/envoy-gateway/gateway_settings.yaml @@ -175,6 +175,18 @@ spec: certificateRefs: - kind: Secret name: vault.midnightthoughts.space-tls + - name: https-midnightthoughts-budget + protocol: HTTPS + hostname: "budget.midnightthoughts.space" + port: 443 + allowedRoutes: + namespaces: + from: "All" + tls: + mode: Terminate + certificateRefs: + - kind: Secret + name: budget.midnightthoughts.space-tls # - name: https-docuseal-midnightthoughts # protocol: HTTPS # hostname: "docuseal.midnightthoughts.space" @@ -247,18 +259,6 @@ spec: # certificateRefs: # - kind: Secret # name: webhook.status.midnightthoughts.space-tls - # - name: https-midnightthoughts-budget - # protocol: HTTPS - # hostname: "budget.midnightthoughts.space" - # port: 443 - # allowedRoutes: - # namespaces: - # from: "All" - # tls: - # mode: Terminate - # certificateRefs: - # - kind: Secret - # name: budget.midnightthoughts.space-tls # - name: https-midnightthoughts-bugzilla # protocol: HTTPS # hostname: "bugzilla.midnightthoughts.space"