Skip to content
This repository has been archived by the owner on Jul 8, 2024. It is now read-only.

Feature/61/k8s #78

Merged
merged 3 commits into from
Jan 9, 2024
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
17 changes: 14 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,11 @@ Sistema de Gestão de Restaurantes (RMS) desenvolvido pelo grupo *"BOPE"* G03 da
#### Stack

![NodeJS](https://img.shields.io/badge/node.js-6DA55F?style=for-the-badge&logo=node.js&logoColor=white)
![TypeScript](https://img.shields.io/badge/typescript-%23007ACC.svg?style=for-the-badge&logo=typescript&logoColor=white)
![NestJS](https://img.shields.io/badge/nestjs-%23E0234E.svg?style=for-the-badge&logo=nestjs&logoColor=white)
![TypeScript](https://img.shields.io/badge/typescript-%23007ACC.svg?style=for-the-badge&logo=typescript&logoColor=white)
![Postgres](https://img.shields.io/badge/postgres-%23316192.svg?style=for-the-badge&logo=postgresql&logoColor=white)
![Docker](https://img.shields.io/badge/docker-%230db7ed.svg?style=for-the-badge&logo=docker&logoColor=white)
![Kubernetes](https://img.shields.io/badge/kubernetes-%23326ce5.svg?style=for-the-badge&logo=kubernetes&logoColor=white)

## Executar a aplicação usando o Docker Compose

Expand All @@ -38,11 +39,21 @@ Sistema de Gestão de Restaurantes (RMS) desenvolvido pelo grupo *"BOPE"* G03 da

> DICA: Não esqueça de remover imagens e volumes antigos antes de executar a imagem Docker do projeto através do Docker Compose.

## Executar a aplicação usando o Kubernetes do Docker Desktop

1. Clonar este repositório;
2. Navegar até a pasta raiz do projeto;
3. Usar o comando `docker build -t rms-bff:latest .` para gerar a imagem de container da aplicação;
4. Usar o comando `kubectl apply -f k8s/namespace.yaml -f k8s/bff/config.yaml -f k8s/bff/deployment.yaml -f k8s/bff/service.yaml -f k8s/bff/hpa.yaml -f k8s/postgres/pvc-pv.yaml -f k8s/postgres/config.yaml -f k8s/postgres/deployment.yaml -f k8s/postgres/service.yaml`
5. Acessar o Swagger em http://localhost:3000/swagger/

> Se preferir você também pode gerenciar o cluster Kubernetes [através do Lens](https://www.mirantis.com/blog/getting-started-with-the-mirantis-lens-kubernetes-extension-in-docker-desktop/).

## Banco de Dados

Você pode conectar-se a instância de banco de dados PostgreSQL usando o [pgAdmin](https://www.pgadmin.org/download/).

> Host: localhost ou 127.0.0.1\
> Host: localhost\
> Porta: 5432 (padrão)\
> Usuário: pguser\
> Senha: pgpwd\
Expand Down Expand Up @@ -100,6 +111,6 @@ $ npm run test:cov

## Requisitos

*Node.js v18.18.0 (LTS) e Docker Engine 24.0.6*
*Node.js v18.18.0 (LTS), Docker Engine 24.0.6 e Kubernetes v1.28*

[![SonarCloud](https://sonarcloud.io/images/project_badges/sonarcloud-white.svg)](https://sonarcloud.io/summary/new_code?id=Grupo-G03-4SOAT-FIAP_rms-backend)
2 changes: 1 addition & 1 deletion docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ services:
db:
container_name: db
hostname: db
image: postgres:latest
image: postgres:16.1
ports:
- "5432:5432"
expose:
Expand Down
13 changes: 13 additions & 0 deletions k8s/bff/config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
apiVersion: v1
kind: ConfigMap
metadata:
name: rms-bff-config
namespace: rms
labels:
app: rms-bff
data:
DB_HOST: "postgres" # Deve refletir o nome do service do PostgreSQL
DB_PORT: "5432"
DB_USERNAME: "pguser"
DB_PASSWORD: "pgpwd"
dannevesdantas marked this conversation as resolved.
Show resolved Hide resolved
DB_NAME: "rms"
32 changes: 32 additions & 0 deletions k8s/bff/deployment.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: rms-bff
namespace: rms
labels:
app: rms-bff
spec:
replicas: 3
selector:
matchLabels:
app: rms-bff
template:
metadata:
labels:
app: rms-bff
spec:
containers:
- name: rms-bff
image: rms-bff:latest
imagePullPolicy: IfNotPresent # Necessário definir "IfNotPresent" ao utilizar o Kubernetes do Docker Desktop para evitar erros "ImagePullBackOff" ao criar os Pods
envFrom:
- configMapRef:
name: rms-bff-config
ports:
- containerPort: 3000
resources:
# You must specify requests for CPU to autoscale
# based on CPU utilization
requests:
cpu: "250m"
memory: "512Mi"
13 changes: 13 additions & 0 deletions k8s/bff/hpa.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
name: rms-bff
namespace: rms
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: rms-bff
minReplicas: 1
maxReplicas: 10
targetCPUUtilizationPercentage: 75 # Escala automaticamente ao atingir 75% de uso de CPU
15 changes: 15 additions & 0 deletions k8s/bff/service.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
apiVersion: v1
kind: Service
metadata:
name: rms-bff
namespace: rms
labels:
app: rms-bff
spec:
selector:
app: rms-bff
type: LoadBalancer # O type "LoadBalancer" torna o service acessível fora do cluster, em localhost, no Kubernetes do Docker Desktop
ports:
- protocol: TCP
port: 3000 # Porta na máquina local
targetPort: 3000 # Porta do Pod
6 changes: 6 additions & 0 deletions k8s/namespace.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
apiVersion: v1
kind: Namespace
metadata:
name: rms
labels:
name: rms
11 changes: 11 additions & 0 deletions k8s/postgres/config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
apiVersion: v1
kind: ConfigMap
metadata:
name: postgres-config
namespace: rms
labels:
app: postgres
data:
POSTGRES_DB: rms
POSTGRES_USER: pguser
POSTGRES_PASSWORD: pgpwd
dannevesdantas marked this conversation as resolved.
Show resolved Hide resolved
31 changes: 31 additions & 0 deletions k8s/postgres/deployment.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: postgres # Sets Deployment name
namespace: rms
spec:
replicas: 1
selector:
matchLabels:
app: postgres
template:
metadata:
labels:
app: postgres
spec:
containers:
- name: postgres
image: postgres:16.1 # Sets Image
imagePullPolicy: "IfNotPresent"
ports:
- containerPort: 5432 # Exposes container port
envFrom:
- configMapRef:
name: postgres-config
volumeMounts:
- mountPath: /var/lib/postgresql/data
name: postgredb
volumes:
- name: postgredb
persistentVolumeClaim:
claimName: postgres-pv-claim
31 changes: 31 additions & 0 deletions k8s/postgres/pvc-pv.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
kind: PersistentVolume
apiVersion: v1
metadata:
name: postgres-pv-volume # Sets PV's name
namespace: rms
labels:
type: local # Sets PV's type to local
app: postgres
spec:
storageClassName: manual
capacity:
storage: 1Gi # Sets PV Volume
accessModes:
- ReadWriteMany
hostPath:
path: "/mnt/data"
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: postgres-pv-claim # Sets name of PVC
namespace: rms
labels:
app: postgres
spec:
storageClassName: manual
accessModes:
- ReadWriteMany # Sets read and write access
resources:
requests:
storage: 1Gi # Sets volume size
14 changes: 14 additions & 0 deletions k8s/postgres/service.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
apiVersion: v1
kind: Service
metadata:
name: postgres # Sets service name
namespace: rms
labels:
app: postgres # Labels and Selectors
spec:
#type: NodePort # Sets service type
type: LoadBalancer # Sets service type # O type "LoadBalancer" torna o service acessível fora do cluster, em localhost, no Kubernetes do Docker Desktop
ports:
- port: 5432 # Sets port to run the postgres application
selector:
app: postgres