From 21e882148729e9489060aa0fbc0c5c25c114ca6d Mon Sep 17 00:00:00 2001
From: Laszlo Rafael <rlacko99@gmail.com>
Date: Sun, 5 Mar 2023 13:54:33 +0100
Subject: [PATCH] Remove hacky k8s deployment, serve media and static files
 together

---
 k8s/deployment.yml | 117 ++++++++++++++++++++-------------------------
 k8s/ingress.yaml   |  84 ++++++++++++++++----------------
 k8s/service.yml    |  21 ++------
 3 files changed, 98 insertions(+), 124 deletions(-)

diff --git a/k8s/deployment.yml b/k8s/deployment.yml
index 7cf531b..b979cc6 100644
--- a/k8s/deployment.yml
+++ b/k8s/deployment.yml
@@ -1,8 +1,7 @@
----
 apiVersion: apps/v1
 kind: Deployment
 metadata:
-  name: apache-static
+  name: kszkepzes-backend
   namespace: kszk-kepzes-site
 spec:
   strategy:
@@ -10,17 +9,24 @@ spec:
   replicas: 1
   selector:
     matchLabels:
-      app: apache-kszkepzes
+      app: kszkepzes-backend
   template:
     metadata:
       labels:
-        app: apache-kszkepzes
+        app: kszkepzes-backend
     spec:
       initContainers:
-        - name: volume-mount-hack
+        - name: volume-permission-fix
           image: busybox
-          command: ['sh', '-c', 'chown -R 1000:1000 /staticfiles']
+          command:
+            - "sh"
+            - "-c"
+            - |
+              chown -R 1000:1000 /mediafiles
+              chown -R 1000:1000 /staticfiles
           volumeMounts:
+            - name: kszkepzes-media-volume
+              mountPath: /mediafiles
             - name: kszkepzes-static-volume
               mountPath: /staticfiles
           resources:
@@ -28,8 +34,8 @@ spec:
               memory: 30Mi
         - name: kszkepzes-backend-collectstatic
           image: harbor.sch.bme.hu/kszk/kszkepzes-backend:##IMAGETAG##
-          imagePullPolicy: 'Always'
-          command: ['python', 'manage.py', 'collectstatic', '--noinput']
+          imagePullPolicy: "IfNotPresent"
+          command: ["python", "manage.py", "collectstatic", "--noinput"]
           volumeMounts:
             - mountPath: /home/app/kszkepzes-backend/staticfiles
               name: kszkepzes-static-volume
@@ -41,65 +47,10 @@ spec:
           resources:
             limits:
               memory: 200Mi
-        - name: volume-mount-hack-backwards
-          image: busybox
-          command: ['sh', '-c', 'chown -R 0:0 /staticfiles']
-          volumeMounts:
-            - name: kszkepzes-static-volume
-              mountPath: /staticfiles
-          resources:
-            limits:
-              memory: 30Mi
-      containers:
-        - name: apache-kszkepzes
-          image: httpd:2
-          imagePullPolicy: 'Always'
-          volumeMounts:
-            - mountPath: /usr/local/apache2/htdocs/staticfiles
-              name: kszkepzes-static-volume
-          ports:
-            - containerPort: 80
-          resources:
-            limits:
-              memory: 150Mi
-      volumes:
-        - name: kszkepzes-static-volume
-          persistentVolumeClaim:
-            claimName: kszkepzes-static-pv-claim
-      imagePullSecrets:
-        - name: harbor
----
-apiVersion: apps/v1
-kind: Deployment
-metadata:
-  name: kszkepzes-backend
-  namespace: kszk-kepzes-site
-spec:
-  strategy:
-    type: Recreate
-  replicas: 1
-  selector:
-    matchLabels:
-      app: kszkepzes-backend
-  template:
-    metadata:
-      labels:
-        app: kszkepzes-backend
-    spec:
-      initContainers:
-        - name: volume-mount-hack
-          image: busybox
-          command: ['sh', '-c', 'chown -R 1000:1000 /mediafiles']
-          volumeMounts:
-            - name: kszkepzes-media-volume
-              mountPath: /mediafiles
-          resources:
-            limits:
-              memory: 30Mi
         - name: kszkepzes-backend-migrate
           image: harbor.sch.bme.hu/kszk/kszkepzes-backend:##IMAGETAG##
-          imagePullPolicy: 'Always'
-          command: ['python', 'manage.py', 'migrate', '--noinput']
+          imagePullPolicy: "IfNotPresent"
+          command: ["python", "manage.py", "migrate", "--noinput"]
           envFrom:
             - configMapRef:
                 name: kszkepzes-config
@@ -111,10 +62,12 @@ spec:
       containers:
         - name: kszkepzes-backend
           image: harbor.sch.bme.hu/kszk/kszkepzes-backend:##IMAGETAG##
