All Projects → kubealex → K8s Mediaserver Operator

kubealex / K8s Mediaserver Operator

Licence: mit
Repository for k8s Mediaserver Operator project

Projects that are alternatives of or similar to K8s Mediaserver Operator

Media Docker
all-in-one deployment and configuration for an all-in-one media server, running on docker.
Stars: ✭ 148 (+82.72%)
Mutual labels:  plex, radarr, sonarr, transmission
rabbitmq-operator
RabbitMQ Kubernetes operator
Stars: ✭ 16 (-80.25%)
Mutual labels:  operator, k8s, kubernetes-operator
Varken
Standalone application to aggregate data from the Plex ecosystem into InfluxDB using Grafana for a frontend
Stars: ✭ 829 (+923.46%)
Mutual labels:  plex, radarr, sonarr
Muximux
A lightweight way to manage your HTPC
Stars: ✭ 1,008 (+1144.44%)
Mutual labels:  plex, radarr, sonarr
Plex-scripts
Plex, the arr's and tautulli scripts coming from user requests
Stars: ✭ 156 (+92.59%)
Mutual labels:  sonarr, plex, radarr
mediastack
All in one Docker Compose media server
Stars: ✭ 42 (-48.15%)
Mutual labels:  sonarr, plex, radarr
Organizr
HTPC/Homelab Services Organizer - Written in PHP
Stars: ✭ 3,605 (+4350.62%)
Mutual labels:  plex, radarr, sonarr
htk8s
HTPC services running on Kubernetes
Stars: ✭ 69 (-14.81%)
Mutual labels:  sonarr, transmission, radarr
Lunasea
A self-hosted controller for mobile built using the Flutter framework.
Stars: ✭ 378 (+366.67%)
Mutual labels:  plex, radarr, sonarr
Dockerfiles
Dockerfiles: Check_Mk, Couchpotato, Deluge, Gollum, Headphones, Jackett, Lazy Librarian, Miniflux, Nginx/PHP-FPM, OpenVPN PIA client, Plex, Privatebin, Radarr, Sabnzbd, Samba, SSH Socks Proxy server, Sonarr, Syncthing, Stringer,Transmission, Unifi Controller.
Stars: ✭ 499 (+516.05%)
Mutual labels:  radarr, sonarr, transmission
Overseerr
Request management and media discovery tool for the Plex ecosystem
Stars: ✭ 557 (+587.65%)
Mutual labels:  plex, radarr, sonarr
grafana-operator
An operator for Grafana that installs and manages Grafana instances, Dashboards and Datasources through Kubernetes/OpenShift CRs
Stars: ✭ 449 (+454.32%)
Mutual labels:  operator, k8s, kubernetes-operator
docker-iot-stack
💻 My personal Docker IoT Stack
Stars: ✭ 24 (-70.37%)
Mutual labels:  sonarr, transmission, radarr
siddhi-operator
Operator allows you to run stream processing logic directly on a Kubernetes cluster
Stars: ✭ 16 (-80.25%)
Mutual labels:  operator, k8s, kubernetes-operator
td-redis-operator
一款强大的云原生redis-operator,经过大规模生产级运行考验,支持分布式集群、支持主备切换等缓存集群解决方案…The powerful cloud-native redis-operator, which has passed the test of large-scale production-level operation, supports distributed clusters and active/standby switching ...
Stars: ✭ 327 (+303.7%)
Mutual labels:  operator, k8s, kubernetes-operator
Saltbox
Ansible-based solution for rapidly deploying a Docker containerized cloud media server.
Stars: ✭ 117 (+44.44%)
Mutual labels:  sonarr, plex, radarr
Theme.park
A collection of themes/skins for your favorite apps.
Stars: ✭ 714 (+781.48%)
Mutual labels:  plex, radarr, sonarr
Doplarr
An *arr request bot for Discord
Stars: ✭ 236 (+191.36%)
Mutual labels:  sonarr, plex, radarr
flixctl
A toolkit for controlling the infrastructure necessary for a true MaSaS (Movies and Shows as a Service) architecture.
Stars: ✭ 43 (-46.91%)
Mutual labels:  sonarr, plex, radarr
Config
Armbian configuration utility
Stars: ✭ 317 (+291.36%)
Mutual labels:  radarr, sonarr, transmission

k8s-mediaserver-operator - Your all-in-one resource for your media needs!

I am so happy to announce the first release of the k8s-mediaserver-operator, a project that mixes up some of the mainstream tools for your media needs.

The Custom Resource that is implemented, allows you to create a fully working and complete media server on #kubernetes, based on:

Plex Media Server - A complete and fully funtional mediaserver that allows you to render in a webUI your movies, TV Series, podcasts, video streams.

Sonarr - A TV series and show tracker, that allows the integration with download managers for searching and retrieving TV Series, organizing them, schedule notifications when an episode comes up and much more.

Radarr - The same a Sonarr, but for movies!

Jackett - An API interface that keeps easy your life interacting with trackers for torrents.

Transmission - A fast, easy and reliable torrent client.

All the container images used by the operator are from linuxserver - linuxserver.io

Introduction

I started working on this project because I was tired of using the 'containerized' version with docker/podman-compose, and I wanted to experiment a bit both with helm and operators.

It is quite simple to use, and very minimalistic, with customizations that are strictly related to usability and access, rather than complex customizations, even if, maybe in the future, we could add it!

Each container has its init container in order to initialize configurations on the PV before starting the actual pod and avoid to restart the pods.

QuickStart

The operator and the CR are already configured with some defaults settings to make you jump and go with it.

All you need is:

  • A namespace where you want to put your CR and all the pods that will spawn
  • Being able to provision an RWX PV where to store configurations, downloads, and all related stuff (suggested > 200GB). PV could be created manually and/or dynamically provisioned.

