From 4d71aabf4feb1dcb9c940926fbcc4285525b1c05 Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Wed, 29 Apr 2026 09:57:35 +0300 Subject: feat: Create Dockerfile, k8s manifests, and Magefile.go with build/test/install targets (p9) --- k8s/deployment.yaml | 73 +++++++++++++++++++++++++++++++++++++++++++++++++++++ k8s/pvc-db.yaml | 12 +++++++++ k8s/pvc-media.yaml | 12 +++++++++ k8s/secret.yaml | 10 ++++++++ k8s/service.yaml | 14 ++++++++++ 5 files changed, 121 insertions(+) create mode 100644 k8s/deployment.yaml create mode 100644 k8s/pvc-db.yaml create mode 100644 k8s/pvc-media.yaml create mode 100644 k8s/secret.yaml create mode 100644 k8s/service.yaml (limited to 'k8s') diff --git a/k8s/deployment.yaml b/k8s/deployment.yaml new file mode 100644 index 0000000..c4c605e --- /dev/null +++ b/k8s/deployment.yaml @@ -0,0 +1,73 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: kiss-media-player + labels: + app: kiss-media-player +spec: + replicas: 1 + selector: + matchLabels: + app: kiss-media-player + template: + metadata: + labels: + app: kiss-media-player + spec: + securityContext: + runAsNonRoot: true + fsGroup: 65534 + containers: + - name: app + image: kiss-media-player:latest + imagePullPolicy: IfNotPresent + securityContext: + runAsUser: 65534 + runAsGroup: 65534 + allowPrivilegeEscalation: false + readOnlyRootFilesystem: true + ports: + - containerPort: 8080 + name: http + envFrom: + - secretRef: + name: kiss-media-player-secret + optional: true + env: + - name: PORT + value: "8080" + - name: DB_PATH + value: "/data/media.db" + - name: MEDIA_ROOT + value: "/media" + livenessProbe: + httpGet: + path: /healthz + port: http + initialDelaySeconds: 5 + periodSeconds: 10 + readinessProbe: + httpGet: + path: /readyz + port: http + initialDelaySeconds: 3 + periodSeconds: 5 + volumeMounts: + - name: data + mountPath: /data + - name: media + mountPath: /media + resources: + requests: + memory: "128Mi" + cpu: "100m" + limits: + memory: "512Mi" + cpu: "1000m" + volumes: + - name: data + persistentVolumeClaim: + claimName: kiss-media-player-db + - name: media + persistentVolumeClaim: + claimName: kiss-media-player-media diff --git a/k8s/pvc-db.yaml b/k8s/pvc-db.yaml new file mode 100644 index 0000000..87fad81 --- /dev/null +++ b/k8s/pvc-db.yaml @@ -0,0 +1,12 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: kiss-media-player-db + labels: + app: kiss-media-player +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 1Gi diff --git a/k8s/pvc-media.yaml b/k8s/pvc-media.yaml new file mode 100644 index 0000000..76e2d41 --- /dev/null +++ b/k8s/pvc-media.yaml @@ -0,0 +1,12 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: kiss-media-player-media + labels: + app: kiss-media-player +spec: + accessModes: + - ReadWriteMany + resources: + requests: + storage: 10Gi diff --git a/k8s/secret.yaml b/k8s/secret.yaml new file mode 100644 index 0000000..68b21fc --- /dev/null +++ b/k8s/secret.yaml @@ -0,0 +1,10 @@ +apiVersion: v1 +kind: Secret +metadata: + name: kiss-media-player-secret + labels: + app: kiss-media-player +type: Opaque +stringData: + # Set this to the desired admin password before applying. + ADMIN_PASSWORD: "changeme" diff --git a/k8s/service.yaml b/k8s/service.yaml new file mode 100644 index 0000000..c3da918 --- /dev/null +++ b/k8s/service.yaml @@ -0,0 +1,14 @@ +apiVersion: v1 +kind: Service +metadata: + name: kiss-media-player + labels: + app: kiss-media-player +spec: + type: ClusterIP + selector: + app: kiss-media-player + ports: + - port: 8080 + targetPort: http + name: http -- cgit v1.2.3