diff --git a/deployment/k8s/Chart.yaml b/deployment/k8s/Chart.yaml new file mode 100644 index 0000000..93b618e --- /dev/null +++ b/deployment/k8s/Chart.yaml @@ -0,0 +1,6 @@ +apiVersion: v2 +appVersion: 2.0.17 +description: A helm chart for Knightcrawler +name: knightcrawler +type: application +version: 0.1.0 diff --git a/deployment/k8s/templates/NOTES.txt b/deployment/k8s/templates/NOTES.txt new file mode 100644 index 0000000..911eceb --- /dev/null +++ b/deployment/k8s/templates/NOTES.txt @@ -0,0 +1,6 @@ + +Congratulations, + +Knightcrawler is now deployed. This may take a while to be up and responding. + + diff --git a/deployment/k8s/templates/config/knightcrawler.configmap.yaml b/deployment/k8s/templates/config/knightcrawler.configmap.yaml new file mode 100644 index 0000000..1d0ceba --- /dev/null +++ b/deployment/k8s/templates/config/knightcrawler.configmap.yaml @@ -0,0 +1,27 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: '{{ .Release.Name }}-config' + labels: + project: '{{ .Chart.Name }}' + release: '{{ .Release.Name }}' +data: + COLLECTOR_DEBRID_ENABLED: '{{ .Values.knightcrawler.debridcollector.enabled }}' + COLLECTOR_QBIT_ENABLED: '{{ .Values.knightcrawler.qbitcollector.enabled }}' + DEBUG_MODE: '{{ .Values.knightcrawler.debug }}' + METADATA_INSERT_BATCH_SIZE: '{{ .Values.environment.metadata.insertBatchSize }}' + POSTGRES_DB: '{{ .Values.environment.postgres.dbName }}' + POSTGRES_HOST: '{{ if .Values.environment.postgres.external }}{{ .Values.environment.postgres.host }}{{ else }}{{ .Release.Name }}-postgres{{ end }}' + POSTGRES_PORT: '{{ .Values.environment.postgres.port }}' + QBIT_HOST: '{{ .Values.environment.qbitcollector.qbitHost }}' + QBIT_TRACKERS_URL: '{{ .Values.environment.qbitcollector.trackersUrl }}' + RABBITMQ_CONSUMER_QUEUE_NAME: '{{ .Values.environment.producer.queueName }}' + RABBITMQ_DURABLE: '{{ .Values.environment.producer.durable }}' + RABBITMQ_HOST: '{{ if .Values.environment.lavinmq.external }}{{ .Values.environment.lavinmq.host }}{{ else }}{{ .Release.Name }}-lavinmq{{ end }}' + RABBITMQ_MAX_PUBLISH_BATCH_SIZE: '{{ .Values.environment.producer.maxPublishBatchSize }}' + RABBITMQ_MAX_QUEUE_SIZE: '{{ .Values.environment.producer.maxQueueSize }}' + RABBITMQ_PUBLISH_INTERVAL_IN_SECONDS: '{{ .Values.environment.producer.publishIntervalSeconds }}' + REDIS_EXTRA: '{{ .Values.environment.redis.extra }}' + REDIS_HOST: '{{ if .Values.environment.redis.external }}{{ .Values.environment.redis.host }}{{ else }}{{ .Release.Name }}-redis{{ end }}' + REDIS_PORT: '{{ .Values.environment.redis.port }}' + TZ: '{{ .Values.shared.timezone }}' diff --git a/deployment/k8s/templates/config/knightcrawler.secrets.yaml b/deployment/k8s/templates/config/knightcrawler.secrets.yaml new file mode 100644 index 0000000..6ac051a --- /dev/null +++ b/deployment/k8s/templates/config/knightcrawler.secrets.yaml @@ -0,0 +1,15 @@ +apiVersion: v1 +kind: Secret +metadata: + name: '{{ .Release.Name }}-secrets' + labels: + project: '{{ .Chart.Name }}' + release: '{{ .Release.Name }}' +type: Opaque +data: + GITHUB_PAT: '{{ .Values.environment.producer.githubPat | b64enc }}' + COLLECTOR_REAL_DEBRID_API_KEY: '{{ .Values.environment.debridcollector.realDebridApiKey | b64enc }}' + POSTGRES_USER: '{{ .Values.environment.postgres.user | b64enc }}' + POSTGRES_PASSWORD: '{{ .Values.environment.postgres.password | b64enc }}' + RABBITMQ_PASSWORD: '{{ .Values.environment.lavinmq.password | b64enc }}' + RABBITMQ_USER: '{{ .Values.environment.lavinmq.user | b64enc }}' diff --git a/deployment/k8s/templates/infrastructure/lavinmq/lavinmq.service.yaml b/deployment/k8s/templates/infrastructure/lavinmq/lavinmq.service.yaml new file mode 100644 index 0000000..d294084 --- /dev/null +++ b/deployment/k8s/templates/infrastructure/lavinmq/lavinmq.service.yaml @@ -0,0 +1,25 @@ +{{ if .Values.infrastructure.lavinmq.enabled }} +apiVersion: v1 +kind: Service +metadata: + name: '{{ .Release.Name }}-lavinmq' + labels: + component: lavinmq + project: '{{ .Chart.Name }}' + release: '{{ .Release.Name }}' +spec: + selector: + component: lavinmq + release: '{{ .Release.Name }}' + type: ClusterIP + ports: + - protocol: TCP + port: 5672 + targetPort: 5672 + - protocol: TCP + port: 15672 + targetPort: 15672 + - protocol: TCP + port: 15692 + targetPort: 15692 +{{- end -}} \ No newline at end of file diff --git a/deployment/k8s/templates/infrastructure/lavinmq/lavinmq.statefulset.yaml b/deployment/k8s/templates/infrastructure/lavinmq/lavinmq.statefulset.yaml new file mode 100644 index 0000000..1acf142 --- /dev/null +++ b/deployment/k8s/templates/infrastructure/lavinmq/lavinmq.statefulset.yaml @@ -0,0 +1,60 @@ +{{ if .Values.infrastructure.lavinmq.enabled }} +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: '{{ .Release.Name }}-lavinmq' + labels: + component: lavinmq + project: '{{ .Chart.Name }}' + release: '{{ .Release.Name }}' + annotations: + "helm.sh/hook": post-install,post-upgrade + "helm.sh/hook-weight": "0" +spec: + serviceName: '{{ .Release.Name }}-lavinmq' + replicas: 1 + selector: + matchLabels: + component: lavinmq + release: '{{ .Release.Name }}' + template: + metadata: + labels: + component: lavinmq + release: '{{ .Release.Name }}' + spec: + containers: + - name: lavinmq + image: '{{ .Values.infrastructure.lavinmq.image }}:{{ .Values.infrastructure.lavinmq.tag }}' + ports: + - name: lavinmq + containerPort: 5672 + - name: lavinmq-15672 + containerPort: 15672 + - name: lavinmq-15692 + containerPort: 15692 + envFrom: + - configMapRef: + name: '{{ .Release.Name }}-config' + - secretRef: + name: '{{ .Release.Name }}-secrets' + volumeMounts: + - mountPath: /var/lib/lavinmq + name: lavinmq + livenessProbe: + exec: + command: + - lavinmqctl status + periodSeconds: 10 + initialDelaySeconds: 10 + successThreshold: 1 + failureThreshold: 3 + volumeClaimTemplates: + - metadata: + name: lavinmq + spec: + accessModes: [ "ReadWriteOnce" ] + resources: + requests: + storage: '{{ .Values.persistence.lavinmq.capacity }}' +{{- end -}} \ No newline at end of file diff --git a/deployment/k8s/templates/infrastructure/postgres/postgres.service.yaml b/deployment/k8s/templates/infrastructure/postgres/postgres.service.yaml new file mode 100644 index 0000000..aa46007 --- /dev/null +++ b/deployment/k8s/templates/infrastructure/postgres/postgres.service.yaml @@ -0,0 +1,19 @@ +{{ if .Values.infrastructure.postgres.enabled }} +apiVersion: v1 +kind: Service +metadata: + name: '{{ .Release.Name }}-postgres' + labels: + component: postgres + project: '{{ .Chart.Name }}' + release: '{{ .Release.Name }}' +spec: + selector: + component: postgres + release: '{{ .Release.Name }}' + type: ClusterIP + ports: + - protocol: TCP + port: 5432 + targetPort: 5432 +{{- end -}} \ No newline at end of file diff --git a/deployment/k8s/templates/infrastructure/postgres/postgres.statefulset.yaml b/deployment/k8s/templates/infrastructure/postgres/postgres.statefulset.yaml new file mode 100644 index 0000000..0219417 --- /dev/null +++ b/deployment/k8s/templates/infrastructure/postgres/postgres.statefulset.yaml @@ -0,0 +1,58 @@ +{{ if .Values.infrastructure.postgres.enabled }} +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: '{{ .Release.Name }}-postgres' + labels: + component: postgres + project: '{{ .Chart.Name }}' + release: '{{ .Release.Name }}' + annotations: + "helm.sh/hook": post-install,post-upgrade + "helm.sh/hook-weight": "0" +spec: + serviceName: '{{ .Release.Name }}-postgres' + replicas: 1 + selector: + matchLabels: + component: postgres + release: '{{ .Release.Name }}' + template: + metadata: + labels: + component: postgres + release: '{{ .Release.Name }}' + spec: + containers: + - name: postgres + image: '{{ .Values.infrastructure.postgres.image }}:{{ .Values.infrastructure.postgres.tag }}' + ports: + - name: postgres + containerPort: 5432 + envFrom: + - configMapRef: + name: '{{ .Release.Name }}-config' + - secretRef: + name: '{{ .Release.Name }}-secrets' + volumeMounts: + - mountPath: /var/lib/postgresql/data + name: postgres + livenessProbe: + exec: + command: + - sh + - -c + - pg_isready -h localhost -U $POSTGRES_USER + periodSeconds: 10 + initialDelaySeconds: 10 + successThreshold: 1 + failureThreshold: 3 + volumeClaimTemplates: + - metadata: + name: postgres + spec: + accessModes: [ "ReadWriteOnce" ] + resources: + requests: + storage: '{{ .Values.persistence.postgres.capacity }}' +{{- end -}} \ No newline at end of file diff --git a/deployment/k8s/templates/infrastructure/qbittorrent/qbittorrent.deployment.yaml b/deployment/k8s/templates/infrastructure/qbittorrent/qbittorrent.deployment.yaml new file mode 100644 index 0000000..9c3eba8 --- /dev/null +++ b/deployment/k8s/templates/infrastructure/qbittorrent/qbittorrent.deployment.yaml @@ -0,0 +1,57 @@ +{{ if .Values.knightcrawler.qbitcollector.enabled }} +apiVersion: apps/v1 +kind: Deployment +metadata: + name: '{{ .Release.Name }}-qbittorrent' + labels: + component: qbittorrent + project: '{{ .Chart.Name }}' + release: '{{ .Release.Name }}' + annotations: + "helm.sh/hook": post-install,post-upgrade + "helm.sh/hook-weight": "0" +spec: + replicas: 1 + selector: + matchLabels: + component: qbittorrent + release: '{{ .Release.Name }}' + template: + metadata: + labels: + component: qbittorrent + release: '{{ .Release.Name }}' + spec: + containers: + - name: qbittorrent + image: '{{ .Values.infrastructure.qbittorrent.image }}:{{ .Values.infrastructure.qbittorrent.tag }}' + ports: + - name: qbittorrent + containerPort: 6881 + - name: qbittorrent-6881 + containerPort: 6881 + - name: qbittorrent-8080 + containerPort: 8080 + env: + - name: PUID + value: '{{ .Values.environment.qbittorrent.puid }}' + - name: PGID + value: '{{ .Values.environment.qbittorrent.pgid }}' + - name: TORRENTING_PORT + value: '{{ .Values.environment.qbittorrent.torrentingPort }}' + - name: WEBUI_PORT + value: '{{ .Values.environment.qbittorrent.webuiPort }}' + envFrom: + - configMapRef: + name: '{{ .Release.Name }}-config' + - secretRef: + name: '{{ .Release.Name }}-secrets' + livenessProbe: + exec: + command: + - curl --fail http://localhost:8080 + periodSeconds: 10 + initialDelaySeconds: 10 + successThreshold: 1 + failureThreshold: 3 +{{- end -}} \ No newline at end of file diff --git a/deployment/k8s/templates/infrastructure/qbittorrent/qbittorrent.service.yaml b/deployment/k8s/templates/infrastructure/qbittorrent/qbittorrent.service.yaml new file mode 100644 index 0000000..1d8c4e4 --- /dev/null +++ b/deployment/k8s/templates/infrastructure/qbittorrent/qbittorrent.service.yaml @@ -0,0 +1,25 @@ +{{ if .Values.knightcrawler.qbitcollector.enabled }} +apiVersion: v1 +kind: Service +metadata: + name: '{{ .Release.Name }}-qbittorrent' + labels: + component: qbittorrent + project: '{{ .Chart.Name }}' + release: '{{ .Release.Name }}' +spec: + selector: + component: qbittorrent + release: '{{ .Release.Name }}' + type: ClusterIP + ports: + - protocol: TCP + port: 6881 + targetPort: 6881 + - protocol: TCP + port: 6881 + targetPort: 6881 + - protocol: TCP + port: 8080 + targetPort: 8080 +{{- end -}} \ No newline at end of file diff --git a/deployment/k8s/templates/infrastructure/redis/redis.service.yaml b/deployment/k8s/templates/infrastructure/redis/redis.service.yaml new file mode 100644 index 0000000..2dd2384 --- /dev/null +++ b/deployment/k8s/templates/infrastructure/redis/redis.service.yaml @@ -0,0 +1,19 @@ +{{ if .Values.infrastructure.redis.enabled }} +apiVersion: v1 +kind: Service +metadata: + name: '{{ .Release.Name }}-redis' + labels: + component: redis + project: '{{ .Chart.Name }}' + release: '{{ .Release.Name }}' +spec: + selector: + component: redis + release: '{{ .Release.Name }}' + type: ClusterIP + ports: + - protocol: TCP + port: 6379 + targetPort: 6379 +{{- end -}} \ No newline at end of file diff --git a/deployment/k8s/templates/infrastructure/redis/redis.statefulset.yaml b/deployment/k8s/templates/infrastructure/redis/redis.statefulset.yaml new file mode 100644 index 0000000..42a866d --- /dev/null +++ b/deployment/k8s/templates/infrastructure/redis/redis.statefulset.yaml @@ -0,0 +1,56 @@ +{{ if .Values.infrastructure.redis.enabled }} +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: '{{ .Release.Name }}-redis' + labels: + component: redis + project: '{{ .Chart.Name }}' + release: '{{ .Release.Name }}' + annotations: + "helm.sh/hook": post-install,post-upgrade + "helm.sh/hook-weight": "0" +spec: + serviceName: '{{ .Release.Name }}-redis' + replicas: 1 + selector: + matchLabels: + component: redis + release: '{{ .Release.Name }}' + template: + metadata: + labels: + component: redis + release: '{{ .Release.Name }}' + spec: + containers: + - name: redis + image: '{{ .Values.infrastructure.redis.image }}:{{ .Values.infrastructure.redis.tag }}' + ports: + - name: redis + containerPort: 6379 + envFrom: + - configMapRef: + name: '{{ .Release.Name }}-config' + - secretRef: + name: '{{ .Release.Name }}-secrets' + volumeMounts: + - mountPath: /data + name: redis + livenessProbe: + exec: + command: + - redis-cli ping + periodSeconds: 10 + initialDelaySeconds: 10 + successThreshold: 1 + failureThreshold: 3 + volumeClaimTemplates: + - metadata: + name: redis + spec: + accessModes: [ "ReadWriteOnce" ] + resources: + requests: + storage: '{{ .Values.persistence.redis.capacity }}' +{{- end -}} \ No newline at end of file diff --git a/deployment/k8s/templates/jobs/metadata.job.yaml b/deployment/k8s/templates/jobs/metadata.job.yaml new file mode 100644 index 0000000..fe6e1e5 --- /dev/null +++ b/deployment/k8s/templates/jobs/metadata.job.yaml @@ -0,0 +1,28 @@ +apiVersion: batch/v1 +kind: Job +metadata: + name: '{{ .Release.Name }}-metadata' + labels: + component: metadata + project: '{{ .Chart.Name }}' + release: '{{ .Release.Name }}' + annotations: + "helm.sh/hook": post-install,post-upgrade + "helm.sh/hook-weight": "2" + "helm.sh/hook-delete-policy": hook-succeeded +spec: + template: + metadata: + labels: + component: metadata + release: '{{ .Release.Name }}' + spec: + restartPolicy: OnFailure + containers: + - name: metadata + image: '{{ .Values.knightcrawler.metadata.image }}{{ if ne .Values.knightcrawler.globalImageTagOverride "" }}:{{ .Values.knightcrawler.globalImageTagOverride }}{{else}}:{{ .Values.knightcrawler.metadata.tag}}{{ end }}' + envFrom: + - configMapRef: + name: '{{ .Release.Name }}-config' + - secretRef: + name: '{{ .Release.Name }}-secrets' \ No newline at end of file diff --git a/deployment/k8s/templates/jobs/migrator.job.yaml b/deployment/k8s/templates/jobs/migrator.job.yaml new file mode 100644 index 0000000..d7f65e8 --- /dev/null +++ b/deployment/k8s/templates/jobs/migrator.job.yaml @@ -0,0 +1,28 @@ +apiVersion: batch/v1 +kind: Job +metadata: + name: '{{ .Release.Name }}-migrator' + labels: + component: migrator + project: '{{ .Chart.Name }}' + release: '{{ .Release.Name }}' + annotations: + "helm.sh/hook": post-install,post-upgrade + "helm.sh/hook-weight": "1" + "helm.sh/hook-delete-policy": hook-succeeded +spec: + template: + metadata: + labels: + component: migrator + release: '{{ .Release.Name }}' + spec: + restartPolicy: OnFailure + containers: + - name: migrator + image: '{{ .Values.knightcrawler.migrator.image }}{{ if ne .Values.knightcrawler.globalImageTagOverride "" }}:{{ .Values.knightcrawler.globalImageTagOverride }}{{else}}:{{ .Values.knightcrawler.migrator.tag}}{{ end }}' + envFrom: + - configMapRef: + name: '{{ .Release.Name }}-config' + - secretRef: + name: '{{ .Release.Name }}-secrets' \ No newline at end of file diff --git a/deployment/k8s/templates/kc/deployments/addon.deployment.yaml b/deployment/k8s/templates/kc/deployments/addon.deployment.yaml new file mode 100644 index 0000000..cfea0c7 --- /dev/null +++ b/deployment/k8s/templates/kc/deployments/addon.deployment.yaml @@ -0,0 +1,35 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: '{{ .Release.Name }}-addon' + labels: + component: addon + project: '{{ .Chart.Name }}' + release: '{{ .Release.Name }}' + annotations: + "helm.sh/hook": post-install,post-upgrade + "helm.sh/hook-weight": "4" +spec: + replicas: {{ .Values.knightcrawler.addon.replicas }} + selector: + matchLabels: + component: addon + release: '{{ .Release.Name }}' + template: + metadata: + labels: + component: addon + release: '{{ .Release.Name }}' + spec: + containers: + - name: addon + image: '{{ .Values.knightcrawler.addon.image }}{{ if ne .Values.knightcrawler.globalImageTagOverride "" }}:{{ .Values.knightcrawler.globalImageTagOverride }}{{else}}:{{ .Values.knightcrawler.addon.tag}}{{ end }}' + ports: + - name: addon + containerPort: 7000 + envFrom: + - configMapRef: + name: '{{ .Release.Name }}-config' + - secretRef: + name: '{{ .Release.Name }}-secrets' + diff --git a/deployment/k8s/templates/kc/deployments/consumer.deployment.yaml b/deployment/k8s/templates/kc/deployments/consumer.deployment.yaml new file mode 100644 index 0000000..f2e8e39 --- /dev/null +++ b/deployment/k8s/templates/kc/deployments/consumer.deployment.yaml @@ -0,0 +1,32 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: '{{ .Release.Name }}-consumer' + labels: + component: consumer + project: '{{ .Chart.Name }}' + release: '{{ .Release.Name }}' + annotations: + "helm.sh/hook": post-install,post-upgrade + "helm.sh/hook-weight": "4" +spec: + replicas: {{ .Values.knightcrawler.consumer.replicas }} + selector: + matchLabels: + component: consumer + release: '{{ .Release.Name }}' + template: + metadata: + labels: + component: consumer + release: '{{ .Release.Name }}' + spec: + containers: + - name: consumer + image: '{{ .Values.knightcrawler.consumer.image }}{{ if ne .Values.knightcrawler.globalImageTagOverride "" }}:{{ .Values.knightcrawler.globalImageTagOverride }}{{else}}:{{ .Values.knightcrawler.consumer.tag}}{{ end }}' + envFrom: + - configMapRef: + name: '{{ .Release.Name }}-config' + - secretRef: + name: '{{ .Release.Name }}-secrets' + diff --git a/deployment/k8s/templates/kc/deployments/debridcollector.deployment.yaml b/deployment/k8s/templates/kc/deployments/debridcollector.deployment.yaml new file mode 100644 index 0000000..e1ee1a9 --- /dev/null +++ b/deployment/k8s/templates/kc/deployments/debridcollector.deployment.yaml @@ -0,0 +1,31 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: '{{ .Release.Name }}-debridcollector' + labels: + component: debridcollector + project: '{{ .Chart.Name }}' + release: '{{ .Release.Name }}' + annotations: + "helm.sh/hook": post-install,post-upgrade + "helm.sh/hook-weight": "4" +spec: + replicas: {{ .Values.knightcrawler.debridcollector.replicas }} + selector: + matchLabels: + component: debridcollector + release: '{{ .Release.Name }}' + template: + metadata: + labels: + component: debridcollector + release: '{{ .Release.Name }}' + spec: + containers: + - name: debridcollector + image: '{{ .Values.knightcrawler.debridcollector.image }}{{ if ne .Values.knightcrawler.globalImageTagOverride "" }}:{{ .Values.knightcrawler.globalImageTagOverride }}{{else}}:{{ .Values.knightcrawler.debridcollector.tag}}{{ end }}' + envFrom: + - configMapRef: + name: '{{ .Release.Name }}-config' + - secretRef: + name: '{{ .Release.Name }}-secrets' \ No newline at end of file diff --git a/deployment/k8s/templates/kc/deployments/producer.deployment.yaml b/deployment/k8s/templates/kc/deployments/producer.deployment.yaml new file mode 100644 index 0000000..6cd6c90 --- /dev/null +++ b/deployment/k8s/templates/kc/deployments/producer.deployment.yaml @@ -0,0 +1,31 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: '{{ .Release.Name }}-producer' + labels: + component: producer + project: '{{ .Chart.Name }}' + release: '{{ .Release.Name }}' + annotations: + "helm.sh/hook": post-install,post-upgrade + "helm.sh/hook-weight": "4" +spec: + replicas: {{ .Values.knightcrawler.producer.replicas }} + selector: + matchLabels: + component: producer + release: '{{ .Release.Name }}' + template: + metadata: + labels: + component: producer + release: '{{ .Release.Name }}' + spec: + containers: + - name: producer + image: '{{ .Values.knightcrawler.producer.image }}{{ if ne .Values.knightcrawler.globalImageTagOverride "" }}:{{ .Values.knightcrawler.globalImageTagOverride }}{{else}}:{{ .Values.knightcrawler.producer.tag}}{{ end }}' + envFrom: + - configMapRef: + name: '{{ .Release.Name }}-config' + - secretRef: + name: '{{ .Release.Name }}-secrets' \ No newline at end of file diff --git a/deployment/k8s/templates/kc/deployments/qbitcollector.deployment.yaml b/deployment/k8s/templates/kc/deployments/qbitcollector.deployment.yaml new file mode 100644 index 0000000..fd7d866 --- /dev/null +++ b/deployment/k8s/templates/kc/deployments/qbitcollector.deployment.yaml @@ -0,0 +1,33 @@ +{{ if .Values.knightcrawler.qbitcollector.enabled }} +apiVersion: apps/v1 +kind: Deployment +metadata: + name: '{{ .Release.Name }}-qbitcollector' + labels: + component: qbitcollector + project: '{{ .Chart.Name }}' + release: '{{ .Release.Name }}' + annotations: + "helm.sh/hook": post-install,post-upgrade + "helm.sh/hook-weight": "4" +spec: + replicas: {{ .Values.knightcrawler.qbitcollector.replicas }} + selector: + matchLabels: + component: qbitcollector + release: '{{ .Release.Name }}' + template: + metadata: + labels: + component: qbitcollector + release: '{{ .Release.Name }}' + spec: + containers: + - name: qbitcollector + image: '{{ .Values.knightcrawler.qbitcollector.image }}{{ if ne .Values.knightcrawler.globalImageTagOverride "" }}:{{ .Values.knightcrawler.globalImageTagOverride }}{{else}}:{{ .Values.knightcrawler.qbitcollector.tag}}{{ end }}' + envFrom: + - configMapRef: + name: '{{ .Release.Name }}-config' + - secretRef: + name: '{{ .Release.Name }}-secrets' +{{- end -}} \ No newline at end of file diff --git a/deployment/k8s/templates/kc/services/addon.service.yaml b/deployment/k8s/templates/kc/services/addon.service.yaml new file mode 100644 index 0000000..c590e5b --- /dev/null +++ b/deployment/k8s/templates/kc/services/addon.service.yaml @@ -0,0 +1,17 @@ +apiVersion: v1 +kind: Service +metadata: + name: '{{ .Release.Name }}-addon' + labels: + component: addon + project: '{{ .Chart.Name }}' + release: '{{ .Release.Name }}' +spec: + selector: + component: addon + release: '{{ .Release.Name }}' + type: ClusterIP + ports: + - protocol: TCP + port: 7000 + targetPort: 7000 diff --git a/deployment/k8s/values.yaml b/deployment/k8s/values.yaml new file mode 100644 index 0000000..58950e4 --- /dev/null +++ b/deployment/k8s/values.yaml @@ -0,0 +1,100 @@ +knightcrawler: + debug: false + globalImageTagOverride: "" + addon: + image: "gabisonfire/knightcrawler-addon" + tag: "2.0.17" + replicas: 1 + consumer: + image: "gabisonfire/knightcrawler-consumer" + tag: "2.0.17" + replicas: 1 + metadata: + image: "gabisonfire/knightcrawler-metadata" + tag: "2.0.17" + replicas: 1 + migrator: + image: "gabisonfire/knightcrawler-migrator" + tag: "2.0.17" + replicas: 1 + debridcollector: + image: "gabisonfire/knightcrawler-debrid-collector" + tag: "2.0.17" + enabled: true + replicas: 1 + qbitcollector: + image: "gabisonfire/knightcrawler-qbit-collector" + tag: "2.0.17" + enabled: false + replicas: 1 + producer: + image: "gabisonfire/knightcrawler-producer" + tag: "2.0.17" + replicas: 1 + +infrastructure: + lavinmq: + image: "cloudamqp/lavinmq" + tag: "latest" + enabled: true + postgres: + image: "postgres" + tag: "latest" + enabled: true + redis: + image: "redis/redis-stack-server" + tag: "latest" + enabled: true + qbittorrent: + image: "lscr.io/linuxserver/qbittorrent" + tag: "latest" + +environment: + redis: + external: false + host: "" + port: "6379" + extra: "abortConnect=false,allowAdmin=true" + postgres: + external: false + host: "" + port: "5432" + dbName: "knightcrawler" + user: "postgres" + password: "postgres" + lavinmq: + external: false + host: "" + user: "guest" + password: "guest" + qbitcollector: + qbitHost: "http://qbittorrent:8080" + trackersUrl: "https://raw.githubusercontent.com/ngosang/trackerslist/master/trackers_all_http.txt" + debridcollector: + realDebridApiKey: "" + producer: + githubPat: "" + queueName: "ingested" + durable: true + maxPublishBatchSize: 500 + maxQueueSize: 0 + publishIntervalSeconds: 10 + metadata: + insertBatchSize: 50000 + qbittorrent: + pgid: "1000" + puid: "1000" + torrentingPort: "6881" + webuiPort: "8080" + +persistence: + storageClassName: "" + redis: + capacity: 1Gi + postgres: + capacity: 1Gi + lavinmq: + capacity: 1Gi + +shared: + timezone: "London/Europe" \ No newline at end of file