-          imagePullPolicy: 'Always'
+          imagePullPolicy: "IfNotPresent"
           volumeMounts:
             - mountPath: /home/app/kszkepzes-backend/mediafiles
               name: kszkepzes-media-volume
+            - mountPath: /home/app/kszkepzes-backend/staticfiles
+              name: kszkepzes-static-volume
           ports:
             - containerPort: 8000
           envFrom:
@@ -123,11 +76,43 @@ spec:
             - secretRef:
                 name: kszkepzes-secret-config
           resources:
+            requests:
+              cpu: "80m"
             limits:
               memory: 600Mi
+              cpu: "2"
+        - name: kszkepzes-files-serve
+          securityContext:
+            runAsUser: 1000
+            runAsGroup: 1000
+          image: halverneus/static-file-server:latest
+          imagePullPolicy: "Always"
+          volumeMounts:
+            - mountPath: /var/www/html/mediafiles
+              name: kszkepzes-media-volume
+            - mountPath: /var/www/html/staticfiles
+              name: kszkepzes-static-volume
+          ports:
+            - containerPort: 8080
+          env:
+            - name: PORT
+              value: "8080"
+            - name: SHOW_LISTING
+              value: "false"
+            - name: FOLDER
+              value: "/var/www/html"
+          resources:
+            requests:
+              cpu: "20m"
+            limits:
+              memory: 200Mi
+              cpu: "2"
       volumes:
         - name: kszkepzes-media-volume
           persistentVolumeClaim:
             claimName: kszkepzes-media-pv-claim
+        - name: kszkepzes-static-volume
+          persistentVolumeClaim:
+            claimName: kszkepzes-static-pv-claim
       imagePullSecrets:
         - name: harbor
diff --git a/k8s/ingress.yaml b/k8s/ingress.yaml
index 73a0942..bbde98c 100644
--- a/k8s/ingress.yaml
+++ b/k8s/ingress.yaml
@@ -4,51 +4,51 @@ metadata:
   annotations:
     cert-manager.io/cluster-issuer: letsencrypt-prod
     kubernetes.io/ingress.class: nginx
-    kubernetes.io/tls-acme: 'true'
+    kubernetes.io/tls-acme: "true"
     nginx.ingress.kubernetes.io/proxy-body-size: 20m
   name: kszkepzes
   namespace: kszk-kepzes-site
 spec:
   rules:
-  - host: ujonc.kszk.bme.hu
-    http:
-      paths:
-      - path: /
-        pathType: Prefix
-        backend:
-          service:
-            name: kszkepzes-frontend
-            port:
-              number: 3000
-      - path: /api
-        pathType: Prefix
-        backend:
-          service:
-            name: kszkepzes-backend
-            port:
-              number: 8000
-      - path: /admin
-        pathType: Prefix
-        backend:
-          service:
-            name: kszkepzes-backend
-            port:
-              number: 8000
-      - path: /staticfiles
-        pathType: Prefix
-        backend:
-          service:
-            name: kszkepzes-static
-            port:
-              number: 80
-      - path: /mediafiles
-        pathType: Prefix
-        backend:
-          service:
-            name: kszkepzes-backend
-            port:
-              number: 8000
+    - host: ujonc.kszk.bme.hu
+      http:
+        paths:
+          - path: /
+            pathType: Prefix
+            backend:
+              service:
+                name: kszkepzes-frontend
+                port:
+                  number: 3000
+          - path: /api
+            pathType: Prefix
+            backend:
+              service:
+                name: kszkepzes-backend
+                port:
+                  number: 8000
+          - path: /admin
+            pathType: Prefix
+            backend:
+              service:
+                name: kszkepzes-backend
+                port:
+                  number: 8000
+          - path: /staticfiles
+            pathType: Prefix
+            backend:
+              service:
+                name: kszkepzes-backend
+                port:
+                  number: 8080
+          - path: /mediafiles
+            pathType: Prefix
+            backend:
+              service:
+                name: kszkepzes-backend
+                port:
+                  number: 8080
   tls:
-  - hosts:
-    - ujonc.kszk.bme.hu
-    secretName: kszkepzes-cert
+    - hosts:
+        - ujonc.kszk.bme.hu
+      secretName: kszkepzes-cert
diff --git a/k8s/service.yml b/k8s/service.yml
index de940f0..f0f2242 100644
--- a/k8s/service.yml
+++ b/k8s/service.yml
@@ -9,22 +9,11 @@ spec:
   ports:
     - port: 8000
       targetPort: 8000
-      name: back
+      name: backend
+      protocol: TCP
+    - port: 8080
+      targetPort: 8080
+      name: files
       protocol: TCP
   selector:
     app: kszkepzes-backend
-
----
-apiVersion: v1
-kind: Service
-metadata:
-  name: kszkepzes-static
-  namespace: kszk-kepzes-site
-spec:
-  ports:
-  - name: http
-    port: 80
-    protocol: TCP
-    targetPort: 80
-  selector:
-    app: apache-kszkepzes
-- 
GitLab