cluster

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

commit 36214ecfdedcaa6dd1d35be20f7490d725893dc6
parent 095efb276df0c053092ac310e6f4b701e7b3a7ba
Author: MTRNord <mtrnord1@gmail.com>
Date:   Mon, 28 Apr 2025 11:23:53 +0200

Deploy draupnir4all-web

Diffstat:
Aapps/2024_cluster/secrets/draupnir4all-web.yaml | 57+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mapps/2024_cluster/secrets/kustomization.yaml | 1+
Mapps/base/matrix/draupnir4all/deployment.yaml | 141++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------------
Mapps/base/matrix/draupnir4all/service.yaml | 20++++++++++++++++++++
4 files changed, 175 insertions(+), 44 deletions(-)

diff --git a/apps/2024_cluster/secrets/draupnir4all-web.yaml b/apps/2024_cluster/secrets/draupnir4all-web.yaml @@ -0,0 +1,57 @@ +apiVersion: v1 +kind: Secret +metadata: + name: draupnir4all-web + namespace: matrix +type: Opaque +stringData: + session-secret: ENC[AES256_GCM,data:3DuYllirgKK4m1/J/PRGNf6MDTwPk9ecpL/Ti4Y4Dz96q3JYbkbMp+xeCJAMXpdPVv5FweTTlBaGceVCX+Bugg==,iv:e1w26ng6jguk+fYX7U0mwN9frXKM/srgrReHzV67yA4=,tag:aAwSW5ooUvCqtP1eS/4MJw==,type:str] +sops: + kms: [] + gcp_kms: [] + azure_kv: [] + hc_vault: [] + age: + - recipient: age1esjyg2qfy49awv0ptkzvpk425adczjr38m37w2mmcahzc4p8n54sll2nzh + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBWV1RoOVlrUmNBQ0lYVndv + aThXbE5aMjE0dVU2MHlFaTh4SXUzSGVXc0hFCmxlZ0JqU2V2aGNGZ3V0b2ZBWk9q + cmlPdllRU1g1M3BwNXoxOFErNzJ0WTQKLS0tIDNVd2d2dTFWd2Z2Z1l1WURVbVpJ + WWQreDVmVHMwbjZ1ZWpxTmI2alluaGcKSgClGHGhWC0extu+MGGqUWvqAVQh4LoN + cK2UyZBOor6Mm0dWHg7cZRGPJocGZ9fkyBLsJMBWa+DSWIs3WeOD8w== + -----END AGE ENCRYPTED FILE----- + lastmodified: "2025-04-28T09:22:52Z" + mac: ENC[AES256_GCM,data:gyUWaw9muoP/t8tOGvSFzrKydhpzj0olAdco4UNVUAC42PXC94oxNYlA2Kr0KxN5zQudpBwnJHNpfIUKPV2VqNu0e6jNWRlJOpk9/p6Kbbzlq5LG2QVA4qNEV9F3HcnhzNF+JbQ70KesPMfCSOVS+caHKwd2zZgIxGxe2k7xRdY=,iv:2EVTJpuHFO87BNRR7BRSwcblK2MMDCJEkAq3HHqfFNY=,tag:ANRnXMVYZn1M8tPDD6ieww==,type:str] + pgp: [] + encrypted_regex: ^(root_password|rspamd_password|pgdb_password|matrix_access_token|pgdb_remote_url|hmac_secret_key|adminPassword|adminEmail|jenkinsAdminEmail|securityRealm|gerrit.config|routing_key|DATABASE_URL|SMTP_PASSWORD|SECRET_KEY_BASE|admin_password|extraCommands|key|clickhouseDatabaseURL|databaseURL|client_id|client_secret|secret_key_base|otp_secret|private_key|public_key|primaryKey|deterministicKey|keyDerivationSalt|token|clientId|secretKey|installationId|installationKey|uriOverride|adminToken.value|password.value|sql_password|erlangCookie|AUTHENTICATION_PASSWORD|ROOM_API_SECRET_KEY|adminPassword|configPassword|adminUser|configUser|MAIL_PASSWORD|APP_KEY|api_key|api_secret|keys|livekit_key|livekit_secret|secret_key|admin_pass|admin_email|mariadbPassword|mariadbRootPassword|privateKey|data|stringData|PASSWD|password|pass|postgresPassword|postgresqlPassword|redminePassword|smtpPassword|registration_shared_secret|shared_secret|secret|admin_token|integrationKey|rootPassword)$ + version: 3.9.1 +--- +apiVersion: v1 +data: + .dockerconfigjson: ENC[AES256_GCM,data:ZZJzEUNanUg+0uvgB/qZfnLqdLmA6xgzEjvhSWK62pT48JuHk4xn7jJ6Axwx1E4lxThL9GKznNRabz7H4ihcpVXu+AsCOsvLc0PSIeUT5ER9Ut5TRpi/+k7sYLVoinaxfmfQeirueEfEC7D6djeYBOqOY1zcwRT+SDBbdUV5i/dScpsB5VFljHMwaMEIvCEbkdRoDxZcPop+jN9lURkTydaqPcUiWIVUAnWAWCSIgKhbMQJREkN4gEak7XhLgfSacu696w==,iv:0qJ2U6SXxzAX5Eb/kH2ZDyAmCF3O9jFGBHMts/SjAQA=,tag:6XCtGd1TNIL64ZJulPqNnw==,type:str] +kind: Secret +metadata: + name: ghcr-pull + namespace: matrix +type: kubernetes.io/dockerconfigjson +sops: + kms: [] + gcp_kms: [] + azure_kv: [] + hc_vault: [] + age: + - recipient: age1esjyg2qfy49awv0ptkzvpk425adczjr38m37w2mmcahzc4p8n54sll2nzh + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBWV1RoOVlrUmNBQ0lYVndv + aThXbE5aMjE0dVU2MHlFaTh4SXUzSGVXc0hFCmxlZ0JqU2V2aGNGZ3V0b2ZBWk9q + cmlPdllRU1g1M3BwNXoxOFErNzJ0WTQKLS0tIDNVd2d2dTFWd2Z2Z1l1WURVbVpJ + WWQreDVmVHMwbjZ1ZWpxTmI2alluaGcKSgClGHGhWC0extu+MGGqUWvqAVQh4LoN + cK2UyZBOor6Mm0dWHg7cZRGPJocGZ9fkyBLsJMBWa+DSWIs3WeOD8w== + -----END AGE ENCRYPTED FILE----- + lastmodified: "2025-04-28T09:22:52Z" + mac: ENC[AES256_GCM,data:gyUWaw9muoP/t8tOGvSFzrKydhpzj0olAdco4UNVUAC42PXC94oxNYlA2Kr0KxN5zQudpBwnJHNpfIUKPV2VqNu0e6jNWRlJOpk9/p6Kbbzlq5LG2QVA4qNEV9F3HcnhzNF+JbQ70KesPMfCSOVS+caHKwd2zZgIxGxe2k7xRdY=,iv:2EVTJpuHFO87BNRR7BRSwcblK2MMDCJEkAq3HHqfFNY=,tag:ANRnXMVYZn1M8tPDD6ieww==,type:str] + pgp: [] + encrypted_regex: ^(root_password|rspamd_password|pgdb_password|matrix_access_token|pgdb_remote_url|hmac_secret_key|adminPassword|adminEmail|jenkinsAdminEmail|securityRealm|gerrit.config|routing_key|DATABASE_URL|SMTP_PASSWORD|SECRET_KEY_BASE|admin_password|extraCommands|key|clickhouseDatabaseURL|databaseURL|client_id|client_secret|secret_key_base|otp_secret|private_key|public_key|primaryKey|deterministicKey|keyDerivationSalt|token|clientId|secretKey|installationId|installationKey|uriOverride|adminToken.value|password.value|sql_password|erlangCookie|AUTHENTICATION_PASSWORD|ROOM_API_SECRET_KEY|adminPassword|configPassword|adminUser|configUser|MAIL_PASSWORD|APP_KEY|api_key|api_secret|keys|livekit_key|livekit_secret|secret_key|admin_pass|admin_email|mariadbPassword|mariadbRootPassword|privateKey|data|stringData|PASSWD|password|pass|postgresPassword|postgresqlPassword|redminePassword|smtpPassword|registration_shared_secret|shared_secret|secret|admin_token|integrationKey|rootPassword)$ + version: 3.9.1 diff --git a/apps/2024_cluster/secrets/kustomization.yaml b/apps/2024_cluster/secrets/kustomization.yaml @@ -22,3 +22,4 @@ resources: - archivebox.yaml - irc.yaml - heisenbridge.yaml + - draupnir4all-web.yaml diff --git a/apps/base/matrix/draupnir4all/deployment.yaml b/apps/base/matrix/draupnir4all/deployment.yaml @@ -36,15 +36,17 @@ spec: app.kubernetes.io/instance: main-process app.kubernetes.io/name: draupnir4all spec: + imagePullSecrets: + - name: ghcr-pull affinity: podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: - matchExpressions: - - key: app - operator: In - values: - - draupnir4all + matchExpressions: + - key: app + operator: In + values: + - draupnir4all topologyKey: "kubernetes.io/hostname" containers: - name: draupnir4all @@ -64,56 +66,107 @@ 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: widgets - protocol: TCP - - containerPort: 9000 - name: appservice - protocol: TCP + - containerPort: 9001 + name: widgets + 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 + 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: appservice + scheme: HTTP + initialDelaySeconds: 15 + periodSeconds: 10 + startupProbe: + httpGet: + path: / + port: appservice + 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/base/matrix/draupnir4all/service.yaml b/apps/base/matrix/draupnir4all/service.yaml @@ -17,3 +17,23 @@ spec: targetPort: widgets protocol: TCP name: widgets + - port: 3000 + targetPort: web + protocol: TCP + name: web +--- +apiVersion: gateway.networking.k8s.io/v1 +kind: HTTPRoute +metadata: + name: draupnir4all-web + namespace: matrix +spec: + parentRefs: + - name: envoy-gateway + namespace: envoy-gateway + hostnames: + - draupnir.midnightthoughts.space + rules: + - backendRefs: + - name: draupnir4all + port: 3000