From 8316373813b9f492c5ba943d3bd1b046d26466cc Mon Sep 17 00:00:00 2001 From: Danilo das Neves Dantas <5115895+dannevesdantas@users.noreply.github.com> Date: Tue, 9 Jan 2024 12:09:18 -0300 Subject: [PATCH 1/3] ci: Set postgres image version --- docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose.yml b/docker-compose.yml index 0bf9962f..27961297 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -5,7 +5,7 @@ services: db: container_name: db hostname: db - image: postgres:latest + image: postgres:16.1 ports: - "5432:5432" expose: From cca2d1cc56237c66e1de47983f022e313b6532a7 Mon Sep 17 00:00:00 2001 From: Danilo das Neves Dantas <5115895+dannevesdantas@users.noreply.github.com> Date: Tue, 9 Jan 2024 12:10:20 -0300 Subject: [PATCH 2/3] ci: Create k8s manifests --- k8s/bff/config.yaml | 13 +++++++++++++ k8s/bff/deployment.yaml | 32 ++++++++++++++++++++++++++++++++ k8s/bff/hpa.yaml | 13 +++++++++++++ k8s/bff/service.yaml | 15 +++++++++++++++ k8s/namespace.yaml | 6 ++++++ k8s/postgres/config.yaml | 11 +++++++++++ k8s/postgres/deployment.yaml | 31 +++++++++++++++++++++++++++++++ k8s/postgres/pvc-pv.yaml | 31 +++++++++++++++++++++++++++++++ k8s/postgres/service.yaml | 14 ++++++++++++++ 9 files changed, 166 insertions(+) create mode 100644 k8s/bff/config.yaml create mode 100644 k8s/bff/deployment.yaml create mode 100644 k8s/bff/hpa.yaml create mode 100644 k8s/bff/service.yaml create mode 100644 k8s/namespace.yaml create mode 100644 k8s/postgres/config.yaml create mode 100644 k8s/postgres/deployment.yaml create mode 100644 k8s/postgres/pvc-pv.yaml create mode 100644 k8s/postgres/service.yaml diff --git a/k8s/bff/config.yaml b/k8s/bff/config.yaml new file mode 100644 index 00000000..6608b24d --- /dev/null +++ b/k8s/bff/config.yaml @@ -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" + DB_NAME: "rms" \ No newline at end of file diff --git a/k8s/bff/deployment.yaml b/k8s/bff/deployment.yaml new file mode 100644 index 00000000..2d66fb02 --- /dev/null +++ b/k8s/bff/deployment.yaml @@ -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" \ No newline at end of file diff --git a/k8s/bff/hpa.yaml b/k8s/bff/hpa.yaml new file mode 100644 index 00000000..23ba4e00 --- /dev/null +++ b/k8s/bff/hpa.yaml @@ -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 \ No newline at end of file diff --git a/k8s/bff/service.yaml b/k8s/bff/service.yaml new file mode 100644 index 00000000..b80edffe --- /dev/null +++ b/k8s/bff/service.yaml @@ -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 \ No newline at end of file diff --git a/k8s/namespace.yaml b/k8s/namespace.yaml new file mode 100644 index 00000000..47f772e4 --- /dev/null +++ b/k8s/namespace.yaml @@ -0,0 +1,6 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: rms + labels: + name: rms \ No newline at end of file diff --git a/k8s/postgres/config.yaml b/k8s/postgres/config.yaml new file mode 100644 index 00000000..14a35330 --- /dev/null +++ b/k8s/postgres/config.yaml @@ -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 \ No newline at end of file diff --git a/k8s/postgres/deployment.yaml b/k8s/postgres/deployment.yaml new file mode 100644 index 00000000..806f824b --- /dev/null +++ b/k8s/postgres/deployment.yaml @@ -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 \ No newline at end of file diff --git a/k8s/postgres/pvc-pv.yaml b/k8s/postgres/pvc-pv.yaml new file mode 100644 index 00000000..e162f5a8 --- /dev/null +++ b/k8s/postgres/pvc-pv.yaml @@ -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 \ No newline at end of file diff --git a/k8s/postgres/service.yaml b/k8s/postgres/service.yaml new file mode 100644 index 00000000..e2299a1e --- /dev/null +++ b/k8s/postgres/service.yaml @@ -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 \ No newline at end of file From a01fae30e60d2a5f2997e12a74a9d8f6ccced6f9 Mon Sep 17 00:00:00 2001 From: Danilo das Neves Dantas <5115895+dannevesdantas@users.noreply.github.com> Date: Tue, 9 Jan 2024 12:10:46 -0300 Subject: [PATCH 3/3] Update README.md --- README.md | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 5e2991c0..c7edeeb2 100644 --- a/README.md +++ b/README.md @@ -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 @@ -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\ @@ -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)