First install the CRD and the operator:

kubectl apply -f k8s-mediaserver-operator.yml

Then you are good to go with the CR:

kubectl apply -f k8s-mediaserver.yml

In seconds, you will be ready to use your applications!

With default settings, your applications will run in these paths:

http://k8s-mediaserver.k8s.test/sonarr
http://k8s-mediaserver.k8s.test/radarr
http://k8s-mediaserver.k8s.test/transmission
http://k8s-mediaserver.k8s.test/jackett

http://k8s-plex.k8s.test/

The mediaserver CR

The CR is quite simple to configure, and I tried to keep the number of parameters low to avoid confusion, but still letting some customization to fit the resource inside your cluster.

General config

Config path Meaning Default
general.ingress_host The hostname to use in ingress definition, this will be the hostname where the applications will be exposed k8s-mediaserver.k8s.test
general.plex_ingress_host The hostname to use for PLEX as it must be exposed on a / dedicated path k8s-plex.k8s.test
general.pgid The GID for the process 1000
general.puid The UID for the process 1000
general.nodeSelector Node Selector for all the pods {}
general.storage.nfs Specifies if the PV should be configured as a NFS export false
general.storage.nfsPath If PV type is NFS, specifies the path of the export ""
general.storage.nfsServer If PV type is NFS, specifies the server exporting the volume ""
general.storage.pvcName Name of the persistenVolumeClaim configured in deployments mediaserver-pvc
general.storage.pvcStorageClass Specifies a storageClass for the PVC {}
general.storage.size Size of the persistenVolume 50Gi

Plex

Config path Meaning Default
plex.claim IMPORTANT Token from your account, needed to claim the server CHANGEME
plex.replicaCount Number of replicas serving plex 1
plex.container.port The port in use by the container 32400
plex.service.type The kind of Service (ClusterIP/NodePort/LoadBalancer) ClusterIP
plex.service.port The port assigned to the service 32400
plex.service.nodePort In case of service.type NodePort, the nodePort to use ""
plex.service.extraLBService If true, creates an additional LoadBalancer service with '-lb' suffix (requires a cloud provider or metalLB) false
plex.ingress.enabled If true, creates the ingress resource for the application true
plex.ingress.annotations Additional field for annotations, if needed {}
plex.ingress.path The path where the application is exposed /plex
plex.ingress.tls.enabled If true, tls is enabled false
plex.ingress.tls.secretName Name of the secret holding certificates for the secure ingress ""

Sonarr

Config path Meaning Default
sonarr.container.port The port in use by the container 8989
sonarr.service.type The kind of Service (ClusterIP/NodePort/LoadBalancer) ClusterIP
sonarr.service.port The port assigned to the service 8989
sonarr.service.nodePort In case of service.type NodePort, the nodePort to use ""
sonarr.service.extraLBService If true, creates an additional LoadBalancer service with '-lb' suffix (requires a cloud provider or metalLB) false
sonarr.ingress.enabled If true, creates the ingress resource for the application true
sonarr.ingress.annotations Additional field for annotations, if needed {}
sonarr.ingress.path The path where the application is exposed /sonarr
sonarr.ingress.tls.enabled If true, tls is enabled false
sonarr.ingress.tls.secretName Name of the secret holding certificates for the secure ingress ""

Radarr

Config path Meaning Default
radarr.container.port The port in use by the container 7878
radarr.service.type The kind of Service (ClusterIP/NodePort/LoadBalancer) ClusterIP
radarr.service.port The port assigned to the service 7878
radarr.service.nodePort In case of service.type NodePort, the nodePort to use ""
radarr.service.extraLBService If true, creates an additional LoadBalancer service with '-lb' suffix (requires a cloud provider or metalLB) false
radarr.ingress.enabled If true, creates the ingress resource for the application true
radarr.ingress.annotations Additional field for annotations, if needed {}
radarr.ingress.path The path where the application is exposed /radarr
radarr.ingress.tls.enabled If true, tls is enabled false
radarr.ingress.tls.secretName Name of the secret holding certificates for the secure ingress ""

Jackett

Config path Meaning Default
jackett.container.port The port in use by the container 9117
jackett.service.type The kind of Service (ClusterIP/NodePort/LoadBalancer) ClusterIP
jackett.service.port The port assigned to the service 9117
jackett.service.nodePort In case of service.type NodePort, the nodePort to use ""
jackett.service.extraLBService If true, it creates an additional LoadBalancer service with '-lb' suffix (requires a cloud provider or metalLB) false
jackett.ingress.enabled If true, creates the ingress resource for the application true
jackett.ingress.annotations Additional field for annotations, if needed {}
jackett.ingress.path The path where the application is exposed /jackett
jackett.ingress.tls.enabled If true, tls is enabled false
jackett.ingress.tls.secretName Name of the secret holding certificates for the secure ingress ""

Transmission

Config path Meaning Default
transmission.container.port The port in use by the container 9091
transmission.service.type The kind of Service (ClusterIP/NodePort/LoadBalancer) ClusterIP
transmission.service.port The port assigned to the service 9091
transmission.service.nodePort In case of service.type NodePort, the nodePort to use ""
transmission.service.extraLBService If true, creates an additional LoadBalancer service with '-lb' suffix (requires a cloud provider or metalLB) false
transmission.ingress.enabled If true, creates the ingress resource for the application true
transmission.ingress.annotations Additional field for annotations, if needed {}
transmission.ingress.path The path where the application is exposed /transmission
transmission.ingress.tls.enabled If true, tls is enabled false
transmission.ingress.tls.secretName Name of the secret holding certificates for the secure ingress ""

About the project

This project is intended as an exercise, and absolutely for fun. Don't use it to commit piracy.

Also feel free to contribute and extend it!

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].