update chart notes & small edits

This commit is contained in:
Arlan Lloyd 2025-01-31 04:11:43 +00:00
parent 1b94d783d9
commit bd89f4ac32
4 changed files with 30 additions and 66 deletions

View File

@ -1,26 +1,9 @@
apiVersion: v2 apiVersion: v2
name: kyoo name: kyoo
description: A Helm chart for Kubernetes description: Kyoo is an open source media server alternative to Jellyfin and Plex.
# A chart can be either an 'application' or a 'library' chart.
#
# Application charts are a collection of templates that can be packaged into versioned archives
# to be deployed.
#
# Library charts provide useful utilities or functions for the chart developer. They're included as
# a dependency of application charts to inject those utilities and functions into the rendering
# pipeline. Library charts do not define any templates and therefore cannot be deployed.
type: application type: application
# This is the chart version. This version number should be incremented each time you make changes
# to the chart and its templates, including the app version.
# Versions are expected to follow Semantic Versioning (https://semver.org/)
version: 0.0.0 version: 0.0.0
# This is the version number of the application being deployed. This version number should be
# incremented each time you make changes to the application. Versions are not expected to
# follow Semantic Versioning. They should reflect the version the application is using.
# It is recommended to use it with quotes.
appVersion: "0.0.0" appVersion: "0.0.0"
icon: https://raw.githubusercontent.com/zoriya/Kyoo/refs/heads/master/icons/icon.svg icon: https://raw.githubusercontent.com/zoriya/Kyoo/refs/heads/master/icons/icon.svg

View File

@ -1,18 +1,12 @@
# Kyoo Helm Chart # Kyoo Helm Chart
Kyoo consists of multiple interconnected workloads, leveraging a variety of technologies including Meilisearch, Postgres, and RabbitMQ. This helm chart is designed to simplify configurations for basic setups while offering advanced customization options. Naming and opinionation aims to follow structures described in [diagrams](../DIAGRAMS.md). Kyoo consists of multiple interconnected workloads, leveraging a variety of technologies including Meilisearch, Postgres, and RabbitMQ. This helm chart is designed to simplify configurations for basic setups while offering advanced customization options. Naming and opinionation aims to follow structures described in [diagrams](../DIAGRAMS.md).
## Subchart Support
This chart includes subcharts for deploying Meilisearch, PostgreSQL, and RabbitMQ as a demonstration of how these resources can be configured. However, subcharts are frequently updated, and upgrades between versions are **NOT** supported.
Deploying these resources independently of Kyoo ensures operational independence and long-term maintainability. This approach provides better control over versioning, lifecycle management, and the ability to apply updates or patches without impacting Kyoo's deployment.
# Examples # Examples
## Quickstart ## Quickstart
Below provides an example for deploying Kyoo and its dependencies. This is a minimalist setup that is not intended for longterm use. This approach uses a single Postgres instance and initializes mutliple databases. Below provides an example for deploying Kyoo and its dependencies using subcharts. This uses a single Postgres instance and initializes mutliple databases.
```sh ```sh
helm upgrade kyoo . --install --values myvalues.yaml helm upgrade kyoo oci://ghcr.io/zoriya/helm-charts/kyoo --install --values myvalues.yaml
``` ```
`myvaules.yaml` content `myvaules.yaml` content
```yaml ```yaml
@ -24,6 +18,12 @@ postgresql:
enabled: true enabled: true
rabbitmq: rabbitmq:
enabled: true enabled: true
media:
volumes:
- name: media
nfs:
server: mynasserver
path: /spin0/media
extraObjects: extraObjects:
- apiVersion: v1 - apiVersion: v1
kind: Secret kind: Secret
@ -31,34 +31,13 @@ extraObjects:
name: bigsecret name: bigsecret
type: Opaque type: Opaque
stringData: stringData:
#KYOO
# The following value should be set to a random sequence of characters.
# You MUST change it when installing kyoo (for security)
# You can input multiple api keys separated by a ,
kyoo_apikeys: yHXWGsjfjE6sy6UxavqmTUYxgCFYek kyoo_apikeys: yHXWGsjfjE6sy6UxavqmTUYxgCFYek
# Keep those empty to use kyoo's default api key. You can also specify a custom API key if you want.
# go to https://www.themoviedb.org/settings/api and copy the api key (not the read access token, the api key)
tmdb_apikey: ""
tvdb_apikey: ""
tvdb_pin: ""
#RESOURCES
# meilisearch does not allow mapping their key in yet.
MEILI_MASTER_KEY: barkLike8SuperDucks MEILI_MASTER_KEY: barkLike8SuperDucks
postgres_user: kyoo_all postgres_user: kyoo_all
postgres_password: watchSomething4me postgres_password: watchSomething4me
rabbitmq_user: kyoo_all rabbitmq_user: kyoo_all
rabbitmq_password: youAreAmazing2 rabbitmq_password: youAreAmazing2
rabbitmq_cookie: mmmGoodCookie rabbitmq_cookie: mmmGoodCookie
- kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: media
spec:
accessModes:
- "ReadOnlyMany"
resources:
requests:
storage: "3Gi"
``` ```
## Common Setup ## Common Setup
@ -69,19 +48,24 @@ values.yaml configuration
global: global:
meilisearch: meilisearch:
kyoo_back: kyoo_back:
host: kyoo-meilisearch.kyoo.svc.cluster.local host: meilisearch
postgres: postgres:
# postgres instance information to connect to back's database
kyoo_back: kyoo_back:
host: cluster01.postgres.svc.cluster.local host: postgres
# postgres instance information to connect to transcoder's database
kyoo_transcoder: kyoo_transcoder:
host: cluster01.postgres.svc.cluster.local host: postgres
rabbitmq: rabbitmq:
host: cluster01.rabbitmq.svc.cluster.local host: rabbitmq
# specify hardware resources
transcoder:
kyoo_transcoder:
resources:
limits:
nvidia.com/gpu: 1
kyoo: kyoo:
address: https://kyoo.mydomain.com address: https://kyoo.mydomain.com
# leverage NFS for media # specify hardware acceleration profile (valid values: disabled, vaapi, qsv, nvidia)
transcoderAcceleration: nvidia
media: media:
volumes: volumes:
- name: media - name: media
@ -109,9 +93,9 @@ stringData:
rabbitmq_password: youAreAmazing2 rabbitmq_password: youAreAmazing2
``` ```
# Recomendations # Additional Notes
## Postgres ## Postgres
Kyoo consists of multiple microservices. Best practice is for each microservice to use its own database. Kyoo workloads support best practices or sharing a single postgres database. Please see the `POSTGRES_SCHEMA` setting for additional information. Strongly recomended to use a Kubernetes operator for managing Postgres. Kyoo consists of multiple microservices. Best practice is for each microservice to use its own database. Kyoo workloads support best practices or sharing a single postgres database. Please see the `POSTGRES_SCHEMA` setting for additional information. Strongly recomended to use a Kubernetes operator for managing Postgres.
## Media ## Subchart Support
Media is condiered an read-only external resource for Kyoo. Media content tends to consume a large amount of space and Kubernetes storage interfaces tend to replicate across nodes. Consider hosting the data outside of Kubernetes or assigning one node to handle storage. Subcharts are updated frequently and subject to changes. This chart includes subcharts for deploying Meilisearch, PostgreSQL, and RabbitMQ. Please consider hosting those independently of Kyoo to better handle versioning and lifecycle management.

