Files
pikasTech-unidesk/src/components/platform-infra/sub2api/sub2api.k8s.yaml
T
2026-06-09 09:50:02 +00:00

415 lines
11 KiB
YAML

apiVersion: v1
kind: Namespace
metadata:
name: platform-infra
labels:
app.kubernetes.io/name: platform-infra
app.kubernetes.io/managed-by: unidesk
unidesk.ai/runtime-node: G14
---
apiVersion: v1
kind: ConfigMap
metadata:
name: sub2api-config
namespace: platform-infra
labels:
app.kubernetes.io/name: sub2api
app.kubernetes.io/part-of: platform-infra
app.kubernetes.io/managed-by: unidesk
data:
AUTO_SETUP: "true"
SERVER_HOST: "0.0.0.0"
SERVER_PORT: "8080"
SERVER_MODE: "release"
RUN_MODE: "standard"
DATABASE_HOST: "sub2api-postgres"
DATABASE_PORT: "5432"
DATABASE_USER: "sub2api"
DATABASE_DBNAME: "sub2api"
DATABASE_SSLMODE: "disable"
DATABASE_MAX_OPEN_CONNS: "10"
DATABASE_MAX_IDLE_CONNS: "2"
DATABASE_CONN_MAX_LIFETIME_MINUTES: "30"
DATABASE_CONN_MAX_IDLE_TIME_MINUTES: "5"
REDIS_HOST: "sub2api-redis"
REDIS_PORT: "6379"
REDIS_PASSWORD: ""
REDIS_DB: "0"
REDIS_POOL_SIZE: "32"
REDIS_MIN_IDLE_CONNS: "2"
REDIS_ENABLE_TLS: "false"
ADMIN_EMAIL: "admin@sub2api.platform-infra.local"
JWT_EXPIRE_HOUR: "24"
TZ: "Asia/Shanghai"
SECURITY_URL_ALLOWLIST_ENABLED: "__SUB2API_SECURITY_URL_ALLOWLIST_ENABLED__"
SECURITY_URL_ALLOWLIST_ALLOW_INSECURE_HTTP: "__SUB2API_SECURITY_URL_ALLOWLIST_ALLOW_INSECURE_HTTP__"
SECURITY_URL_ALLOWLIST_ALLOW_PRIVATE_HOSTS: "__SUB2API_SECURITY_URL_ALLOWLIST_ALLOW_PRIVATE_HOSTS__"
SECURITY_URL_ALLOWLIST_UPSTREAM_HOSTS: "__SUB2API_SECURITY_URL_ALLOWLIST_UPSTREAM_HOSTS__"
UPDATE_PROXY_URL: ""
GATEWAY_OPENAI_RESPONSE_HEADER_TIMEOUT: "0"
GATEWAY_OPENAI_HTTP2_ENABLED: "true"
GATEWAY_OPENAI_HTTP2_ALLOW_PROXY_FALLBACK_TO_HTTP1: "true"
GATEWAY_OPENAI_HTTP2_FALLBACK_ERROR_THRESHOLD: "2"
GATEWAY_OPENAI_HTTP2_FALLBACK_WINDOW_SECONDS: "60"
GATEWAY_OPENAI_HTTP2_FALLBACK_TTL_SECONDS: "600"
GATEWAY_IMAGE_STREAM_DATA_INTERVAL_TIMEOUT: "900"
GATEWAY_IMAGE_STREAM_KEEPALIVE_INTERVAL: "10"
GATEWAY_IMAGE_CONCURRENCY_ENABLED: "false"
GATEWAY_IMAGE_CONCURRENCY_MAX_CONCURRENT_REQUESTS: "0"
GATEWAY_IMAGE_CONCURRENCY_OVERFLOW_MODE: "reject"
GATEWAY_IMAGE_CONCURRENCY_WAIT_TIMEOUT_SECONDS: "30"
GATEWAY_IMAGE_CONCURRENCY_MAX_WAITING_REQUESTS: "100"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: sub2api-data
namespace: platform-infra
labels:
app.kubernetes.io/name: sub2api
app.kubernetes.io/component: app
app.kubernetes.io/part-of: platform-infra
app.kubernetes.io/managed-by: unidesk
spec:
accessModes:
- ReadWriteOnce
storageClassName: local-path
resources:
requests:
storage: 2Gi
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: sub2api-redis-data
namespace: platform-infra
labels:
app.kubernetes.io/name: sub2api-redis
app.kubernetes.io/component: redis
app.kubernetes.io/part-of: platform-infra
app.kubernetes.io/managed-by: unidesk
spec:
accessModes:
- ReadWriteOnce
storageClassName: local-path
resources:
requests:
storage: 2Gi
---
apiVersion: v1
kind: Service
metadata:
name: sub2api-postgres
namespace: platform-infra
labels:
app.kubernetes.io/name: sub2api-postgres
app.kubernetes.io/component: postgres
app.kubernetes.io/part-of: platform-infra
app.kubernetes.io/managed-by: unidesk
spec:
selector:
app.kubernetes.io/name: sub2api-postgres
app.kubernetes.io/component: postgres
ports:
- name: postgres
port: 5432
targetPort: postgres
---
apiVersion: v1
kind: Service
metadata:
name: sub2api-redis
namespace: platform-infra
labels:
app.kubernetes.io/name: sub2api-redis
app.kubernetes.io/component: redis
app.kubernetes.io/part-of: platform-infra
app.kubernetes.io/managed-by: unidesk
spec:
selector:
app.kubernetes.io/name: sub2api-redis
app.kubernetes.io/component: redis
ports:
- name: redis
port: 6379
targetPort: redis
---
apiVersion: v1
kind: Service
metadata:
name: sub2api
namespace: platform-infra
labels:
app.kubernetes.io/name: sub2api
app.kubernetes.io/component: app
app.kubernetes.io/part-of: platform-infra
app.kubernetes.io/managed-by: unidesk
spec:
selector:
app.kubernetes.io/name: sub2api
app.kubernetes.io/component: app
ports:
- name: http
port: 8080
targetPort: http
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: sub2api-postgres
namespace: platform-infra
labels:
app.kubernetes.io/name: sub2api-postgres
app.kubernetes.io/component: postgres
app.kubernetes.io/part-of: platform-infra
app.kubernetes.io/managed-by: unidesk
spec:
serviceName: sub2api-postgres
replicas: 1
selector:
matchLabels:
app.kubernetes.io/name: sub2api-postgres
app.kubernetes.io/component: postgres
template:
metadata:
labels:
app.kubernetes.io/name: sub2api-postgres
app.kubernetes.io/component: postgres
app.kubernetes.io/part-of: platform-infra
spec:
securityContext:
fsGroup: 70
containers:
- name: postgres
image: postgres:18-alpine
imagePullPolicy: IfNotPresent
ports:
- name: postgres
containerPort: 5432
env:
- name: POSTGRES_USER
value: sub2api
- name: POSTGRES_PASSWORD
valueFrom:
secretKeyRef:
name: sub2api-secrets
key: POSTGRES_PASSWORD
- name: POSTGRES_DB
value: sub2api
- name: PGDATA
value: /var/lib/postgresql/data
- name: TZ
value: Asia/Shanghai
readinessProbe:
exec:
command:
- sh
- -c
- pg_isready -U sub2api -d sub2api -h 127.0.0.1
initialDelaySeconds: 5
periodSeconds: 10
timeoutSeconds: 5
failureThreshold: 6
livenessProbe:
exec:
command:
- sh
- -c
- pg_isready -U sub2api -d sub2api -h 127.0.0.1
initialDelaySeconds: 30
periodSeconds: 20
timeoutSeconds: 5
failureThreshold: 6
volumeMounts:
- name: postgres-data
mountPath: /var/lib/postgresql/data
volumeClaimTemplates:
- metadata:
name: postgres-data
labels:
app.kubernetes.io/name: sub2api-postgres
app.kubernetes.io/component: postgres
app.kubernetes.io/part-of: platform-infra
app.kubernetes.io/managed-by: unidesk
spec:
accessModes:
- ReadWriteOnce
storageClassName: local-path
resources:
requests:
storage: 10Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: sub2api-redis
namespace: platform-infra
labels:
app.kubernetes.io/name: sub2api-redis
app.kubernetes.io/component: redis
app.kubernetes.io/part-of: platform-infra
app.kubernetes.io/managed-by: unidesk
spec:
replicas: 1
strategy:
type: Recreate
selector:
matchLabels:
app.kubernetes.io/name: sub2api-redis
app.kubernetes.io/component: redis
template:
metadata:
labels:
app.kubernetes.io/name: sub2api-redis
app.kubernetes.io/component: redis
app.kubernetes.io/part-of: platform-infra
spec:
securityContext:
fsGroup: 999
containers:
- name: redis
image: redis:8-alpine
imagePullPolicy: IfNotPresent
command:
- sh
- -c
args:
- redis-server --save 60 1 --appendonly yes --appendfsync everysec
ports:
- name: redis
containerPort: 6379
env:
- name: TZ
value: Asia/Shanghai
readinessProbe:
exec:
command:
- redis-cli
- ping
initialDelaySeconds: 5
periodSeconds: 10
timeoutSeconds: 5
failureThreshold: 6
livenessProbe:
exec:
command:
- redis-cli
- ping
initialDelaySeconds: 30
periodSeconds: 20
timeoutSeconds: 5
failureThreshold: 6
volumeMounts:
- name: redis-data
mountPath: /data
volumes:
- name: redis-data
persistentVolumeClaim:
claimName: sub2api-redis-data
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: sub2api
namespace: platform-infra
labels:
app.kubernetes.io/name: sub2api
app.kubernetes.io/component: app
app.kubernetes.io/part-of: platform-infra
app.kubernetes.io/managed-by: unidesk
spec:
replicas: 1
strategy:
type: Recreate
selector:
matchLabels:
app.kubernetes.io/name: sub2api
app.kubernetes.io/component: app
template:
metadata:
annotations:
unidesk.ai/sub2api-config-hash: "__SUB2API_CONFIG_HASH__"
labels:
app.kubernetes.io/name: sub2api
app.kubernetes.io/component: app
app.kubernetes.io/part-of: platform-infra
spec:
securityContext:
fsGroup: 1000
initContainers:
- name: wait-postgres
image: postgres:18-alpine
imagePullPolicy: IfNotPresent
command:
- sh
- -c
- until pg_isready -h sub2api-postgres -U sub2api -d sub2api; do sleep 2; done
- name: wait-redis
image: redis:8-alpine
imagePullPolicy: IfNotPresent
command:
- sh
- -c
- until redis-cli -h sub2api-redis ping | grep -q PONG; do sleep 2; done
containers:
- name: sub2api
image: __SUB2API_IMAGE__
imagePullPolicy: __SUB2API_IMAGE_PULL_POLICY__
ports:
- name: http
containerPort: 8080
envFrom:
- configMapRef:
name: sub2api-config
env:
- name: DATABASE_PASSWORD
valueFrom:
secretKeyRef:
name: sub2api-secrets
key: POSTGRES_PASSWORD
- name: ADMIN_PASSWORD
valueFrom:
secretKeyRef:
name: sub2api-secrets
key: ADMIN_PASSWORD
- name: JWT_SECRET
valueFrom:
secretKeyRef:
name: sub2api-secrets
key: JWT_SECRET
- name: TOTP_ENCRYPTION_KEY
valueFrom:
secretKeyRef:
name: sub2api-secrets
key: TOTP_ENCRYPTION_KEY
readinessProbe:
httpGet:
path: /health
port: http
initialDelaySeconds: 10
periodSeconds: 10
timeoutSeconds: 5
failureThreshold: 6
livenessProbe:
httpGet:
path: /health
port: http
initialDelaySeconds: 30
periodSeconds: 20
timeoutSeconds: 5
failureThreshold: 6
startupProbe:
httpGet:
path: /health
port: http
periodSeconds: 10
timeoutSeconds: 5
failureThreshold: 30
volumeMounts:
- name: sub2api-data
mountPath: /app/data
volumes:
- name: sub2api-data
persistentVolumeClaim:
claimName: sub2api-data