diff --git a/docker/pluton/docker-compose.yml b/docker/pluton/docker-compose.yml index e26b374..51176a6 100644 --- a/docker/pluton/docker-compose.yml +++ b/docker/pluton/docker-compose.yml @@ -9,6 +9,7 @@ services: volumes: - ${PLUTON_DATA:-/mnt/nas1/shared/pluton/data}:/data - ${PLUTON_BACKUP_VOLUME_SHARED:-/mnt/nas1/shared}:/backups/shared + - ${PLUTON_BACKUP_VOLUME_DCSI:-/mnt/nas1/dcsi}:/backups/dcsi environment: ENCRYPTION_KEY: ${ENCRYPTION_KEY} USER_NAME: ${USER_NAME} diff --git a/k8s/argo-apps/immich.yaml b/k8s/argo-apps/immich.yaml index 5909eaf..71dcbd4 100644 --- a/k8s/argo-apps/immich.yaml +++ b/k8s/argo-apps/immich.yaml @@ -12,84 +12,90 @@ spec: sources: - repoURL: git.roboces.dev/catalin/fukuops chart: immich - targetRevision: 0.2.1 + targetRevision: 0.2.3 helm: valuesObject: - replicaCount: 1 - securityContext: - allowPrivilegeEscalation: false - readOnlyRootFilesystem: false - runAsUser: 10000 - runAsGroup: 10000 - capabilities: - drop: - - all - service: - type: LoadBalancer - db: - hostname: "192.168.1.3" - port: 5432 - database_name: "immich" - redis: - hostname: "192.168.1.3" - port: 30036 - dbindex: "12" - general: - tz: "Europe/Madrid" - persistence: - library: - enabled: true - storageClass: "truenas-nfs-csi" - accessMode: ReadWriteMany - size: 500Gi - encodedVideo: - enabled: true - storageClass: "truenas-nfs-csi" - accessMode: ReadWriteMany - size: 10Gi - thumbs: - enabled: true - storageClass: "truenas-nfs-csi" - accessMode: ReadWriteMany - size: 10Gi - upload: - enabled: true - storageClass: "truenas-nfs-csi" - accessMode: ReadWriteMany - size: 10Gi - profile: - enabled: true - storageClass: "truenas-nfs-csi" - accessMode: ReadWriteMany - size: 1Gi - backups: - enabled: true - storageClass: "truenas-nfs-csi" - accessMode: ReadWriteMany - size: 10Gi - modelCache: - enabled: true - storageClass: "truenas-nfs-csi" - accessMode: ReadWriteMany - size: 10Gi - resources: - requests: - cpu: 500m - memory: 1Gi - limits: - cpu: 1 - memory: 2Gi - ingress: + machine-learning: enabled: true - annotations: - traefik.ingress.kubernetes.io/router.entrypoints: websecure - traefik.ingress.kubernetes.io/router.tls: "true" - hosts: - - host: photos.roboces.dev - paths: - - path: / - pathType: Prefix - tls: [] + service: + type: LoadBalancer + immich: + autoscaling: + enabled: true + securityContext: + allowPrivilegeEscalation: false + readOnlyRootFilesystem: false + runAsUser: 10000 + runAsGroup: 10000 + capabilities: + drop: + - all + service: + type: LoadBalancer + db: + hostname: "192.168.1.3" + port: 5432 + database_name: "immich" + redis: + hostname: "192.168.1.3" + port: 30036 + dbindex: "12" + general: + tz: "Europe/Madrid" + persistence: + library: + enabled: true + storageClass: "truenas-nfs-csi" + accessMode: ReadWriteMany + size: 500Gi + encodedVideo: + enabled: true + storageClass: "truenas-nfs-csi" + accessMode: ReadWriteMany + size: 10Gi + thumbs: + enabled: true + storageClass: "truenas-nfs-csi" + accessMode: ReadWriteMany + size: 10Gi + upload: + enabled: true + storageClass: "truenas-nfs-csi" + accessMode: ReadWriteMany + size: 10Gi + profile: + enabled: true + storageClass: "truenas-nfs-csi" + accessMode: ReadWriteMany + size: 1Gi + backups: + enabled: true + storageClass: "truenas-nfs-csi" + accessMode: ReadWriteMany + size: 10Gi + modelCache: + enabled: true + storageClass: "truenas-nfs-csi" + accessMode: ReadWriteMany + size: 10Gi + resources: + requests: + cpu: 500m + memory: 1Gi + limits: + cpu: 1 + memory: 2Gi + ingress: + enabled: true + annotations: + traefik.ingress.kubernetes.io/router.entrypoints: websecure + traefik.ingress.kubernetes.io/router.tls: "true" + hosts: + - host: photos.roboces.dev + paths: + - path: / + pathType: Prefix + tls: [] secret: existingSecretName: "immich-secrets" project: roboces diff --git a/k8s/charts/immich/Chart.yaml b/k8s/charts/immich/Chart.yaml index 025a200..62986a0 100644 --- a/k8s/charts/immich/Chart.yaml +++ b/k8s/charts/immich/Chart.yaml @@ -2,7 +2,7 @@ apiVersion: v2 name: immich description: A Helm chart for Immich photo and video backup solution type: application -version: 0.1.0 +version: 0.2.3 appVersion: v3.1.0 keywords: - immich diff --git a/k8s/charts/immich/templates/configmap.yaml b/k8s/charts/immich/templates/configmap.yaml index c919f91..fc0f6b2 100644 --- a/k8s/charts/immich/templates/configmap.yaml +++ b/k8s/charts/immich/templates/configmap.yaml @@ -5,16 +5,16 @@ metadata: labels: {{- include "immich.labels" . | nindent 4 }} data: - TZ: {{ .Values.general.tz | quote }} - IMMICH_PORT: {{ .Values.service.port | quote }} + TZ: {{ .Values.immich.general.tz | quote }} + IMMICH_PORT: {{ .Values.immich.service.port | quote }} IMMICH_MACHINE_LEARNING_URL: {{ printf "http://%s-machine-learning:3003" (include "immich.fullname" .) | quote }} - {{- range $key, $value := .Values.db }} + {{- range $key, $value := .Values.immich.db }} {{- if and (ne $key "password") $value }} {{ $keyName := printf "DB_%s" (upper $key) }} {{ $keyName }}: {{ $value | quote }} {{- end }} {{- end }} - {{- range $key, $value := .Values.redis }} + {{- range $key, $value := .Values.immich.redis }} {{- if and (ne $key "password") (ne $key "username") $value }} {{ $keyName := printf "REDIS_%s" (upper $key) }} {{ $keyName }}: {{ $value | quote }} diff --git a/k8s/charts/immich/templates/deployment.yaml b/k8s/charts/immich/templates/deployment.yaml index ffbf537..789bde1 100644 --- a/k8s/charts/immich/templates/deployment.yaml +++ b/k8s/charts/immich/templates/deployment.yaml @@ -6,8 +6,8 @@ metadata: {{- include "immich.labels" . | nindent 4 }} app.kubernetes.io/component: server spec: - {{- if not .Values.autoscaling.enabled }} - replicas: {{ .Values.replicaCount }} + {{- if not .Values.immich.autoscaling.enabled }} + replicas: {{ .Values.immich.replicaCount }} {{- end }} selector: matchLabels: @@ -20,7 +20,7 @@ spec: type: RollingUpdate template: metadata: - {{- with .Values.podAnnotations }} + {{- with .Values.immich.podAnnotations }} annotations: {{- toYaml . | nindent 8 }} {{- end }} @@ -28,15 +28,15 @@ spec: {{- include "immich.selectorLabels" . | nindent 8 }} app.kubernetes.io/component: server spec: - {{- with .Values.imagePullSecrets }} + {{- with .Values.immich.imagePullSecrets }} imagePullSecrets: {{- toYaml . | nindent 8 }} {{- end }} securityContext: - {{- toYaml .Values.podSecurityContext | nindent 8 }} + {{- toYaml .Values.immich.podSecurityContext | nindent 8 }} initContainers: - name: init-immich - image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}" + image: "{{ .Values.immich.image.repository }}:{{ .Values.immich.image.tag | default .Chart.AppVersion }}" imagePullPolicy: IfNotPresent command: - sh @@ -65,9 +65,9 @@ spec: containers: - name: {{ .Chart.Name }}-server securityContext: - {{- toYaml .Values.securityContext | nindent 12 }} - image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}" - imagePullPolicy: {{ .Values.image.pullPolicy }} + {{- toYaml .Values.immich.securityContext | nindent 12 }} + image: "{{ .Values.immich.image.repository }}:{{ .Values.immich.image.tag | default .Chart.AppVersion }}" + imagePullPolicy: {{ .Values.immich.image.pullPolicy }} envFrom: {{- if .Values.secret.existingSecretName }} - secretRef: @@ -80,10 +80,10 @@ spec: name: {{ include "immich.fullname" . }} env: - name: IMMICH_PORT - value: {{ .Values.service.port | quote }} + value: {{ .Values.immich.service.port | quote }} - name: IMMICH_MACHINE_LEARNING_URL value: {{ printf "http://%s-machine-learning:3003" (include "immich.fullname" .) | quote }} - {{- range $key, $value := .Values.env }} + {{- range $key, $value := .Values.immich.env }} - name: {{ $key }} value: {{ $value | quote }} {{- end }} @@ -92,75 +92,75 @@ spec: containerPort: 2283 protocol: TCP livenessProbe: - {{- toYaml .Values.livenessProbe | nindent 12 }} + {{- toYaml .Values.immich.livenessProbe | nindent 12 }} readinessProbe: - {{- toYaml .Values.readinessProbe | nindent 12 }} + {{- toYaml .Values.immich.readinessProbe | nindent 12 }} resources: - {{- toYaml .Values.resources | nindent 12 }} + {{- toYaml .Values.immich.resources | nindent 12 }} volumeMounts: - name: library mountPath: /data/library - {{- if .Values.persistence.encodedVideo.enabled }} + {{- if .Values.immich.persistence.encodedVideo.enabled }} - name: encoded-video mountPath: /data/encoded-video {{- end }} - {{- if .Values.persistence.thumbs.enabled }} + {{- if .Values.immich.persistence.thumbs.enabled }} - name: thumbs mountPath: /data/thumbs {{- end }} - {{- if .Values.persistence.upload.enabled }} + {{- if .Values.immich.persistence.upload.enabled }} - name: upload mountPath: /data/upload {{- end }} - {{- if .Values.persistence.profile.enabled }} + {{- if .Values.immich.persistence.profile.enabled }} - name: profile mountPath: /data/profile {{- end }} - {{- if .Values.persistence.backups.enabled }} + {{- if .Values.immich.persistence.backups.enabled }} - name: backups mountPath: /data/backups {{- end }} - {{- with .Values.nodeSelector }} + {{- with .Values.immich.nodeSelector }} nodeSelector: {{- toYaml . | nindent 8 }} {{- end }} - {{- with .Values.affinity }} + {{- with .Values.immich.affinity }} affinity: {{- toYaml . | nindent 8 }} {{- end }} - {{- with .Values.tolerations }} + {{- with .Values.immich.tolerations }} tolerations: {{- toYaml . | nindent 8 }} {{- end }} restartPolicy: Always automountServiceAccountToken: false volumes: - {{- if .Values.persistence.library.enabled }} + {{- if .Values.immich.persistence.library.enabled }} - name: library persistentVolumeClaim: claimName: {{ include "immich.fullname" . }}-library {{- end }} - {{- if .Values.persistence.encodedVideo.enabled }} + {{- if .Values.immich.persistence.encodedVideo.enabled }} - name: encoded-video persistentVolumeClaim: claimName: {{ include "immich.fullname" . }}-encoded-video {{- end }} - {{- if .Values.persistence.thumbs.enabled }} + {{- if .Values.immich.persistence.thumbs.enabled }} - name: thumbs persistentVolumeClaim: claimName: {{ include "immich.fullname" . }}-thumbs {{- end }} - {{- if .Values.persistence.upload.enabled }} + {{- if .Values.immich.persistence.upload.enabled }} - name: upload persistentVolumeClaim: claimName: {{ include "immich.fullname" . }}-upload {{- end }} - {{- if .Values.persistence.profile.enabled }} + {{- if .Values.immich.persistence.profile.enabled }} - name: profile persistentVolumeClaim: claimName: {{ include "immich.fullname" . }}-profile {{- end }} - {{- if .Values.persistence.backups.enabled }} + {{- if .Values.immich.persistence.backups.enabled }} - name: backups persistentVolumeClaim: claimName: {{ include "immich.fullname" . }}-backups diff --git a/k8s/charts/immich/templates/hpa.yaml b/k8s/charts/immich/templates/hpa.yaml index dea6988..f738419 100644 --- a/k8s/charts/immich/templates/hpa.yaml +++ b/k8s/charts/immich/templates/hpa.yaml @@ -1,4 +1,4 @@ -{{- if .Values.autoscaling.enabled }} +{{- if .Values.immich.autoscaling.enabled }} --- apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler @@ -12,23 +12,23 @@ spec: apiVersion: apps/v1 kind: Deployment name: {{ include "immich.fullname" . }}-server - minReplicas: {{ .Values.autoscaling.minReplicas }} - maxReplicas: {{ .Values.autoscaling.maxReplicas }} + minReplicas: {{ .Values.immich.autoscaling.minReplicas }} + maxReplicas: {{ .Values.immich.autoscaling.maxReplicas }} metrics: - {{- if .Values.autoscaling.targetCPUUtilizationPercentage }} + {{- if .Values.immich.autoscaling.targetCPUUtilizationPercentage }} - type: Resource resource: name: cpu target: type: Utilization - averageUtilization: {{ .Values.autoscaling.targetCPUUtilizationPercentage }} + averageUtilization: {{ .Values.immich.autoscaling.targetCPUUtilizationPercentage }} {{- end }} - {{- if .Values.autoscaling.targetMemoryUtilizationPercentage }} + {{- if .Values.immich.autoscaling.targetMemoryUtilizationPercentage }} - type: Resource resource: name: memory target: type: Utilization - averageUtilization: {{ .Values.autoscaling.targetMemoryUtilizationPercentage }} + averageUtilization: {{ .Values.immich.autoscaling.targetMemoryUtilizationPercentage }} {{- end }} {{- end }} diff --git a/k8s/charts/immich/templates/ingress.yaml b/k8s/charts/immich/templates/ingress.yaml index 76cabab..716e709 100644 --- a/k8s/charts/immich/templates/ingress.yaml +++ b/k8s/charts/immich/templates/ingress.yaml @@ -1,23 +1,23 @@ -{{- if .Values.ingress.enabled -}} +{{- if .Values.immich.ingress.enabled -}} {{- $fullName := include "immich.fullname" . -}} -{{- $svcPort := .Values.service.port -}} +{{- $svcPort := .Values.immich.service.port -}} apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: {{ $fullName }} labels: {{- include "immich.labels" . | nindent 4 }} - {{- with .Values.ingress.annotations }} + {{- with .Values.immich.ingress.annotations }} annotations: {{- toYaml . | nindent 4 }} {{- end }} spec: - {{- if .Values.ingress.className }} - ingressClassName: {{ .Values.ingress.className }} + {{- if .Values.immich.ingress.className }} + ingressClassName: {{ .Values.immich.ingress.className }} {{- end }} - {{- if .Values.ingress.tls }} + {{- if .Values.immich.ingress.tls }} tls: - {{- range .Values.ingress.tls }} + {{- range .Values.immich.ingress.tls }} - hosts: {{- range .hosts }} - {{ . | quote }} @@ -26,7 +26,7 @@ spec: {{- end }} {{- end }} rules: - {{- range .Values.ingress.hosts }} + {{- range .Values.immich.ingress.hosts }} - host: {{ .host | quote }} http: paths: diff --git a/k8s/charts/immich/templates/pvc.yaml b/k8s/charts/immich/templates/pvc.yaml index 492c972..1b8b7dc 100644 --- a/k8s/charts/immich/templates/pvc.yaml +++ b/k8s/charts/immich/templates/pvc.yaml @@ -1,4 +1,4 @@ -{{- if .Values.persistence.library.enabled }} +{{- if .Values.immich.persistence.library.enabled }} --- apiVersion: v1 kind: PersistentVolumeClaim @@ -8,15 +8,15 @@ metadata: {{- include "immich.labels" . | nindent 4 }} spec: accessModes: - - {{ .Values.persistence.library.accessMode }} - {{- if .Values.persistence.library.storageClass }} - storageClassName: {{ .Values.persistence.library.storageClass | quote }} + - {{ .Values.immich.persistence.library.accessMode }} + {{- if .Values.immich.persistence.library.storageClass }} + storageClassName: {{ .Values.immich.persistence.library.storageClass | quote }} {{- end }} resources: requests: - storage: {{ .Values.persistence.library.size }} + storage: {{ .Values.immich.persistence.library.size }} {{- end }} -{{- if .Values.persistence.encodedVideo.enabled }} +{{- if .Values.immich.persistence.encodedVideo.enabled }} --- apiVersion: v1 kind: PersistentVolumeClaim @@ -26,15 +26,15 @@ metadata: {{- include "immich.labels" . | nindent 4 }} spec: accessModes: - - {{ .Values.persistence.encodedVideo.accessMode }} - {{- if .Values.persistence.encodedVideo.storageClass }} - storageClassName: {{ .Values.persistence.encodedVideo.storageClass | quote }} + - {{ .Values.immich.persistence.encodedVideo.accessMode }} + {{- if .Values.immich.persistence.encodedVideo.storageClass }} + storageClassName: {{ .Values.immich.persistence.encodedVideo.storageClass | quote }} {{- end }} resources: requests: - storage: {{ .Values.persistence.encodedVideo.size }} + storage: {{ .Values.immich.persistence.encodedVideo.size }} {{- end }} -{{- if .Values.persistence.thumbs.enabled }} +{{- if .Values.immich.persistence.thumbs.enabled }} --- apiVersion: v1 kind: PersistentVolumeClaim @@ -44,15 +44,15 @@ metadata: {{- include "immich.labels" . | nindent 4 }} spec: accessModes: - - {{ .Values.persistence.thumbs.accessMode }} - {{- if .Values.persistence.thumbs.storageClass }} - storageClassName: {{ .Values.persistence.thumbs.storageClass | quote }} + - {{ .Values.immich.persistence.thumbs.accessMode }} + {{- if .Values.immich.persistence.thumbs.storageClass }} + storageClassName: {{ .Values.immich.persistence.thumbs.storageClass | quote }} {{- end }} resources: requests: - storage: {{ .Values.persistence.thumbs.size }} + storage: {{ .Values.immich.persistence.thumbs.size }} {{- end }} -{{- if .Values.persistence.upload.enabled }} +{{- if .Values.immich.persistence.upload.enabled }} --- apiVersion: v1 kind: PersistentVolumeClaim @@ -62,15 +62,15 @@ metadata: {{- include "immich.labels" . | nindent 4 }} spec: accessModes: - - {{ .Values.persistence.upload.accessMode }} - {{- if .Values.persistence.upload.storageClass }} - storageClassName: {{ .Values.persistence.upload.storageClass | quote }} + - {{ .Values.immich.persistence.upload.accessMode }} + {{- if .Values.immich.persistence.upload.storageClass }} + storageClassName: {{ .Values.immich.persistence.upload.storageClass | quote }} {{- end }} resources: requests: - storage: {{ .Values.persistence.upload.size }} + storage: {{ .Values.immich.persistence.upload.size }} {{- end }} -{{- if .Values.persistence.profile.enabled }} +{{- if .Values.immich.persistence.profile.enabled }} --- apiVersion: v1 kind: PersistentVolumeClaim @@ -80,15 +80,15 @@ metadata: {{- include "immich.labels" . | nindent 4 }} spec: accessModes: - - {{ .Values.persistence.profile.accessMode }} - {{- if .Values.persistence.profile.storageClass }} - storageClassName: {{ .Values.persistence.profile.storageClass | quote }} + - {{ .Values.immich.persistence.profile.accessMode }} + {{- if .Values.immich.persistence.profile.storageClass }} + storageClassName: {{ .Values.immich.persistence.profile.storageClass | quote }} {{- end }} resources: requests: - storage: {{ .Values.persistence.profile.size }} + storage: {{ .Values.immich.persistence.profile.size }} {{- end }} -{{- if .Values.persistence.backups.enabled }} +{{- if .Values.immich.persistence.backups.enabled }} --- apiVersion: v1 kind: PersistentVolumeClaim @@ -98,15 +98,15 @@ metadata: {{- include "immich.labels" . | nindent 4 }} spec: accessModes: - - {{ .Values.persistence.backups.accessMode }} - {{- if .Values.persistence.backups.storageClass }} - storageClassName: {{ .Values.persistence.backups.storageClass | quote }} + - {{ .Values.immich.persistence.backups.accessMode }} + {{- if .Values.immich.persistence.backups.storageClass }} + storageClassName: {{ .Values.immich.persistence.backups.storageClass | quote }} {{- end }} resources: requests: - storage: {{ .Values.persistence.backups.size }} + storage: {{ .Values.immich.persistence.backups.size }} {{- end }} -{{- if .Values.persistence.modelCache.enabled }} +{{- if and .Values.machineLearning.enabled .Values.machineLearning.persistence.modelCache.enabled }} --- apiVersion: v1 kind: PersistentVolumeClaim @@ -116,11 +116,11 @@ metadata: {{- include "immich.labels" . | nindent 4 }} spec: accessModes: - - {{ .Values.persistence.modelCache.accessMode }} - {{- if .Values.persistence.modelCache.storageClass }} - storageClassName: {{ .Values.persistence.modelCache.storageClass | quote }} + - {{ .Values.machineLearning.persistence.modelCache.accessMode }} + {{- if .Values.machineLearning.persistence.modelCache.storageClass }} + storageClassName: {{ .Values.machineLearning.persistence.modelCache.storageClass | quote }} {{- end }} resources: requests: - storage: {{ .Values.persistence.modelCache.size }} + storage: {{ .Values.machineLearning.persistence.modelCache.size }} {{- end }} diff --git a/k8s/charts/immich/templates/secret.yaml b/k8s/charts/immich/templates/secret.yaml index ffd0bd7..d918746 100644 --- a/k8s/charts/immich/templates/secret.yaml +++ b/k8s/charts/immich/templates/secret.yaml @@ -7,17 +7,17 @@ metadata: {{- include "immich.labels" . | nindent 4 }} type: Opaque stringData: - {{- if .Values.db.password }} - DB_PASSWORD: {{ .Values.db.password | quote }} + {{- if .Values.immich.db.password }} + DB_PASSWORD: {{ .Values.immich.db.password | quote }} {{- end }} - {{- if .Values.db.username }} - DB_USERNAME: {{ .Values.db.username | quote }} + {{- if .Values.immich.db.username }} + DB_USERNAME: {{ .Values.immich.db.username | quote }} {{- end }} - {{- if .Values.redis.password }} - REDIS_PASSWORD: {{ .Values.redis.password | quote }} + {{- if .Values.immich.redis.password }} + REDIS_PASSWORD: {{ .Values.immich.redis.password | quote }} {{- end }} - {{- if .Values.redis.username }} - REDIS_USERNAME: {{ .Values.redis.username | quote }} + {{- if .Values.immich.redis.username }} + REDIS_USERNAME: {{ .Values.immich.redis.username | quote }} {{- end }} {{- range $key, $value := .Values.secret.data }} {{ $key }}: {{ $value | quote }} diff --git a/k8s/charts/immich/templates/service.yaml b/k8s/charts/immich/templates/service.yaml index 69c6657..e006a67 100644 --- a/k8s/charts/immich/templates/service.yaml +++ b/k8s/charts/immich/templates/service.yaml @@ -5,9 +5,9 @@ metadata: labels: {{- include "immich.labels" . | nindent 4 }} spec: - type: {{ .Values.service.type }} + type: {{ .Values.immich.service.type }} ports: - - port: {{ .Values.service.port }} + - port: {{ .Values.immich.service.port }} targetPort: http protocol: TCP name: http @@ -15,6 +15,7 @@ spec: {{- include "immich.selectorLabels" . | nindent 4 }} app.kubernetes.io/component: server --- +{{- if .Values.machineLearning.enabled }} apiVersion: v1 kind: Service metadata: @@ -23,12 +24,13 @@ metadata: {{- include "immich.labels" . | nindent 4 }} app.kubernetes.io/component: machine-learning spec: - type: ClusterIP + type: {{ .Values.machineLearning.service.type }} ports: - - port: 3003 + - port: {{ .Values.machineLearning.service.port }} targetPort: http protocol: TCP name: http selector: {{- include "immich.selectorLabels" . | nindent 4 }} app.kubernetes.io/component: machine-learning +{{- end }} diff --git a/k8s/charts/immich/templates/statefulset.yaml b/k8s/charts/immich/templates/statefulset.yaml index 68087de..9d0c4bd 100644 --- a/k8s/charts/immich/templates/statefulset.yaml +++ b/k8s/charts/immich/templates/statefulset.yaml @@ -1,3 +1,4 @@ +{{- if .Values.machineLearning.enabled -}} apiVersion: apps/v1 kind: StatefulSet metadata: @@ -7,8 +8,8 @@ metadata: app.kubernetes.io/component: machine-learning spec: serviceName: {{ include "immich.fullname" . }}-machine-learning-headless - {{- if not .Values.autoscaling.enabled }} - replicas: {{ .Values.replicaCount }} + {{- if not .Values.machineLearning.autoscaling.enabled }} + replicas: {{ .Values.machineLearning.replicaCount }} {{- end }} selector: matchLabels: @@ -16,7 +17,7 @@ spec: app.kubernetes.io/component: machine-learning template: metadata: - {{- with .Values.podAnnotations }} + {{- with .Values.machineLearning.podAnnotations }} annotations: {{- toYaml . | nindent 8 }} {{- end }} @@ -24,41 +25,41 @@ spec: {{- include "immich.selectorLabels" . | nindent 8 }} app.kubernetes.io/component: machine-learning spec: - {{- with .Values.imagePullSecrets }} + {{- with .Values.machineLearning.imagePullSecrets }} imagePullSecrets: {{- toYaml . | nindent 8 }} {{- end }} securityContext: - {{- toYaml .Values.podSecurityContext | nindent 8 }} + {{- toYaml .Values.machineLearning.podSecurityContext | nindent 8 }} containers: - name: {{ .Chart.Name }}-machine-learning securityContext: - {{- toYaml .Values.securityContext | nindent 12 }} - image: "{{ .Values.machineLearningImage.repository }}:{{ .Values.machineLearningImage.tag | default .Chart.AppVersion }}" - imagePullPolicy: {{ .Values.machineLearningImage.pullPolicy }} + {{- toYaml .Values.machineLearning.securityContext | nindent 12 }} + image: "{{ .Values.machineLearning.image.repository }}:{{ .Values.machineLearning.image.tag | default .Chart.AppVersion }}" + imagePullPolicy: {{ .Values.machineLearning.image.pullPolicy }} ports: - name: http containerPort: 3003 protocol: TCP env: - name: IMMICH_PORT - value: {{ .Values.service.port | quote }} + value: {{ .Values.machineLearning.service.port | quote }} - name: IMMICH_MACHINE_LEARNING_PORT value: "3003" resources: - {{- toYaml .Values.resources | nindent 12 }} + {{- toYaml .Values.machineLearning.resources | nindent 12 }} volumeMounts: - name: model-cache mountPath: /cache - {{- with .Values.nodeSelector }} + {{- with .Values.machineLearning.nodeSelector }} nodeSelector: {{- toYaml . | nindent 8 }} {{- end }} - {{- with .Values.affinity }} + {{- with .Values.machineLearning.affinity }} affinity: {{- toYaml . | nindent 8 }} {{- end }} - {{- with .Values.tolerations }} + {{- with .Values.machineLearning.tolerations }} tolerations: {{- toYaml . | nindent 8 }} {{- end }} @@ -68,3 +69,4 @@ spec: - name: model-cache persistentVolumeClaim: claimName: {{ include "immich.fullname" . }}-model-cache +{{- end }} diff --git a/k8s/charts/immich/values.yaml b/k8s/charts/immich/values.yaml index b0297b2..00667ac 100644 --- a/k8s/charts/immich/values.yaml +++ b/k8s/charts/immich/values.yaml @@ -1,114 +1,167 @@ -replicaCount: 1 +immich: + replicaCount: 1 -image: - repository: ghcr.io/immich-app/immich-server - pullPolicy: Always - tag: "" + image: + repository: ghcr.io/immich-app/immich-server + pullPolicy: Always + tag: "" -machineLearningImage: - repository: ghcr.io/immich-app/immich-machine-learning - pullPolicy: Always - tag: "" + imagePullSecrets: [] + podAnnotations: {} + podSecurityContext: {} + securityContext: {} -imagePullSecrets: [] -podAnnotations: {} -podSecurityContext: {} -securityContext: {} + service: + type: ClusterIP + port: 2283 + targetPort: 2283 -service: - type: ClusterIP - port: 2283 - targetPort: 2283 + ingress: + enabled: false -ingress: + db: + hostname: "192.168.1.3" + port: 55432 + username: "" + password: "" + database_name: "" + + redis: + hostname: "192.168.1.3" + port: 300036 + username: "" + password: "" + dbindex: "" + + general: + tz: "Europe/Madrid" + + persistence: + library: + enabled: true + storageClass: "truenas-nfs-csi" + accessMode: ReadWriteMany + size: 10Gi + encodedVideo: + enabled: true + storageClass: "" + accessMode: ReadWriteMany + size: 10Gi + thumbs: + enabled: true + storageClass: "" + accessMode: ReadWriteMany + size: 10Gi + upload: + enabled: true + storageClass: "" + accessMode: ReadWriteMany + size: 10Gi + profile: + enabled: true + storageClass: "" + accessMode: ReadWriteMany + size: 1Gi + backups: + enabled: true + storageClass: "" + accessMode: ReadWriteMany + size: 10Gi + modelCache: + enabled: true + storageClass: "" + accessMode: ReadWriteMany + size: 10Gi + + autoscaling: + enabled: false + minReplicas: 1 + maxReplicas: 3 + targetCPUUtilizationPercentage: 80 + targetMemoryUtilizationPercentage: 80 + + resources: {} + + livenessProbe: + tcpSocket: + port: 2283 + initialDelaySeconds: 30 + timeoutSeconds: 15 + successThreshold: 1 + failureThreshold: 3 + periodSeconds: 10 + + readinessProbe: + tcpSocket: + port: 2283 + initialDelaySeconds: 15 + timeoutSeconds: 2 + successThreshold: 1 + failureThreshold: 3 + periodSeconds: 10 + + nodeSelector: {} + tolerations: [] + affinity: {} + + env: {} + +machineLearning: enabled: false -db: - hostname: "192.168.1.3" - port: 55432 - username: "" - password: "" - database_name: "" + image: + repository: ghcr.io/immich-app/immich-machine-learning + pullPolicy: Always + tag: "" -redis: - hostname: "192.168.1.3" - port: 300036 - username: "" - password: "" - dbindex: "" + imagePullSecrets: [] + podAnnotations: {} + podSecurityContext: {} + securityContext: {} -general: - tz: "Europe/Madrid" + service: + type: ClusterIP + port: 3003 -persistence: - library: - enabled: true - storageClass: "truenas-nfs-csi" - accessMode: ReadWriteMany - size: 10Gi - encodedVideo: - enabled: true - storageClass: "" - accessMode: ReadWriteMany - size: 10Gi - thumbs: - enabled: true - storageClass: "" - accessMode: ReadWriteMany - size: 10Gi - upload: - enabled: true - storageClass: "" - accessMode: ReadWriteMany - size: 10Gi - profile: - enabled: true - storageClass: "" - accessMode: ReadWriteMany - size: 1Gi - backups: - enabled: true - storageClass: "" - accessMode: ReadWriteMany - size: 10Gi - modelCache: - enabled: true - storageClass: "" - accessMode: ReadWriteMany - size: 10Gi + replicaCount: 1 -autoscaling: - enabled: false - minReplicas: 1 - maxReplicas: 3 - targetCPUUtilizationPercentage: 80 - targetMemoryUtilizationPercentage: 80 + autoscaling: + enabled: false + minReplicas: 1 + maxReplicas: 3 + targetCPUUtilizationPercentage: 80 + targetMemoryUtilizationPercentage: 80 -resources: {} + resources: {} -livenessProbe: - tcpSocket: - port: 2283 - initialDelaySeconds: 30 - timeoutSeconds: 15 - successThreshold: 1 - failureThreshold: 3 - periodSeconds: 10 + livenessProbe: + tcpSocket: + port: 3003 + initialDelaySeconds: 30 + timeoutSeconds: 15 + successThreshold: 1 + failureThreshold: 3 + periodSeconds: 10 -readinessProbe: - tcpSocket: - port: 2283 - initialDelaySeconds: 15 - timeoutSeconds: 2 - successThreshold: 1 - failureThreshold: 3 - periodSeconds: 10 + readinessProbe: + tcpSocket: + port: 3003 + initialDelaySeconds: 15 + timeoutSeconds: 2 + successThreshold: 1 + failureThreshold: 3 + periodSeconds: 10 -nodeSelector: {} -tolerations: [] -affinity: {} + nodeSelector: {} + tolerations: [] + affinity: {} -env: {} + persistence: + modelCache: + enabled: true + storageClass: "" + accessMode: ReadWriteMany + size: 10Gi secret: enabled: false