diff --git a/jellyfin/kustomization.yaml b/jellyfin/kustomization.yaml new file mode 100644 index 0000000..5ec52c7 --- /dev/null +++ b/jellyfin/kustomization.yaml @@ -0,0 +1,7 @@ +# argocd/kustomization.yaml +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization + +resources: + - main.yaml + - pvc.yaml \ No newline at end of file diff --git a/jellyfin/main.yaml b/jellyfin/main.yaml new file mode 100644 index 0000000..bc0d3aa --- /dev/null +++ b/jellyfin/main.yaml @@ -0,0 +1,126 @@ +apiVersion: v1 +automountServiceAccountToken: true +kind: ServiceAccount +metadata: + labels: + app.kubernetes.io/instance: jellyfin + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: jellyfin + app.kubernetes.io/version: 10.10.6 + helm.sh/chart: jellyfin-2.3.0 + name: jellyfin +--- +apiVersion: v1 +kind: Service +metadata: + labels: + app.kubernetes.io/instance: jellyfin + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: jellyfin + app.kubernetes.io/version: 10.10.6 + helm.sh/chart: jellyfin-2.3.0 + name: jellyfin +spec: + ports: + - name: http + port: 8096 + protocol: TCP + targetPort: http + selector: + app.kubernetes.io/instance: jellyfin + app.kubernetes.io/name: jellyfin + type: ClusterIP +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + labels: + app.kubernetes.io/instance: jellyfin + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: jellyfin + app.kubernetes.io/version: 10.10.6 + helm.sh/chart: jellyfin-2.3.0 + name: jellyfin-config +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 5Gi +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + labels: + app.kubernetes.io/instance: jellyfin + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: jellyfin + app.kubernetes.io/version: 10.10.6 + helm.sh/chart: jellyfin-2.3.0 + name: jellyfin-media +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 25Gi +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app.kubernetes.io/instance: jellyfin + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: jellyfin + app.kubernetes.io/version: 10.10.6 + helm.sh/chart: jellyfin-2.3.0 + name: jellyfin +spec: + replicas: 1 + selector: + matchLabels: + app.kubernetes.io/instance: jellyfin + app.kubernetes.io/name: jellyfin + strategy: + type: RollingUpdate + template: + metadata: + labels: + app.kubernetes.io/instance: jellyfin + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: jellyfin + app.kubernetes.io/version: 10.10.6 + helm.sh/chart: jellyfin-2.3.0 + spec: + containers: + - image: docker.io/jellyfin/jellyfin:10.10.6 + imagePullPolicy: IfNotPresent + livenessProbe: + initialDelaySeconds: 10 + tcpSocket: + port: http + name: jellyfin + ports: + - containerPort: 8096 + name: http + protocol: TCP + readinessProbe: + initialDelaySeconds: 10 + tcpSocket: + port: http + resources: {} + securityContext: {} + volumeMounts: + - mountPath: /config + name: config + - mountPath: /media + name: media + securityContext: {} + serviceAccountName: jellyfin + volumes: + - name: config + persistentVolumeClaim: + claimName: jellyfin-config + - name: media + persistentVolumeClaim: + claimName: jellyfin-media diff --git a/jellyfin/pvc.yaml b/jellyfin/pvc.yaml new file mode 100644 index 0000000..b295e36 --- /dev/null +++ b/jellyfin/pvc.yaml @@ -0,0 +1,11 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: nfs-media +spec: + accessModes: + - ReadWriteMany + resources: + requests: + storage: 10Gi # Muss kleiner oder gleich der PV-Größe sein + volumeName: nfs-media diff --git a/jellyfin/src/kustomization.yaml b/jellyfin/src/kustomization.yaml new file mode 100644 index 0000000..a81e9fc --- /dev/null +++ b/jellyfin/src/kustomization.yaml @@ -0,0 +1,12 @@ +# kubernetes/cilium/kustomization.yaml +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization + +helmCharts: + - name: jellyfin + repo: https://jellyfin.github.io/jellyfin-helm + version: 2.3.0 + releaseName: jellyfin + includeCRDs: true + namespace: jellyfin + valuesFile: values.yaml diff --git a/jellyfin/src/values.yaml b/jellyfin/src/values.yaml new file mode 100644 index 0000000..84b2067 --- /dev/null +++ b/jellyfin/src/values.yaml @@ -0,0 +1,238 @@ +# Default values for Jellyfin. +# This is a YAML-formatted file. + +# -- Number of Jellyfin replicas to start. Should be left at 1. +replicaCount: 1 + +# -- Image pull secrets to authenticate with private repositories. +# See: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/ +imagePullSecrets: [] + +image: + # -- Container image repository for Jellyfin. + repository: docker.io/jellyfin/jellyfin + # -- Jellyfin container image tag. Leave empty to automatically use the Chart's app version. + tag: "" + # -- Image pull policy (Always, IfNotPresent, or Never). + pullPolicy: IfNotPresent + +# -- Override the default name of the chart. +nameOverride: "" +# -- Override the default full name of the chart. +fullnameOverride: "" + +# -- Service account configuration. See: https://kubernetes.io/docs/concepts/security/service-accounts/ +serviceAccount: + # -- Specifies whether to create a service account. + create: true + # -- Automatically mount API credentials for the service account. + automount: true + # -- Annotations for the service account. + annotations: {} + # -- Custom name for the service account. If left empty, the name will be autogenerated. + name: "" + +# -- Annotations to add to the pod. +podAnnotations: {} +# -- Additional labels to add to the pod. +podLabels: {} + +# -- Security context for the pod. +podSecurityContext: {} + # fsGroup: 2000 + +# -- Security context for the container. +securityContext: {} + # capabilities: + # drop: + # - ALL + # readOnlyRootFilesystem: true + # runAsNonRoot: true + # runAsUser: 1000 + +# -- Define a custom runtimeClassName for the pod. +runtimeClassName: '' + +# -- Define a priorityClassName for the pod. +priorityClassName: "" + +# -- Deployment strategy configuration. See `kubectl explain deployment.spec.strategy`. +deploymentStrategy: + type: RollingUpdate + +# -- Annotations to add to the deployment. +deploymentAnnotations: {} + +service: + # # -- Custom name for the service port + # name: http + # -- Service type (ClusterIP, NodePort, or LoadBalancer). + type: ClusterIP + # -- Configure dual-stack IP family policy. See: https://kubernetes.io/docs/concepts/services-networking/dual-stack/ + ipFamilyPolicy: "" + # -- Supported IP families (IPv4, IPv6). + ipFamilies: [] + # -- Specific IP address for the LoadBalancer. + loadBalancerIP: "" + # -- Class of the LoadBalancer. + loadBalancerClass: "" + # -- Source ranges allowed to access the LoadBalancer. + loadBalancerSourceRanges: [] + # -- Port for the Jellyfin service. + port: 8096 + # -- Name of the port in the service. + portName: service + # -- Annotations for the service. + annotations: {} + # -- Labels for the service. + labels: {} + # -- External traffic policy (Cluster or Local). + # externalTrafficPolicy: Cluster + # -- NodePort for the service (if applicable). + # nodePort: + +# -- Ingress configuration. See: https://kubernetes.io/docs/concepts/services-networking/ingress/ +ingress: + enabled: false + className: "" + annotations: {} + # kubernetes.io/ingress.class: nginx + # kubernetes.io/tls-acme: "true" + hosts: + - host: chart-example.local + paths: + - path: / + pathType: ImplementationSpecific + tls: [] + # - secretName: chart-example-tls + # hosts: + # - chart-example.local + +# -- Resource requests and limits for the Jellyfin container. +resources: {} + # limits: + # cpu: 100m + # memory: 128Mi + # requests: + # cpu: 100m + # memory: 128Mi + +# -- Configure liveness probe for Jellyfin. +livenessProbe: + initialDelaySeconds: 10 + tcpSocket: + port: http + # successThreshold: 1 + # failureThreshold: 3 + # timeoutSeconds: 1 + # periodSeconds: 10 + +# -- Configure readiness probe for Jellyfin. +readinessProbe: + initialDelaySeconds: 10 + tcpSocket: + port: http + # successThreshold: 1 + # failureThreshold: 3 + # timeoutSeconds: 1 + # periodSeconds: 10 + +# -- Additional volumes to mount in the Jellyfin pod. +volumes: [] +# - name: foo +# secret: +# secretName: mysecret +# optional: false + +# -- Additional volume mounts for the Jellyfin container. +volumeMounts: [] +# - name: foo +# mountPath: "/etc/foo" +# readOnly: true + +# -- Node selector for pod scheduling. +nodeSelector: {} + +# -- Tolerations for pod scheduling. +tolerations: [] + +# -- Affinity rules for pod scheduling. +affinity: {} + +jellyfin: + # -- Enable DLNA. Requires host network. See: https://jellyfin.org/docs/general/networking/dlna.html + enableDLNA: false + # -- Custom command to use as container entrypoint. + command: [] + # -- Additional arguments for the entrypoint command. + args: [] + # -- Additional environment variables for the container. + env: [] + +persistence: + config: + # -- set to false to use emptyDir + enabled: true + accessMode: ReadWriteOnce + size: 5Gi + # -- Custom annotations to be added to the PVC + annotations: {} + # -- If undefined (the default) or set to null, no storageClassName spec is set, choosing the default provisioner. + storageClass: '' + ## -- Use an existing PVC for this mount + # existingClaim: '' + media: + # -- set to false to use emptyDir + enabled: true + accessMode: ReadWriteOnce + size: 25Gi + # -- Custom annotations to be added to the PVC + annotations: {} + # -- If undefined (the default) or set to null, no storageClassName spec is set, choosing the default provisioner. + storageClass: '' + ## -- Use an existing PVC for this mount + # existingClaim: '' + +# -- Configuration for metrics collection and monitoring +metrics: + # -- Enable or disable metrics collection - Ensure you have started and configured your Jellyfin instance first as this will fail if system.xml does not exist yet. + enabled: false + command: + - bash + - '-c' + - >- + sed 's,false,true,' -i /config/config/system.xml && + /jellyfin/jellyfin + # -- Configuration for the Prometheus ServiceMonitor + serviceMonitor: + # -- Enable or disable the creation of a ServiceMonitor resource + enabled: false + # -- Namespace where the ServiceMonitor resource should be created. Defaults to Release.Namespace + namespace: '' + # -- Labels to add to the ServiceMonitor resource + labels: {} + # -- Interval at which metrics should be scraped + interval: 30s + # -- Timeout for scraping metrics + scrapeTimeout: 30s + # -- Path to scrape for metrics + path: /metrics + # -- Port to scrape for metrics + port: 8096 + # -- Scheme to use for scraping metrics (http or https) + scheme: http + # -- TLS configuration for scraping metrics + tlsConfig: {} + # -- Relabeling rules for the scraped metrics + relabelings: [] + # -- Relabeling rules for the metrics before ingestion + metricRelabelings: [] + # -- Target labels to add to the scraped metrics + targetLabels: [] + +# -- additional init containers to run inside the pod. +extraInitContainers: [] + +# -- additional sidecar containers to run inside the pod. +extraContainers: [] +