Переглянути джерело

NAS-115742 / 22.12 / Add an emby chart (#411)

* add emby-server chart

* fix service names length

* rename directory

* remove dns configuration

* address MR feedback

* use requirements.lock
Maxime Gauduin 3 роки тому
батько
коміт
09590c1975

+ 24 - 0
charts/emby/1.0.0/.helmignore

@@ -0,0 +1,24 @@
+# Patterns to ignore when building packages.
+# This supports shell glob matching, relative path matching, and
+# negation (prefixed with !). Only one pattern per line.
+.DS_Store
+# Common VCS dirs
+.git/
+.gitignore
+.bzr/
+.bzrignore
+.hg/
+.hgignore
+.svn/
+# Common backup files
+*.swp
+*.bak
+*.tmp
+*~
+# Various IDEs
+.project
+.idea/
+*.tmproj
+.vscode/
+# OWNERS file for Kubernetes
+OWNERS

+ 16 - 0
charts/emby/1.0.0/Chart.yaml

@@ -0,0 +1,16 @@
+apiVersion: v2
+appVersion: 4.6.7.0
+dependencies:
+- name: common
+  repository: file://../../../library/common/2112.0.0
+  version: 2112.0.0
+description: Emby Server
+home: https://emby.media/
+icon: https://images-na.ssl-images-amazon.com/images/I/41NwssJC1iL.png
+keywords:
+- emby
+- media
+name: emby
+sources:
+- https://hub.docker.com/r/emby/embyserver
+version: 1.0.0

+ 5 - 0
charts/emby/1.0.0/README.md

@@ -0,0 +1,5 @@
+# Emby Server helm chart
+
+## Configuration
+
+Please refer to questions.yaml for a detailed overview on supported configurable items.

+ 3 - 0
charts/emby/1.0.0/app-readme.md

@@ -0,0 +1,3 @@
+# Emby Server
+
+Emby Server is a personal media server with apps on just about every device

BIN
charts/emby/1.0.0/charts/common-2112.0.0.tgz


+ 4 - 0
charts/emby/1.0.0/ix_values.yaml

@@ -0,0 +1,4 @@
+image:
+  pullPolicy: IfNotPresent
+  repository: emby/embyserver
+  tag: 4.6.7.0

+ 166 - 0
charts/emby/1.0.0/questions.yaml

@@ -0,0 +1,166 @@
+groups:
+  - name: "Emby Server Configuration"
+    description: "Configure Emby Server"
+  - name: "Networking"
+    description: "Configure networking for container"
+  - name: "Storage"
+    description: "Persist and share data that is separate from the lifecycle of the container"
+  - name: "Workload Details"
+    description: "Configure how workload should be deployed"
+  - name: "Scaling/Upgrade Policy"
+    description: "Configure how pods are replaced when configuration is upgraded"
+  - name: "Restart Policy"
+    description: "Configure when pod should be restarted in case of failure"
+  - name: "Resource Reservation"
+    description: "Specify resources to be allocated to workload"
+
+portals:
+  web_portal:
+    protocols:
+      - "http"
+    host:
+      - "$node_ip"
+    ports:
+      - "$variable-embyServerHttp.port"
+    path: "/web"
+
+questions:
+  - variable: hostNetwork
+    label: "Configure Host Network"
+    group: "Networking"
+    schema:
+      type: boolean
+      default: false
+
+  - variable: environmentVariables
+    label: "Environment Variables for Emby Server"
+    group: "Emby Server Configuration"
+    schema:
+      type: list
+      default: []
+      items:
+        - variable: environmentVariable
+          label: "Environment Variable"
+          schema:
+            type: dict
+            attrs:
+              - variable: name
+                label: "Name"
+                schema:
+                  type: string
+              - variable: value
+                label: "Value"
+                schema:
+                  type: string
+
+  # Update strategy
+  - variable: updateStrategy
+    description: "Upgrade Policy"
+    label: "Update Strategy"
+    group: "Scaling/Upgrade Policy"
+    schema:
+      type: string
+      default: "Recreate"
+      enum:
+        - value: "RollingUpdate"
+          description: "Create new pods and then kill old ones"
+        - value: "Recreate"
+          description: "Kill existing pods before creating new ones"
+
+  # Port configuration
+  - variable: embyServerHttp
+    label: "Configure Emby Server HTTP Service"
+    group: "Networking"
+    schema:
+      type: dict
+      attrs:
+        - variable: port
+          label: "Port to expose for Emby Server UI"
+          schema:
+            type: int
+            min: 9000
+            max: 65535
+            default: 9096
+
+  # Specify GPU configuration
+  - variable: gpuConfiguration
+    label: "GPU Configuration"
+    group: "Resource Reservation"
+    schema:
+      type: dict
+      $ref:
+        - "definitions/gpuConfiguration"
+      attrs: []
+
+  - variable: appVolumeMounts
+    label: "Emby Server Storage"
+    group: "Storage"
+    schema:
+      type: dict
+      attrs:
+        - variable: config
+          label: "Config Volume"
+          schema:
+            type: dict
+            attrs:
+              - variable: datasetName
+                label: "Emby Server Config Volume Name"
+                schema:
+                  type: string
+                  $ref:
+                    - "normalize/ixVolume"
+                  show_if: [["hostPathEnabled", "=", false]]
+                  default: "ix-emby_config"
+                  editable: false
+                  hidden: true
+              - variable: mountPath
+                label: "Emby Server Config Mount Path"
+                description: "Path where the volume will be mounted inside the pod"
+                schema:
+                  type: path
+                  editable: false
+                  hidden: true
+                  default: "/config"
+              - variable: hostPathEnabled
+                label: "Enable Host Path for Emby Server Config Volume"
+                schema:
+                  type: boolean
+                  default: false
+                  show_subquestions_if: true
+                  subquestions:
+                    - variable: hostPath
+                      label: "Host Path for Emby Server Config Volume"
+                      schema:
+                        type: hostpath
+                        required: true
+
+  - variable: extraAppVolumeMounts
+    label: "Emby Server Extra Host Path Volumes"
+    group: "Storage"
+    schema:
+      type: list
+      items:
+        - variable: extraAppVolume
+          label: "Emby Server Host Path Volume"
+          description: "Add an extra host path volume for emby application"
+          schema:
+            type: dict
+            attrs:
+              - variable: mountPath
+                label: "Mount Path in Pod"
+                description: "Path where the volume will be mounted inside the pod"
+                schema:
+                  type: path
+                  required: true
+              - variable: hostPath
+                label: "Host Path"
+                description: "Host path"
+                schema:
+                  type: hostpath
+                  required: true
+              - variable: readOnly
+                label: "Read Only"
+                description: "Mount hostpath in read-only mode"
+                schema:
+                  type: boolean
+                  default: false

+ 6 - 0
charts/emby/1.0.0/requirements.lock

@@ -0,0 +1,6 @@
+dependencies:
+- name: common
+  repository: file://../../../library/common/2112.0.0
+  version: 2112.0.0
+digest: sha256:47115d9b91afe42c8537dcf0fd8224f2f7d1c775f9ff860efa68a6b57d17d1c0
+generated: "2021-12-06T21:24:36.674776+05:00"

+ 3 - 0
charts/emby/1.0.0/templates/NOTES.txt

@@ -0,0 +1,3 @@
+1. Get the application URL by running these commands:
+
+http://$node_ip:{{ .Values.embyServerHttp.port }}/

+ 73 - 0
charts/emby/1.0.0/templates/deployment.yaml

@@ -0,0 +1,73 @@
+{{ include "common.deployment.common_config" . | nindent 0 }}
+spec: {{ include "common.deployment.common_spec" . | nindent 2 }}
+  template: {{ include "common.deployment.pod.metadata" . | nindent 4 }}
+    spec:
+    {{- if .Values.hostNetwork }}
+      hostNetwork: {{ .Values.hostNetwork }}
+      dnsPolicy: ClusterFirstWithHostNet
+    {{- end }}
+      hostname: {{ template "common.names.fullname" . }}
+      containers:
+        - name: {{ .Chart.Name }}
+          {{ include "common.containers.imageConfig" .Values.image | nindent 10 }}
+          {{ include "common.containers.gpuConfiguration" .Values | nindent 10 }}
+          volumeMounts: {{ include "common.storage.configureAppVolumeMountsInContainer" .Values | nindent 12 }}
+            {{ range $index, $hostPathConfiguration := .Values.extraAppVolumeMounts }}
+            - name: extrappvolume-{{ $index }}
+              mountPath: {{ $hostPathConfiguration.mountPath }}
+              {{ if $hostPathConfiguration.readOnly }}
+              readOnly: {{ $hostPathConfiguration.readOnly }}
+              {{ end }}
+            {{ end }}
+          ports:
+          - name: emby
+            protocol: TCP
+            containerPort: 8096
+          {{- if .Values.hostNetwork }}
+            hostPort: {{ .Values.embyServerHttp.port }}
+          {{- end }}
+          - name: emby-dlna
+            protocol: UDP
+            containerPort: 1900
+          - name: emby-lnd
+            protocol: UDP
+            containerPort: 7359
+          env:
+            - name: KUBE_NAMESPACE
+              valueFrom:
+                fieldRef:
+                  fieldPath: metadata.namespace
+            - name: POD_IP
+              valueFrom:
+                fieldRef:
+                  fieldPath: status.podIP
+            {{ $envList := (default list .Values.environmentVariables) }}
+            {{ if and .Values.gpuConfiguration (hasKey .Values.gpuConfiguration "nvidia.com/gpu") (gt (get .Values.gpuConfiguration "nvidia.com/gpu" | toDecimal) 0) }}
+            {{ $envList = mustAppend $envList (dict "name" "NVIDIA_DRIVER_CAPABILITIES" "value" "all") }}
+            {{ end }}
+            {{ include "common.containers.environmentVariables" (dict "environmentVariables" $envList) | nindent 12 }}
+          readinessProbe:
+            httpGet:
+              path: /emby/System/Ping
+              port: 8096
+            failureThreshold: 5
+            periodSeconds: 15
+          livenessProbe:
+            httpGet:
+              path: /emby/System/Ping
+              port: 8096
+            failureThreshold: 5
+            periodSeconds: 15
+          startupProbe:
+            httpGet:
+              path: /emby/System/Ping
+              port: 8096
+            initialDelaySeconds: 5
+            failureThreshold: 40
+            periodSeconds: 15
+      volumes: {{ include "common.storage.configureAppVolumes" .Values | nindent 8 }}
+        {{ range $index, $hostPathConfiguration := .Values.extraAppVolumeMounts }}
+        - name: extrappvolume-{{ $index }}
+          hostPath:
+            path: {{ $hostPathConfiguration.hostPath }}
+        {{ end }}

+ 15 - 0
charts/emby/1.0.0/templates/service-tcp.yaml

@@ -0,0 +1,15 @@
+{{ $svc := .Values.embyServerHttp }}
+{{ $ports := list }}
+{{ $ports = mustAppend $ports (dict "name" "emby" "port" $svc.port "nodePort" $svc.port "targetPort" "emby") }}
+{{ $ports = mustAppend $ports (dict "name" "http" "port" 80 "targetPort" "emby") }}
+{{ $ports = mustAppend $ports (dict "name" "https" "port" 443 "targetPort" "emby") }}
+{{ $params := . }}
+{{ $_ := set $params "commonService" (dict "ports" $ports ) }}
+{{ if .Values.hostNetwork }}
+{{ $_ := set $params.commonService "nameSuffix" "tcp-cluster-ip" }}
+{{ $_1 := set $params.commonService "type" "ClusterIP" }}
+{{ else }}
+{{ $_ := set $params.commonService "nameSuffix" "tcp" }}
+{{ $_1 := set $params.commonService "type" "NodePort" }}
+{{ end }}
+{{ include "common.classes.service" $params }}

+ 6 - 0
charts/emby/1.0.0/templates/service-udp.yaml

@@ -0,0 +1,6 @@
+{{ $ports := list }}
+{{ $ports = mustAppend $ports (dict "name" "emby-dlna" "port" 1900 "protocol" "UDP" "targetPort" "emby-dlna") }}
+{{ $ports = mustAppend $ports (dict "name" "emby-lnd" "port" 7359 "protocol" "UDP" "targetPort" "emby-lnd") }}
+{{ $params := . }}
+{{ $_ := set $params "commonService" (dict "type" "ClusterIP" "ports" $ports "nameSuffix" "udp" ) }}
+{{ include "common.classes.service" $params }}

+ 21 - 0
charts/emby/1.0.0/templates/tests/deployment-check.yaml

@@ -0,0 +1,21 @@
+{{- $serviceName := (include "common.names.fullname" .) -}}
+apiVersion: v1
+kind: Pod
+metadata:
+  name: "{{ .Release.Name }}-emby-test"
+  labels:
+    app: {{ .Release.Name }}
+    release: {{ .Release.Name }}
+  annotations:
+    "helm.sh/hook": test
+spec:
+    containers:
+      - name: test-curl
+        image: alpine/curl
+        imagePullPolicy: "IfNotPresent"
+        command:
+          - /bin/sh
+          - -ec
+          - |
+            curl --connect-timeout 5 --max-time 10 --retry 5 --retry-delay 15 --retry-max-time 90 --retry-all-errors -ksf http://{{ $serviceName }}-tcp:32496/emby/System/Ping
+    restartPolicy: Never

+ 19 - 0
charts/emby/1.0.0/test_values.yaml

@@ -0,0 +1,19 @@
+appVolumeMounts:
+  config:
+    emptyDir: true
+    mountPath: /config
+emptyDirVolumes: true
+environmentVariables: []
+extraAppVolumeMounts:
+- hostPath: /mnt/extras
+  mountPath: /mnt/extras
+  readOnly: true
+gpuConfiguration: {}
+hostNetwork: false
+image:
+  pullPolicy: IfNotPresent
+  repository: emby/embyserver
+  tag: 4.6.7.0
+embyServerHttp:
+  port: 32496
+updateStrategy: Recreate

+ 3 - 0
charts/emby/item.yaml

@@ -0,0 +1,3 @@
+categories:
+  - entertainment
+icon_url: https://images-na.ssl-images-amazon.com/images/I/41NwssJC1iL.png