2025-02-25 05:18:45 +00:00
|
|
|
---
|
|
|
|
apiVersion: apps/v1
|
|
|
|
kind: StatefulSet
|
|
|
|
metadata:
|
|
|
|
labels:
|
|
|
|
app.kubernetes.io/component: api-server
|
|
|
|
app.kubernetes.io/name: p5x-api-server
|
|
|
|
name: p5x-api-server
|
|
|
|
namespace: p5x-system
|
|
|
|
spec:
|
|
|
|
replicas: 1
|
|
|
|
selector:
|
|
|
|
matchLabels:
|
|
|
|
app: p5x-api-server
|
|
|
|
serviceName: p5x-api-server
|
|
|
|
template:
|
|
|
|
metadata:
|
|
|
|
labels:
|
|
|
|
app: p5x-api-server
|
|
|
|
spec:
|
|
|
|
priorityClassName: system-cluster-critical
|
2025-04-22 14:03:57 +00:00
|
|
|
|
|
|
|
# api-server interacts w/ some parts of the K8s API, so bind its service account
|
|
|
|
serviceAccountName: p5x-api-sa
|
|
|
|
|
2025-02-25 05:18:45 +00:00
|
|
|
volumes:
|
2025-04-22 14:03:57 +00:00
|
|
|
# Used for the api-server SQLite database et al
|
2025-02-25 05:18:45 +00:00
|
|
|
- name: p5x-system-data
|
|
|
|
persistentVolumeClaim:
|
|
|
|
claimName: system-data
|
2025-04-22 14:03:57 +00:00
|
|
|
|
2025-04-22 13:21:17 +00:00
|
|
|
initContainers:
|
2025-04-22 14:03:57 +00:00
|
|
|
# Make sure the p5x-system-data disk exists in PVE and is mounted
|
2025-04-22 13:21:17 +00:00
|
|
|
- name: ensure-system-disk
|
|
|
|
image: docker.io/glmdev/p5x-api:latest
|
2025-04-22 14:07:55 +00:00
|
|
|
imagePullPolicy: Always
|
2025-04-22 13:21:17 +00:00
|
|
|
envFrom:
|
|
|
|
- secretRef:
|
|
|
|
name: api-env
|
|
|
|
env:
|
|
|
|
- name: P5X_NODE_HOSTNAME
|
|
|
|
valueFrom:
|
|
|
|
fieldRef:
|
|
|
|
fieldPath: spec.nodeName
|
|
|
|
- name: RUST_LOG
|
|
|
|
value: 'p5x=debug,sqlx=warn,info'
|
|
|
|
command: ['/p5x/p5x', 'ensure-system-disk']
|
2025-04-22 14:03:57 +00:00
|
|
|
|
|
|
|
# Transfer the p5x-system-data PVE disk to the correct node, if necessary
|
|
|
|
- name: migrate-system-disk
|
|
|
|
image: docker.io/glmdev/p5x-api:latest
|
2025-04-22 14:07:55 +00:00
|
|
|
imagePullPolicy: Always
|
2025-04-22 14:03:57 +00:00
|
|
|
envFrom:
|
|
|
|
- secretRef:
|
|
|
|
name: api-env
|
|
|
|
env:
|
|
|
|
- name: P5X_NODE_HOSTNAME
|
|
|
|
valueFrom:
|
|
|
|
fieldRef:
|
|
|
|
fieldPath: spec.nodeName
|
|
|
|
- name: RUST_LOG
|
|
|
|
value: 'p5x=debug,sqlx=warn,info'
|
|
|
|
command: ['/p5x/p5x', 'migrate-system-disk']
|
|
|
|
|
2025-02-25 05:18:45 +00:00
|
|
|
containers:
|
|
|
|
- name: api-server
|
2025-02-27 02:33:11 +00:00
|
|
|
image: docker.io/glmdev/p5x-api:latest
|
2025-04-22 14:07:55 +00:00
|
|
|
imagePullPolicy: Always
|
2025-02-25 05:18:45 +00:00
|
|
|
# TODO: (1) add a dedicated /healthz endpoint and (2) prevent that endpoint from writing to the Rocket logs
|
|
|
|
# livenessProbe:
|
|
|
|
# failureThreshold: 5
|
|
|
|
# httpGet:
|
|
|
|
# path: /system/pubkey
|
|
|
|
# port: p5x
|
|
|
|
# initialDelaySeconds: 10
|
|
|
|
# periodSeconds: 120
|
|
|
|
# timeoutSeconds: 10
|
|
|
|
envFrom:
|
2025-02-27 02:33:11 +00:00
|
|
|
- secretRef:
|
2025-02-25 05:18:45 +00:00
|
|
|
name: api-env
|
|
|
|
env:
|
|
|
|
- name: P5X_NODE_HOSTNAME
|
|
|
|
valueFrom:
|
|
|
|
fieldRef:
|
|
|
|
fieldPath: spec.nodeName
|
2025-04-22 13:21:17 +00:00
|
|
|
- name: RUST_LOG
|
|
|
|
value: 'p5x=debug,sqlx=warn,info'
|
2025-02-25 05:18:45 +00:00
|
|
|
ports:
|
|
|
|
- containerPort: 3450
|
|
|
|
name: p5x
|
|
|
|
volumeMounts:
|
|
|
|
- mountPath: /p5x/data
|
|
|
|
name: p5x-system-data
|