From 5dda1586f9147117618545bca3d292d63f76f035 Mon Sep 17 00:00:00 2001 From: root Date: Wed, 29 Apr 2026 00:16:48 +0200 Subject: [PATCH] Second Assignment --- .gitignore | 2 ++ z1/Dockerfile.frontend | 7 ++++++ z1/frontend/Dockerfile | 7 ++++++ z2/Dockerfile.backend | 6 +++++ z2/k8s/deployment.yaml | 50 +++++++++++++++++++++++++++++++++++++++++ z2/k8s/namespace.yaml | 4 ++++ z2/k8s/service.yaml | 26 +++++++++++++++++++++ z2/k8s/statefulset.yaml | 48 +++++++++++++++++++++++++++++++++++++++ z2/prepare-app.sh | 17 ++++++++++++++ z2/start-app.sh | 11 +++++++++ z2/stop-app.sh | 7 ++++++ 11 files changed, 185 insertions(+) create mode 100644 .gitignore create mode 100644 z1/Dockerfile.frontend create mode 100644 z1/frontend/Dockerfile create mode 100644 z2/Dockerfile.backend create mode 100644 z2/k8s/deployment.yaml create mode 100644 z2/k8s/namespace.yaml create mode 100644 z2/k8s/service.yaml create mode 100644 z2/k8s/statefulset.yaml create mode 100755 z2/prepare-app.sh create mode 100755 z2/start-app.sh create mode 100755 z2/stop-app.sh diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..534e521 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +*.tar +uploads/ diff --git a/z1/Dockerfile.frontend b/z1/Dockerfile.frontend new file mode 100644 index 0000000..d8398cd --- /dev/null +++ b/z1/Dockerfile.frontend @@ -0,0 +1,7 @@ +FROM nginx:alpine + +RUN rm -rf /usr/share/nginx/html/* + +COPY frontend/ /usr/share/nginx/html/ + +EXPOSE 80 diff --git a/z1/frontend/Dockerfile b/z1/frontend/Dockerfile new file mode 100644 index 0000000..1144adf --- /dev/null +++ b/z1/frontend/Dockerfile @@ -0,0 +1,7 @@ +FROM nginx:alpine + +RUN rm -rf /usr/share/nginx/html/* + +COPY . /usr/share/nginx/html/ + +EXPOSE 80 diff --git a/z2/Dockerfile.backend b/z2/Dockerfile.backend new file mode 100644 index 0000000..d0f1bf3 --- /dev/null +++ b/z2/Dockerfile.backend @@ -0,0 +1,6 @@ +FROM node:18 +WORKDIR /app +COPY backend/ . +RUN npm install +EXPOSE 3000 +CMD ["node", "server.js"] diff --git a/z2/k8s/deployment.yaml b/z2/k8s/deployment.yaml new file mode 100644 index 0000000..e9422e8 --- /dev/null +++ b/z2/k8s/deployment.yaml @@ -0,0 +1,50 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: backend + namespace: z2 +spec: + replicas: 1 + selector: + matchLabels: + app: backend + template: + metadata: + labels: + app: backend + spec: + containers: + - name: backend + image: z2_backend:latest + imagePullPolicy: Never + ports: + - containerPort: 3000 + volumeMounts: + - name: uploads-volume + mountPath: /app/uploads + volumes: + - name: uploads-volume + emptyDir: {} + +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: frontend + namespace: z2 +spec: + replicas: 1 + selector: + matchLabels: + app: frontend + template: + metadata: + labels: + app: frontend + spec: + containers: + - name: frontend + image: z2_frontend:latest + imagePullPolicy: Never + ports: + - containerPort: 80 diff --git a/z2/k8s/namespace.yaml b/z2/k8s/namespace.yaml new file mode 100644 index 0000000..151a8f8 --- /dev/null +++ b/z2/k8s/namespace.yaml @@ -0,0 +1,4 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: z2 diff --git a/z2/k8s/service.yaml b/z2/k8s/service.yaml new file mode 100644 index 0000000..0cb30a4 --- /dev/null +++ b/z2/k8s/service.yaml @@ -0,0 +1,26 @@ +apiVersion: v1 +kind: Service +metadata: + name: backend-service + namespace: z2 +spec: + selector: + app: backend + ports: + - port: 3000 + targetPort: 3000 + +--- +apiVersion: v1 +kind: Service +metadata: + name: frontend-service + namespace: z2 +spec: + type: NodePort + selector: + app: frontend + ports: + - port: 80 + targetPort: 80 + nodePort: 30007 diff --git a/z2/k8s/statefulset.yaml b/z2/k8s/statefulset.yaml new file mode 100644 index 0000000..c517a1f --- /dev/null +++ b/z2/k8s/statefulset.yaml @@ -0,0 +1,48 @@ +apiVersion: v1 +kind: Service +metadata: + name: mongo + namespace: z2 + labels: + app: mongo +spec: + clusterIP: None + selector: + app: mongo + ports: + - port: 27017 + targetPort: 27017 + +--- +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: mongo + namespace: z2 +spec: + serviceName: mongo + replicas: 1 + selector: + matchLabels: + app: mongo + template: + metadata: + labels: + app: mongo + spec: + containers: + - name: mongo + image: mongo:6 + ports: + - containerPort: 27017 + volumeMounts: + - name: mongo-storage + mountPath: /data/db + volumeClaimTemplates: + - metadata: + name: mongo-storage + spec: + accessModes:["ReadWriteOnce"] + resources: + requests: + storage: 1Gi diff --git a/z2/prepare-app.sh b/z2/prepare-app.sh new file mode 100755 index 0000000..d777f6a --- /dev/null +++ b/z2/prepare-app.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +echo "Preparing application..." + +# FRONTEND +cd ../z1/frontend +docker build -t z2_frontend:latest . +docker save z2_frontend:latest -o frontend.tar +microk8s ctr image import frontend.tar + +# BACKEND +cd ../backend +docker build -t z2_backend:latest . +docker save z2_backend:latest -o backend.tar +microk8s ctr image import backend.tar + +echo "Preparation done!" diff --git a/z2/start-app.sh b/z2/start-app.sh new file mode 100755 index 0000000..3b52a04 --- /dev/null +++ b/z2/start-app.sh @@ -0,0 +1,11 @@ +#!/bin/bash + +echo "Starting Kubernetes application..." + +microk8s kubectl apply -f k8s/namespace.yaml +microk8s kubectl apply -f k8s/statefulset.yaml +microk8s kubectl apply -f k8s/deployment.yaml +microk8s kubectl apply -f k8s/service.yaml + +echo "Application started!" +echo "Open: http://147.232.204.210:30007" diff --git a/z2/stop-app.sh b/z2/stop-app.sh new file mode 100755 index 0000000..b9ef069 --- /dev/null +++ b/z2/stop-app.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +echo "Stopping Kubernetes application..." + +microk8s kubectl delete -f k8s/ + +echo "Application stopped!"