View File

@ -65,16 +65,19 @@ spec:
secretKeyRef: secretKeyRef:
key: {{ .Values.contentdatabase.tmdb.apikeyKey }} key: {{ .Values.contentdatabase.tmdb.apikeyKey }}
name: {{ .Values.contentdatabase.tmdb.existingSecret }} name: {{ .Values.contentdatabase.tmdb.existingSecret }}
optional: true
- name: TVDB_APIKEY - name: TVDB_APIKEY
valueFrom: valueFrom:
secretKeyRef: secretKeyRef:
key: {{ .Values.contentdatabase.tvdb.apikeyKey }} key: {{ .Values.contentdatabase.tvdb.apikeyKey }}
name: {{ .Values.contentdatabase.tvdb.existingSecret }} name: {{ .Values.contentdatabase.tvdb.existingSecret }}
optional: true
- name: TVDB_PIN - name: TVDB_PIN
valueFrom: valueFrom:
secretKeyRef: secretKeyRef:
key: {{ .Values.contentdatabase.tvdb.pinKey }} key: {{ .Values.contentdatabase.tvdb.pinKey }}
name: {{ .Values.contentdatabase.tvdb.existingSecret }} name: {{ .Values.contentdatabase.tvdb.existingSecret }}
optional: true
- name: RABBITMQ_HOST - name: RABBITMQ_HOST
value: {{ .Values.global.rabbitmq.host | quote }} value: {{ .Values.global.rabbitmq.host | quote }}
- name: RABBITMQ_PORT - name: RABBITMQ_PORT

View File

@ -141,16 +141,12 @@ kyoo:
# configures workloads that require access to media # configures workloads that require access to media
media: media:
# specifies the volumes to use # specifies the volumes to use
volumes: volumes: []
# default volume configuration to allow for easier demo
# most setups will aim to leverage NFS to access media # most setups will aim to leverage NFS to access media
# - name: media # - name: media
# nfs: # nfs:
# server: mynasserver.mydomain.com # server: mynasserver.mydomain.com
# path: /spin0/media # path: /spin0/media
- name: media
persistentVolumeClaim:
claimName: media
# specifies where to mount the volumes # specifies where to mount the volumes
# note that this should align with .media.baseMountPath # note that this should align with .media.baseMountPath
@ -386,7 +382,7 @@ transcoder:
- name: cache - name: cache
emptyDir: {} emptyDir: {}
replicaCount: 1 replicaCount: 1
# default to recreate for better user experience with ReadWriteOnce volumes # default to recreate for better user experience with ReadWriteOnce volumes & hardware resources
updateStrategy: updateStrategy:
type: Recreate type: Recreate
podLabels: {} podLabels: {}
@ -485,7 +481,5 @@ rabbitmq:
existingErlangSecret: "{{ .Values.global.rabbitmq.infra.existingSecret }}" existingErlangSecret: "{{ .Values.global.rabbitmq.infra.existingSecret }}"
existingSecretErlangKey: "{{ .Values.global.rabbitmq.infra.keyErlangCookie }}" existingSecretErlangKey: "{{ .Values.global.rabbitmq.infra.keyErlangCookie }}"
# create extraObjects # allows for the creation of any additional kubernetes resources
# create secret bigsecret
# create pvc for each object
extraObjects: [] extraObjects: []