40ba1730de
## Why Jellyfin depended on a self-managed `redis` Deployment for its distributed transcode-session store. Now that the valkey-operator is deployed cluster-wide, this hands that store to the operator so it is declaratively managed (rolling upgrades, health, future HA) instead of a hand-rolled Deployment. ## Changes - Add `apps/base/jellyfin/valkey.yaml`: a `ValkeyCluster` (`valkey.io/v1alpha1`) named `jellyfin-valkey`, single instance (`shards: 1`, `replicas: 0`), image via the artifactapi dockerhub mirror (`valkey/valkey:9.0.0`), metrics exporter disabled, redis-parity resources. - Omit persistence so `/data` is an `emptyDir`: the transcode-lease state is ephemeral, and the operator-managed PVC cannot carry the `k8up.io/backup: "false"` annotation the namespace-wide k8up Schedule needs to skip an in-use RWO volume (the old redis PVC carried it). - Remove `redis-deployment.yaml`, `redis-service.yaml`, `redis-pvc.yaml` and drop them from `kustomization.yaml`; add `valkey.yaml`. - Repoint `Jellyfin__TranscodeStore__RedisConnectionString` at the operator client Service `valkey-jellyfin-valkey:6379`, preserving `abortConnect=false` and `LeaseDurationSeconds`. ## Auth / TLS None. This operator runs Valkey cluster-mode-enabled with `protected-mode no` and leaves the built-in `default` user passwordless (no `requirepass`), so clients connect unauthenticated over plaintext — parity with the previous open redis. StackExchange.Redis auto-discovers the single node via the headless Service. No `VaultStaticSecret` / plain Secret is introduced. ## Validation - `kustomize build --enable-helm apps/overlays/au-syd1/jellyfin` renders cleanly: `ValkeyCluster` present, no redis Deployment/Service/PVC, connection string updated. - pre-commit passes (incl. the plain-secrets guard). - kubeconform: 10 valid / 0 invalid; the `ValkeyCluster` is skipped (CRD schema not vendored). ## Follow-up HA (task 6) is intentionally out of scope: it will raise `replicas` (and/or `shards`) and add anti-affinity/topology spread. Enabling auth (ACL `default` user + password via `VaultStaticSecret`) and/or TLS can also be layered on later. Reviewed-on: #367 Co-authored-by: unkin-agent <unkin-agent@unkin.net> Co-committed-by: unkin-agent <unkin-agent@unkin.net>
30 lines
1.1 KiB
YAML
30 lines
1.1 KiB
YAML
---
|
|
# Single-instance Valkey managed by valkey-operator, replacing the self-managed
|
|
# redis Deployment as Jellyfin's distributed transcode-session store. shards:1 +
|
|
# replicas:0 is one primary with no replicas. This operator always runs Valkey
|
|
# cluster-mode-enabled with protected-mode off and leaves the built-in `default`
|
|
# user passwordless, so clients connect with no auth/TLS (parity with the old
|
|
# open redis); StackExchange.Redis auto-discovers the single node. HA (more
|
|
# shards/replicas) is a follow-up. Persistence is intentionally omitted so /data
|
|
# is an emptyDir: the lease state is ephemeral, and the operator-managed PVC
|
|
# cannot carry the k8up.io/backup:"false" annotation the namespace's cluster-wide
|
|
# k8up Schedule needs to skip an in-use RWO volume.
|
|
apiVersion: valkey.io/v1alpha1
|
|
kind: ValkeyCluster
|
|
metadata:
|
|
name: jellyfin-valkey
|
|
namespace: jellyfin
|
|
spec:
|
|
shards: 1
|
|
replicas: 0
|
|
image: artifactapi.k8s.syd1.au.unkin.net/dockerhub/valkey/valkey:9.0.0
|
|
exporter:
|
|
enabled: false
|
|
resources:
|
|
requests:
|
|
cpu: 50m
|
|
memory: 128Mi
|
|
limits:
|
|
cpu: 500m
|
|
memory: 512Mi
|