diff options
Diffstat (limited to 'kubernetes')
| -rw-r--r-- | kubernetes/.env_sample | 6 | ||||
| -rw-r--r-- | kubernetes/.gitignore | 1 | ||||
| -rw-r--r-- | kubernetes/Makefile | 24 | ||||
| -rw-r--r-- | kubernetes/README.md | 7 | ||||
| -rw-r--r-- | kubernetes/chrome-deployment.yaml | 26 | ||||
| -rw-r--r-- | kubernetes/data-pvc.yaml | 10 | ||||
| -rw-r--r-- | kubernetes/kustomization.yaml | 51 | ||||
| -rw-r--r-- | kubernetes/meilisearch-deployment.yaml | 30 | ||||
| -rw-r--r-- | kubernetes/meilisearch-pvc.yaml | 10 | ||||
| -rw-r--r-- | kubernetes/meilisearch-service.yaml | 11 | ||||
| -rw-r--r-- | kubernetes/namespace.yaml | 4 | ||||
| -rw-r--r-- | kubernetes/redis-deployment.yaml | 24 | ||||
| -rw-r--r-- | kubernetes/redis-pvc.yaml | 10 | ||||
| -rw-r--r-- | kubernetes/redis-service.yaml | 11 | ||||
| -rw-r--r-- | kubernetes/web-deployment.yaml | 38 | ||||
| -rw-r--r-- | kubernetes/web-service.yaml | 12 | ||||
| -rw-r--r-- | kubernetes/workers-deployment.yaml | 39 |
17 files changed, 314 insertions, 0 deletions
diff --git a/kubernetes/.env_sample b/kubernetes/.env_sample new file mode 100644 index 00000000..c34a7ba9 --- /dev/null +++ b/kubernetes/.env_sample @@ -0,0 +1,6 @@ +HOARDER_VERSION=release +# Use `openssl rand -base64 36` to generate the random strings +NEXTAUTH_SECRET=generated_secret +MEILI_MASTER_KEY=generated_secret +NEXTAUTH_URL=http://localhost:3000 +NEXT_PUBLIC_SECRET="my-super-duper-secret-string" diff --git a/kubernetes/.gitignore b/kubernetes/.gitignore new file mode 100644 index 00000000..640b1b51 --- /dev/null +++ b/kubernetes/.gitignore @@ -0,0 +1 @@ +_manifest.yaml diff --git a/kubernetes/Makefile b/kubernetes/Makefile new file mode 100644 index 00000000..0ca00e2c --- /dev/null +++ b/kubernetes/Makefile @@ -0,0 +1,24 @@ +# Define the output file +OUTPUT_FILE := _manifest.yaml + +# Define the Kustomize build command +KUSTOMIZE_BUILD := kustomize build . + +# The default target +all: build + +$(OUTPUT_FILE): + $(KUSTOMIZE_BUILD) > $(OUTPUT_FILE) + +# Build the Kustomize configuration into the output file +build: clean $(OUTPUT_FILE) + +# Deploy the manifest using kubectl apply +deploy: $(OUTPUT_FILE) + kubectl apply -f $(OUTPUT_FILE) + +# Clean up the output file +clean: + rm -f $(OUTPUT_FILE) + +.PHONY: all build deploy clean diff --git a/kubernetes/README.md b/kubernetes/README.md new file mode 100644 index 00000000..c589f3cf --- /dev/null +++ b/kubernetes/README.md @@ -0,0 +1,7 @@ +# Kubernetes installation with Kustomize + +You can: + +- edit the configuration in `.env`. + +Then run `make deploy`. diff --git a/kubernetes/chrome-deployment.yaml b/kubernetes/chrome-deployment.yaml new file mode 100644 index 00000000..bc49fac8 --- /dev/null +++ b/kubernetes/chrome-deployment.yaml @@ -0,0 +1,26 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: chrome +spec: + replicas: 1 + selector: + matchLabels: + app: chrome + template: + metadata: + labels: + app: chrome + spec: + containers: + - name: chrome + image: gcr.io/zenika-hub/alpine-chrome:123 + command: + - chromium-browser + - --headless + - --no-sandbox + - --disable-gpu + - --disable-dev-shm-usage + - --remote-debugging-address=0.0.0.0 + - --remote-debugging-port=9222 + - --hide-scrollbars diff --git a/kubernetes/data-pvc.yaml b/kubernetes/data-pvc.yaml new file mode 100644 index 00000000..0217be5a --- /dev/null +++ b/kubernetes/data-pvc.yaml @@ -0,0 +1,10 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: data-pvc +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 1Gi
\ No newline at end of file diff --git a/kubernetes/kustomization.yaml b/kubernetes/kustomization.yaml new file mode 100644 index 00000000..4155f71f --- /dev/null +++ b/kubernetes/kustomization.yaml @@ -0,0 +1,51 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization + +namespace: hoarder + +configMapGenerator: +- envs: + - .env + name: hoarder-env + +resources: +- namespace.yaml +- web-deployment.yaml +- web-service.yaml +- redis-deployment.yaml +- redis-service.yaml +- chrome-deployment.yaml +- meilisearch-deployment.yaml +- meilisearch-service.yaml +- workers-deployment.yaml +- redis-pvc.yaml +- meilisearch-pvc.yaml +- data-pvc.yaml + +replacements: +- source: + fieldPath: data.HOARDER_VERSION + kind: ConfigMap + name: hoarder-env + version: v1 + targets: + - fieldPaths: + - spec.template.spec.containers.0.image + options: + delimiter: ':' + index: 1 + select: + group: apps + kind: Deployment + name: web + version: v1 + - fieldPaths: + - spec.template.spec.containers.0.image + options: + delimiter: ':' + index: 1 + select: + group: apps + kind: Deployment + name: workers + version: v1 diff --git a/kubernetes/meilisearch-deployment.yaml b/kubernetes/meilisearch-deployment.yaml new file mode 100644 index 00000000..7cc90e03 --- /dev/null +++ b/kubernetes/meilisearch-deployment.yaml @@ -0,0 +1,30 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: meilisearch +spec: + replicas: 1 + selector: + matchLabels: + app: meilisearch + template: + metadata: + labels: + app: meilisearch + spec: + containers: + - name: meilisearch + image: getmeili/meilisearch:v1.6 + env: + - name: MEILI_NO_ANALYTICS + value: "true" + volumeMounts: + - mountPath: /meili_data + name: meilisearch + envFrom: + - configMapRef: + name: hoarder-env + volumes: + - name: meilisearch + persistentVolumeClaim: + claimName: meilisearch-pvc
\ No newline at end of file diff --git a/kubernetes/meilisearch-pvc.yaml b/kubernetes/meilisearch-pvc.yaml new file mode 100644 index 00000000..379835d1 --- /dev/null +++ b/kubernetes/meilisearch-pvc.yaml @@ -0,0 +1,10 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: meilisearch-pvc +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 1Gi
\ No newline at end of file diff --git a/kubernetes/meilisearch-service.yaml b/kubernetes/meilisearch-service.yaml new file mode 100644 index 00000000..373384e6 --- /dev/null +++ b/kubernetes/meilisearch-service.yaml @@ -0,0 +1,11 @@ +apiVersion: v1 +kind: Service +metadata: + name: meilisearch +spec: + selector: + app: meilisearch + ports: + - protocol: TCP + port: 7700 + targetPort: 7700
\ No newline at end of file diff --git a/kubernetes/namespace.yaml b/kubernetes/namespace.yaml new file mode 100644 index 00000000..8c1a8893 --- /dev/null +++ b/kubernetes/namespace.yaml @@ -0,0 +1,4 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: hoarder diff --git a/kubernetes/redis-deployment.yaml b/kubernetes/redis-deployment.yaml new file mode 100644 index 00000000..b9665e15 --- /dev/null +++ b/kubernetes/redis-deployment.yaml @@ -0,0 +1,24 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: redis +spec: + replicas: 1 + selector: + matchLabels: + app: redis + template: + metadata: + labels: + app: redis + spec: + containers: + - name: redis + image: redis:7.2-alpine + volumeMounts: + - mountPath: /data + name: redis + volumes: + - name: redis + persistentVolumeClaim: + claimName: redis-pvc
\ No newline at end of file diff --git a/kubernetes/redis-pvc.yaml b/kubernetes/redis-pvc.yaml new file mode 100644 index 00000000..81437e5b --- /dev/null +++ b/kubernetes/redis-pvc.yaml @@ -0,0 +1,10 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: redis-pvc +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 1Gi
\ No newline at end of file diff --git a/kubernetes/redis-service.yaml b/kubernetes/redis-service.yaml new file mode 100644 index 00000000..f55ae588 --- /dev/null +++ b/kubernetes/redis-service.yaml @@ -0,0 +1,11 @@ +apiVersion: v1 +kind: Service +metadata: + name: redis +spec: + selector: + app: redis + ports: + - protocol: TCP + port: 6379 + targetPort: 6379
\ No newline at end of file diff --git a/kubernetes/web-deployment.yaml b/kubernetes/web-deployment.yaml new file mode 100644 index 00000000..d4e28024 --- /dev/null +++ b/kubernetes/web-deployment.yaml @@ -0,0 +1,38 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: web +spec: + replicas: 1 + selector: + matchLabels: + app: hoarder-web + template: + metadata: + labels: + app: hoarder-web + spec: + containers: + - name: web + image: ghcr.io/hoarder-app/hoarder-web:HOARDER_VERSION_PLACEHOLDER + ports: + - containerPort: 3000 + env: + - name: REDIS_HOST + value: redis + - name: REDIS_PORT + value: '6379' + - name: MEILI_ADDR + value: http://meilisearch:7700 + - name: DATA_DIR + value: /data + volumeMounts: + - mountPath: /data + name: data + envFrom: + - configMapRef: + name: hoarder-env + volumes: + - name: data + persistentVolumeClaim: + claimName: data-pvc diff --git a/kubernetes/web-service.yaml b/kubernetes/web-service.yaml new file mode 100644 index 00000000..1e96233b --- /dev/null +++ b/kubernetes/web-service.yaml @@ -0,0 +1,12 @@ +apiVersion: v1 +kind: Service +metadata: + name: web +spec: + selector: + app: hoarder-web + ports: + - protocol: TCP + port: 3000 + targetPort: 3000 + type: LoadBalancer
\ No newline at end of file diff --git a/kubernetes/workers-deployment.yaml b/kubernetes/workers-deployment.yaml new file mode 100644 index 00000000..ed4ef838 --- /dev/null +++ b/kubernetes/workers-deployment.yaml @@ -0,0 +1,39 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: workers +spec: + replicas: 1 + selector: + matchLabels: + app: hoarder-workers + template: + metadata: + labels: + app: hoarder-workers + spec: + containers: + - name: workers + image: ghcr.io/hoarder-app/hoarder-workers:HOARDER_VERSION_PLACEHOLDER + env: + - name: REDIS_HOST + value: redis + - name: REDIS_PORT + value: '6379' + - name: MEILI_ADDR + value: http://meilisearch:7700 + - name: BROWSER_WEB_URL + value: http://chrome:9222 + - name: DATA_DIR + value: /data + # Add OPENAI_API_KEY to the ConfigMap if necessary + volumeMounts: + - mountPath: /data + name: data + envFrom: + - configMapRef: + name: hoarder-env + volumes: + - name: data + persistentVolumeClaim: + claimName: data-pvc |
