Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -37,3 +37,6 @@ override.tf.json
# OS-specific
.DS_Store
Thumbs.db

# Kubernetes Secret
k8s/mongodb-secret.yaml
112 changes: 112 additions & 0 deletions k8s/backend.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: backend
namespace: issue-tracker
labels:
app: backend
spec:
replicas: 2
selector:
matchLabels:
app: backend
templete:
metadata:
labels:
app: backend
spec:
containers:
- name: backend
image: yasindudemel/issue-tracker-backend:latest
ports:
-containerPorts: 8080
env:
- name: NODE_ENV
valueFrom:
configMapKeyRef:
name: app-Config
key: NODE_ENV
- name: REACT_APP_API_URL
valueFrom:
configMapKeyRef:
name: app-Config
key: REACT_APP_API_URL
- name: JWT_SECRET
valueFrom:
secretKeyRef:
name: app-secret
key: jwt-secret
- name: MONGO_URI
value: "mongodb://$(MONGO_USER):$(MONGO_PASSWORD)@mongodb:27017/issue-tracker?authSource=admin"
- name: MONGO_USER
valueFrom:
secretKeyRef:
name: app-secret
key: mongo-user
- name: MONGO_PASSWORD
valueFrom:
secretKeyRef:
name: app-secret
key: mongo-password
resources:
requests:
memory: "256Mi"
cpu: "250m"
limits:
memory: "512Mi"
cpu: "500m"
livenessProbe:
httpGet:
path: /api/health
port: 5000
initialDelaySeconds: 30
periodSeconds: 10
readinessProbe:
httpGet:
path: /api/health
port: 5000
initialDelaySeconds: 5
periodSeconds: 5
---
apiVersion: v1
kind: Service
metadata:
name: backend-service
namespace: issue-tracker
spec:
selector:
app: backend
ports:
- port: 8080
targetPort: 8080
protocol: TCP
type: ClusterIP

---
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: backend-hpa
namespace: issue-tracker
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: backend
minReplicas: 1
maxReplicas: 5
matrics:
- type: Resource
resource:
name: cpu
target:
type: utilization
avarageUtilization: 70
- type: Resource
resource:
name: memory
target:
type: utilization
avarageUtilization: 80


84 changes: 84 additions & 0 deletions k8s/frontend.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: frontend
namespace: issue-tracker
labels:
app: frontend
spec:
replicas: 2
selector:
matchLables:
app: frontend
templete:
metadata:
lables:
app: frontend
spec:
containers:
- name: frontend
image: yasindudemel/issue-tracker-frontend:latest
ports:
- containerPort: 80
resources:
requests:
memory: "64Mi"
cpu: "50m"
limits:
memory: "128Mi"
cpu: "100m"
livenessProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 30
periodSeconds: 10
readinessProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 5
periodSeconds: 5
---
apiVersion: v1
kind: Service
metadata:
name: frontend-service
namespace: issue-tracker
labels:
app: frontend
spec:
selector:
app: frontend
ports:
- port: 80
targetPort: 80
protocol: TCP
type: ClusterIP

---
apiVersion: autoscaling/v2
kinf: HorizontalPodAutoscaler
metadata:
name: frontend-hpa
namespace: issue-tracker
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: frontend
minReplicas: 1
maxReplicas: 5
metrics:
- type: Resource
resource:
name: cpu
target:
type: utilization
avarageUtilization: 70
- type: Resource
resource:
name: memory
target:
type: utilization
avarageUtilization: 80
35 changes: 35 additions & 0 deletions k8s/ingress.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: issue-tracker-Ingress
namespace: issue-tracker
anootations:
nginx.ingress.kubernetes.io/rewrite-target: /
nginx.ingress.kubernetes.io/ssl-redirect: "true"
nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
cert-manager.io/cluster-issuer: "letsencrpyt-prod"
spec:
ingressClassName: nginx
tls:
- hosts:
- issue-tracker.issueTracker.com
secretName: issue-tracker-tls
rules:
- hosts:
- issue-tracker.issueTracker.com
http:
paths:
path: /
pathType: prefix
backend:
service:
name: frontend-service
port:
number: 80
path: /api
pathType: Prefix
backend:
service:
name: backend-service
port:
number: 5000
28 changes: 17 additions & 11 deletions k8s/mongodb.yaml
Original file line number Diff line number Diff line change
@@ -1,29 +1,35 @@
apiVersion : app/v1
apiVersion : apps/v1
kind: StatefulSet
metadata:
name: mongodb
namespace: issue-tracker
specs:
spec:
serviceName: "mongodb"
replicas: 1
selector:
matchLabels:
app: mongodb
template:
metadata:
Labels:
labels:
app: mongodb
specs:
spec:
containers:
- name: mongodb
image: mongo:6-jammy
ports:
- container-ports: 27017
- containerPort: 27017
env:
- name: MONGO_INITDB_ROOT_USERNAME
value: Yasindu
valueFrom:
secretKeyRef:
name: app-secret
key: mongo-user
- name: MONGO_INITDB_ROOT_PASSWORD
value: yasindu20
valueFrom:
secretKeyRef:
name: app-secret
key: mongo-password
volumeMounts:
- name: mongodb-storage
mountPath: /data/db
Expand All @@ -40,15 +46,15 @@ specs:
- mongosh
- --eval
- db.adminCommand('ping')
intialDelaySeconds: 30
initialDelaySeconds: 30
periodSeconds: 10
readinessProbe:
exec:
command:
- mongosh
- --eval
- db.adminCommand('ping')
intialDelaySeconds: 5
initialDelaySeconds: 5
periodSeconds: 5
volumeClaimTemplates:
- metadata:
Expand All @@ -61,7 +67,7 @@ specs:

---
apiVersion: v1
kind: service
kind: Service
metadata:
name: mongodb
namespace: issue-tracker
Expand All @@ -70,5 +76,5 @@ spec:
app: mongodb
ports:
- port: 27017
targetport: 27017
targetPort: 27017
clusterIP: None
15 changes: 2 additions & 13 deletions k8s/namespace.yaml
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
apiVersion: v1
kind: namespace
kind: Namespace
metadata:
name: issue-tracker
labels:
name: issue-tracker

---
apiVersion: v1
kind: ConfigMap
Expand All @@ -14,14 +14,3 @@ metadata:
data:
NODE_ENV: "production"
REACT_APP_API_URL: "http://localhost:8080/api"

---
apiVersion: v1
kind: secret
metadata:
name: app-secret
namespace: issue-tracker
type: Opaque
stringData:
mongodb-uri: "mongodb+srv://Yasindu:yasindu20@issue-tracker-free.ffoquxf.mongodb.net/?retryWrites=true&w=majority&appName=issue-tracker-free"
jwt-secret: "your-super-secret-jwt-key-here-make-it-long-and-complex"
Loading