Jellyfin deployed in Kubernetes with Helm


Posted on January 6, 2019


Jellyfin is an open source software media system that helps users to manage and stream their media collections. The aim of the project is to provide an open source alternative to Plex and Emby.

Personally I hope that the project succeeds as I have been looking to move away from Plex to a more open alternative for a couple of years now. Jellyfin forked from the Emby project fairly recently so a lot of the Emby clients should still work with Jellyfin.

For a project like this to succeed, it is important to make it easy for users to pick it up and try it out. There is a docker image available (https://hub.docker.com/r/jellyfin/jellyfin/) which makes it very easy for people to play with this new media server without really impacting any of their environments. As most of my machines at home are running as one large Kubernetes cluster, I decided to put together a quick helm chart - https://github.com/brianmcarey/jellyfin-helm.git

This helm chart allows me to spin up a reproducible Jellyfin server with a single command and have all the benefits of using Kubernetes such as scheduling.

To get this up and running for yourself all you got to do is (assuming you have a Kubernetes cluster and helm installed):

git clone https://github.com/brianmcarey/jellyfin-helm.git
helm install ./jellyfin-helm

This will give you the very basic Jellyfin server which does not include persistent storage. Persistence is disabled by default. In order to enable persistence you have to update jellyfin-helm/values.yaml. If you want to point the Jellyfin instance to your existing media library, I would recommend creating a persistent volume (PV) and a persistent volume claim (PVC) which point to your media. You can then update the "existingClaim" value in the values.yaml with the name of PVC that you just created. A persistent volume is also required for the jellyfin configuration in order to ensure that the config is not lost when the pod is deleted.

Also I would recommend enabling ingress and to use an ingress controller such as NGINX or traefik to make it easier to connect to your media server rather than having to use port-forwarding.

Hopefully this will help some people to get up and running with Jellyfin. I'm really looking forward to what is to come from the Jellyfin project in 2019!





Brian Carey | DevOps Engineer