Assignment
This commit is contained in:
parent
9b52815bce
commit
cb6d85dd96
12
Z2/app/Dockerfile
Normal file
12
Z2/app/Dockerfile
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
FROM node:18
|
||||||
|
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
COPY package.json .
|
||||||
|
RUN npm install
|
||||||
|
|
||||||
|
COPY . .
|
||||||
|
|
||||||
|
EXPOSE 3000
|
||||||
|
|
||||||
|
CMD ["node", "server.js"]
|
||||||
9
Z2/app/package.json
Normal file
9
Z2/app/package.json
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"name": "k8s-app",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"main": "server.js",
|
||||||
|
"dependencies": {
|
||||||
|
"express": "^4.18.2",
|
||||||
|
"pg": "^8.11.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
25
Z2/app/server.js
Normal file
25
Z2/app/server.js
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
const express = require("express");
|
||||||
|
const { Pool } = require("pg");
|
||||||
|
|
||||||
|
const app = express();
|
||||||
|
|
||||||
|
const pool = new Pool({
|
||||||
|
host: "postgres-service",
|
||||||
|
user: "postgres",
|
||||||
|
password: "postgres",
|
||||||
|
database: "testdb",
|
||||||
|
port: 5432,
|
||||||
|
});
|
||||||
|
|
||||||
|
app.get("/", async (req, res) => {
|
||||||
|
try {
|
||||||
|
const result = await pool.query("SELECT NOW()");
|
||||||
|
res.send("DB Time: " + result.rows[0].now);
|
||||||
|
} catch (err) {
|
||||||
|
res.send("Database not ready");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
app.listen(3000, () => {
|
||||||
|
console.log("Server running on port 3000");
|
||||||
|
});
|
||||||
21
Z2/k8s/deployment.yaml
Normal file
21
Z2/k8s/deployment.yaml
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: web-app
|
||||||
|
namespace: my-app-namespace
|
||||||
|
spec:
|
||||||
|
replicas: 2
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app: web-app
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: web-app
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- name: web-app
|
||||||
|
image: my-web-app:latest
|
||||||
|
imagePullPolicy: Never
|
||||||
|
ports:
|
||||||
|
- containerPort: 3000
|
||||||
4
Z2/k8s/namespace.yaml
Normal file
4
Z2/k8s/namespace.yaml
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: Namespace
|
||||||
|
metadata:
|
||||||
|
name: my-app-namespace
|
||||||
13
Z2/k8s/service.yaml
Normal file
13
Z2/k8s/service.yaml
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: web-service
|
||||||
|
namespace: my-app-namespace
|
||||||
|
spec:
|
||||||
|
type: NodePort
|
||||||
|
selector:
|
||||||
|
app: web-app
|
||||||
|
ports:
|
||||||
|
- port: 80
|
||||||
|
targetPort: 3000
|
||||||
|
nodePort: 30007
|
||||||
73
Z2/k8s/statefulset.yaml
Normal file
73
Z2/k8s/statefulset.yaml
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolume
|
||||||
|
metadata:
|
||||||
|
name: postgres-pv
|
||||||
|
spec:
|
||||||
|
capacity:
|
||||||
|
storage: 1Gi
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteOnce
|
||||||
|
hostPath:
|
||||||
|
path: "/mnt/s/docker/Z2/data/postgres"
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
name: postgres-pvc
|
||||||
|
namespace: my-app-namespace
|
||||||
|
spec:
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteOnce
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 1Gi
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: postgres-service
|
||||||
|
namespace: my-app-namespace
|
||||||
|
spec:
|
||||||
|
ports:
|
||||||
|
- port: 5432
|
||||||
|
clusterIP: None
|
||||||
|
selector:
|
||||||
|
app: postgres
|
||||||
|
---
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: StatefulSet
|
||||||
|
metadata:
|
||||||
|
name: postgres
|
||||||
|
namespace: my-app-namespace
|
||||||
|
spec:
|
||||||
|
serviceName: "postgres-service"
|
||||||
|
replicas: 1
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app: postgres
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: postgres
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- name: postgres
|
||||||
|
image: postgres:15
|
||||||
|
env:
|
||||||
|
- name: POSTGRES_PASSWORD
|
||||||
|
value: postgres
|
||||||
|
- name: POSTGRES_DB
|
||||||
|
value: testdb
|
||||||
|
ports:
|
||||||
|
- containerPort: 5432
|
||||||
|
volumeMounts:
|
||||||
|
- name: postgres-storage
|
||||||
|
mountPath: /var/lib/postgresql/data
|
||||||
|
volumeClaimTemplates:
|
||||||
|
- metadata:
|
||||||
|
name: postgres-storage
|
||||||
|
spec:
|
||||||
|
accessModes: ["ReadWriteOnce"]
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 1Gi
|
||||||
9
Z2/scripts/prepare-app.sh
Normal file
9
Z2/scripts/prepare-app.sh
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
echo "Building Docker image..."
|
||||||
|
docker build -t my-web-app:latest ./app
|
||||||
|
|
||||||
|
echo "Creating volume directory..."
|
||||||
|
mkdir -p ./data/postgres
|
||||||
|
|
||||||
|
echo "Done."
|
||||||
15
Z2/scripts/start-app.sh
Normal file
15
Z2/scripts/start-app.sh
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
echo "Creating namespace..."
|
||||||
|
kubectl apply -f k8s/namespace.yaml
|
||||||
|
|
||||||
|
echo "Deploying database..."
|
||||||
|
kubectl apply -f k8s/statefulset.yaml
|
||||||
|
|
||||||
|
echo "Deploying web app..."
|
||||||
|
kubectl apply -f k8s/deployment.yaml
|
||||||
|
|
||||||
|
echo "Creating service..."
|
||||||
|
kubectl apply -f k8s/service.yaml
|
||||||
|
|
||||||
|
echo "App started!"
|
||||||
6
Z2/scripts/stop-app.sh
Normal file
6
Z2/scripts/stop-app.sh
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
echo "Deleting all resources..."
|
||||||
|
kubectl delete namespace my-app-namespace
|
||||||
|
|
||||||
|
echo "App stopped!"
|
||||||
Loading…
Reference in New Issue
Block a user