From 46296718a5594544c792ac6c734be8adc53ba930 Mon Sep 17 00:00:00 2001 From: Jeck0v Date: Wed, 9 Apr 2025 14:43:52 +0200 Subject: [PATCH 01/15] new infra + new project --- infra/README.md | 101 ++++++++++++++++++++++ infra/deployement/client-deployement.yaml | 31 +++++++ infra/deployement/nginx-deployement.yaml | 27 ++++++ infra/deployement/server-deployement.yaml | 32 +++++++ infra/ingress/ingress.yaml | 32 +++++++ infra/networking/duallstack-config.md | 9 ++ infra/networking/netpol.yaml | 21 +++++ infra/nginx/nginx-configmap.yaml | 9 ++ infra/nginx/nginx.conf | 28 ++++++ infra/nginx/readme.md | 31 +++++++ infra/scalling/hpa-client.yaml | 18 ++++ infra/scalling/hpa-server.yaml | 18 ++++ infra/scalling/vpa-client.yaml | 11 +++ infra/scalling/vpa-server.yaml | 11 +++ infra/services/client-services.yaml | 20 +++++ infra/services/nginx-services.yaml | 14 +++ infra/services/server-services.yaml | 19 ++++ 17 files changed, 432 insertions(+) create mode 100644 infra/README.md create mode 100644 infra/deployement/client-deployement.yaml create mode 100644 infra/deployement/nginx-deployement.yaml create mode 100644 infra/deployement/server-deployement.yaml create mode 100644 infra/ingress/ingress.yaml create mode 100644 infra/networking/duallstack-config.md create mode 100644 infra/networking/netpol.yaml create mode 100644 infra/nginx/nginx-configmap.yaml create mode 100644 infra/nginx/nginx.conf create mode 100644 infra/nginx/readme.md create mode 100644 infra/scalling/hpa-client.yaml create mode 100644 infra/scalling/hpa-server.yaml create mode 100644 infra/scalling/vpa-client.yaml create mode 100644 infra/scalling/vpa-server.yaml create mode 100644 infra/services/client-services.yaml create mode 100644 infra/services/nginx-services.yaml create mode 100644 infra/services/server-services.yaml diff --git a/infra/README.md b/infra/README.md new file mode 100644 index 000000000..cfc49d8c4 --- /dev/null +++ b/infra/README.md @@ -0,0 +1,101 @@ +Le temps que l'app fonctionne pas je vais utiliser une image docker valide pour pouvoir construire l'infra +l'image docker viens de: https://hub.docker.com/r/coloradostark/browserquest + + +### Documentation Docker Image +To run the program on a local machine with Docker type: +```bash +docker container run -it -p 80:80 -p 8000:8000 coloradostark/browserquest bash +``` +You will see a command prompt, type the following: +```bash +node server/js/main.js & +``` + +The server is now running. Now Open a new command prompt session and then type the following: + +```bash +docker container exec -it YOUR-CONTAINER-ID-NUMBER bash +``` +```bash +nvm use 10.23.0 + +cd / + +http-server -p 80 ./BrowserQuest/client +``` +That is all you need to do. It should be running and you can test it by typing 127.0.0.1 in the browser. + +More documentation on getting a production server running is located in client and server directories. + +### Documentation lancement Minikube + +#### Installer Minikube et Kubectl sur windows: +On utilise Chocolatery, donc si pas installer => dans powershell admin +```powershell +Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls12; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1')) +``` +Minikube: +```bash +choco install minikube +``` +Kubectl: +```bash +choco install kubernetes-cli +``` +#### Lancement Minikube: +```bash +minikube start --driver=docker --kubernetes-version=v1.32.0 +``` +Si erreur du style : +
+` +❗ L'image n'a pas été construite pour la version actuelle de minikube. Pour résoudre ce problème, vous pouvez supprimer et recréer votre cluster minikube en utilisant les dernières images. Version de minikube attendue : v1.33..1 -> Version de minikube actuelle : v1.35.0 +` +
+Il faut delete le cluster puis refaire le minikube start +```bash +minikube delete +``` +Activer l'ingress de minikube +```bash +minikube addons enable ingress +``` +Dans ton windows host: +```bash +echo "$(minikube ip) browserquest.local" | sudo tee -a /etc/hosts +``` +Aller dans le dossier racine: +```bash +kubectl apply -f infra/nginx/nginx-configmap.yaml +kubectl apply -f infra/deployement/nginx-deployement.yaml +kubectl apply -f infra/deployement/server-deployement.yaml +kubectl apply -f infra/deployement/client-deployement.yaml +kubectl apply -f infra/services/nginx-services.yaml +kubectl apply -f infra/services/server-services.yaml +kubectl apply -f infra/services/client-services.yaml +kubectl apply -f infra/ingress/ingress.yaml +kubectl apply -f infra/scalling/hpa-server.yaml +kubectl apply -f infra/scalling/hpa-client.yaml + + +``` +### Vérrification des pods / services / ingress: +```bash +kubectl get pods +``` +```bash +kubectl get services +kubectl get ingress +``` +### Tester l'app +Go to => +http://browserquest.local + + + + + + + + diff --git a/infra/deployement/client-deployement.yaml b/infra/deployement/client-deployement.yaml new file mode 100644 index 000000000..38a3a2d2a --- /dev/null +++ b/infra/deployement/client-deployement.yaml @@ -0,0 +1,31 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: browserquest-client + labels: + app: browserquest + tier: client +spec: + replicas: 3 + selector: + matchLabels: + app: browserquest + tier: client + template: + metadata: + labels: + app: browserquest + tier: client + spec: + containers: + - name: client + image: coloradostark/browserquest + ports: + - containerPort: 80 + resources: + requests: + cpu: "100m" + memory: "128Mi" + limits: + cpu: "500m" + memory: "512Mi" diff --git a/infra/deployement/nginx-deployement.yaml b/infra/deployement/nginx-deployement.yaml new file mode 100644 index 000000000..a5da015db --- /dev/null +++ b/infra/deployement/nginx-deployement.yaml @@ -0,0 +1,27 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: reverse-proxy +spec: + replicas: 1 + selector: + matchLabels: + app: reverse-proxy + template: + metadata: + labels: + app: reverse-proxy + spec: + containers: + - name: nginx + image: nginx:1.25 + ports: + - containerPort: 80 + volumeMounts: + - name: config-volume + mountPath: /etc/nginx/conf.d/custom.conf + subPath: nginx.conf + volumes: + - name: config-volume + configMap: + name: reverse-proxy-config diff --git a/infra/deployement/server-deployement.yaml b/infra/deployement/server-deployement.yaml new file mode 100644 index 000000000..e0690246a --- /dev/null +++ b/infra/deployement/server-deployement.yaml @@ -0,0 +1,32 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: browserquest-server + labels: + app: browserquest + tier: server +spec: + replicas: 3 + selector: + matchLabels: + app: browserquest + tier: server + template: + metadata: + labels: + app: browserquest + tier: server + spec: + containers: + - name: server + image: coloradostark/browserquest + command: ["node", "server/js/main.js"] + ports: + - containerPort: 8000 + resources: + requests: + cpu: "100m" + memory: "128Mi" + limits: + cpu: "750m" + memory: "768Mi" diff --git a/infra/ingress/ingress.yaml b/infra/ingress/ingress.yaml new file mode 100644 index 000000000..e6e53837b --- /dev/null +++ b/infra/ingress/ingress.yaml @@ -0,0 +1,32 @@ +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: browserquest-ingress + annotations: + nginx.ingress.kubernetes.io/rewrite-target: / + nginx.ingress.kubernetes.io/use-regex: "true" + nginx.ingress.kubernetes.io/proxy-read-timeout: "3600" + nginx.ingress.kubernetes.io/proxy-send-timeout: "3600" + nginx.ingress.kubernetes.io/proxy-http-version: "1.1" + nginx.ingress.kubernetes.io/connection-proxy-header: "keep-alive" + nginx.ingress.kubernetes.io/websocket-services: "server-service" +spec: + ingressClassName: nginx + rules: + - host: browserquest.local + http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: client-service + port: + number: 80 + - path: /ws/ + pathType: Prefix + backend: + service: + name: server-service + port: + number: 8000 diff --git a/infra/networking/duallstack-config.md b/infra/networking/duallstack-config.md new file mode 100644 index 000000000..972abbaf8 --- /dev/null +++ b/infra/networking/duallstack-config.md @@ -0,0 +1,9 @@ +# DualStack IPv4/IPv6 Support in Minikube + +Minikube ≥ v1.30.0 (avec Kubernetes 1.26+) supporte l’IPv6 en dual-stack si activé : + +## Étapes : +Active IPv6 avec le driver Docker : +```bash + +minikube start --network-plugin=cni --cni=calico --feature-gates="IPv6DualStack=true" --extra-config=kubelet.node-ip=, diff --git a/infra/networking/netpol.yaml b/infra/networking/netpol.yaml new file mode 100644 index 000000000..33359e3d7 --- /dev/null +++ b/infra/networking/netpol.yaml @@ -0,0 +1,21 @@ +apiVersion: networking.k8s.io/v1 +kind: NetworkPolicy +metadata: + name: restrict-traffic +spec: + podSelector: + matchLabels: + app: browserquest + policyTypes: + - Ingress + - Egress + ingress: + - from: + - podSelector: + matchLabels: + app: browserquest + egress: + - to: + - podSelector: + matchLabels: + app: browserquest \ No newline at end of file diff --git a/infra/nginx/nginx-configmap.yaml b/infra/nginx/nginx-configmap.yaml new file mode 100644 index 000000000..da6c2a916 --- /dev/null +++ b/infra/nginx/nginx-configmap.yaml @@ -0,0 +1,9 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: reverse-proxy-config + labels: + app: reverse-proxy +data: + nginx.conf: | + {{ .Files.Get "infra/nginx/nginx.conf" | indent 4 }} diff --git a/infra/nginx/nginx.conf b/infra/nginx/nginx.conf new file mode 100644 index 000000000..c0b61f00b --- /dev/null +++ b/infra/nginx/nginx.conf @@ -0,0 +1,28 @@ +events {} + +http { + include mime.types; + default_type application/octet-stream; + + upstream websocket_backend { + server server-service:8000; + } + + server { + listen 80; + + location / { + root /usr/share/nginx/html; + index index.html; + try_files $uri $uri/ /index.html; + } + + location /ws/ { + proxy_pass http://websocket_backend; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "Upgrade"; + proxy_set_header Host $host; + } + } +} diff --git a/infra/nginx/readme.md b/infra/nginx/readme.md new file mode 100644 index 000000000..3bc7282e5 --- /dev/null +++ b/infra/nginx/readme.md @@ -0,0 +1,31 @@ +# NGINX Reverse Proxy - BrowserQuest + +Ce dossier contient les fichiers liés au déploiement d’un reverse proxy NGINX personnalisé dans Kubernetes. + +## Objectif + +Ce NGINX est utilisé comme reverse proxy pour : +- Servir les fichiers statiques du client (`/`) +- Gérer les connexions WebSocket vers le backend (`/ws/`) +- S'assurer que la communication reste persistente (keep-alive) et compatible WebSocket + +## Structure + +- `nginx.conf` : fichier de configuration NGINX (monté via un `ConfigMap`) +- `nginx-configmap.yaml` : expose `nginx.conf` sous forme de `ConfigMap` +- `nginx-deployment.yaml` : déploie un conteneur NGINX avec le `ConfigMap` +- `nginx-service.yaml` : expose le reverse proxy comme un service interne + +## À savoir + +- Le reverse proxy redirige `/ws/` vers `server-service:8000` +- La racine `/` est servie depuis `/usr/share/nginx/html` (penser à builder le client dedans si besoin) + +## Déploiement + +```bash + +kubectl apply -f nginx/nginx-configmap.yaml +kubectl apply -f deployment/nginx-deployment.yaml +kubectl apply -f service/nginx-service.yaml +``` diff --git a/infra/scalling/hpa-client.yaml b/infra/scalling/hpa-client.yaml new file mode 100644 index 000000000..534d00f97 --- /dev/null +++ b/infra/scalling/hpa-client.yaml @@ -0,0 +1,18 @@ +apiVersion: autoscaling/v2 +kind: HorizontalPodAutoscaler +metadata: + name: hpa-client +spec: + scaleTargetRef: + apiVersion: apps/v1 + kind: Deployment + name: client + minReplicas: 2 + maxReplicas: 5 + metrics: + - type: Resource + resource: + name: cpu + target: + type: Utilization + averageUtilization: 60 diff --git a/infra/scalling/hpa-server.yaml b/infra/scalling/hpa-server.yaml new file mode 100644 index 000000000..17d8ce75c --- /dev/null +++ b/infra/scalling/hpa-server.yaml @@ -0,0 +1,18 @@ +apiVersion: autoscaling/v2 +kind: HorizontalPodAutoscaler +metadata: + name: hpa-server +spec: + scaleTargetRef: + apiVersion: apps/v1 + kind: Deployment + name: server + minReplicas: 2 + maxReplicas: 5 + metrics: + - type: Resource + resource: + name: cpu + target: + type: Utilization + averageUtilization: 70 diff --git a/infra/scalling/vpa-client.yaml b/infra/scalling/vpa-client.yaml new file mode 100644 index 000000000..d8cda4be6 --- /dev/null +++ b/infra/scalling/vpa-client.yaml @@ -0,0 +1,11 @@ +apiVersion: autoscaling.k8s.io/v1 +kind: VerticalPodAutoscaler +metadata: + name: vpa-client +spec: + targetRef: + apiVersion: "apps/v1" + kind: Deployment + name: client + updatePolicy: + updateMode: "Auto" diff --git a/infra/scalling/vpa-server.yaml b/infra/scalling/vpa-server.yaml new file mode 100644 index 000000000..df981c401 --- /dev/null +++ b/infra/scalling/vpa-server.yaml @@ -0,0 +1,11 @@ +apiVersion: autoscaling.k8s.io/v1 +kind: VerticalPodAutoscaler +metadata: + name: vpa-server +spec: + targetRef: + apiVersion: "apps/v1" + kind: Deployment + name: server + updatePolicy: + updateMode: "Auto" diff --git a/infra/services/client-services.yaml b/infra/services/client-services.yaml new file mode 100644 index 000000000..df78cbc80 --- /dev/null +++ b/infra/services/client-services.yaml @@ -0,0 +1,20 @@ +apiVersion: v1 +kind: Service +metadata: + name: client-service + labels: + app: browserquest + tier: client +spec: + selector: + app: browserquest + tier: client + ipFamilyPolicy: PreferDualStack + ipFamilies: + - IPv4 + ports: + - name: http + port: 80 + targetPort: 80 + type: ClusterIP + diff --git a/infra/services/nginx-services.yaml b/infra/services/nginx-services.yaml new file mode 100644 index 000000000..f66af2c7c --- /dev/null +++ b/infra/services/nginx-services.yaml @@ -0,0 +1,14 @@ +apiVersion: v1 +kind: Service +metadata: + name: reverse-proxy-service + labels: + app: reverse-proxy +spec: + selector: + app: reverse-proxy + ports: + - name: http + port: 80 + targetPort: 80 + type: ClusterIP diff --git a/infra/services/server-services.yaml b/infra/services/server-services.yaml new file mode 100644 index 000000000..16f57bbfa --- /dev/null +++ b/infra/services/server-services.yaml @@ -0,0 +1,19 @@ +apiVersion: v1 +kind: Service +metadata: + name: server-service + labels: + app: browserquest + tier: server +spec: + selector: + app: browserquest + tier: server + ipFamilyPolicy: PreferDualStack + ipFamilies: + - IPv4 + ports: + - name: http + port: 80 + targetPort: 80 + type: ClusterIP From d3c076f2c8b86720a8b5be21729a00d95ccd272c Mon Sep 17 00:00:00 2001 From: Kae134 Date: Wed, 9 Apr 2025 16:42:17 +0200 Subject: [PATCH 02/15] Added the base for the docker --- client/Dockerfile | 10 ++++++++++ docker-compose.yaml | 20 ++++++++++++++++++++ package.json | 4 ++-- server/Dockerfile | 15 +++++++++++++++ server/js/area.js | 1 - server/js/checkpoint.js | 1 - server/js/chestarea.js | 1 - 7 files changed, 47 insertions(+), 5 deletions(-) create mode 100644 client/Dockerfile create mode 100644 docker-compose.yaml create mode 100644 server/Dockerfile diff --git a/client/Dockerfile b/client/Dockerfile new file mode 100644 index 000000000..c747d96e9 --- /dev/null +++ b/client/Dockerfile @@ -0,0 +1,10 @@ +# client/Dockerfile +FROM node:18 + +WORKDIR /app + +RUN npm install -g serve + +COPY . . + +CMD ["serve", ".", "-l", "5000"] diff --git a/docker-compose.yaml b/docker-compose.yaml new file mode 100644 index 000000000..11771e76f --- /dev/null +++ b/docker-compose.yaml @@ -0,0 +1,20 @@ +version: "3" + +services: + server: + build: + context: . + dockerfile: server/Dockerfile + ports: + - "8000:8000" + volumes: + - ./shared:/app/shared + + client: + build: + context: ./client + dockerfile: Dockerfile + ports: + - "5000:5000" + volumes: + - ./client:/app diff --git a/package.json b/package.json index 022e91106..10d9bd30e 100644 --- a/package.json +++ b/package.json @@ -5,10 +5,10 @@ "dependencies": { "bison": ">0", "express": ">0", + "underscore": ">0", "log": ">0", "memcache": "0.3.0", "sanitizer": "0.1.2", - "socket.io": "^4.8.1", - "underscore": ">0" + "socket.io": "^4.8.1" } } diff --git a/server/Dockerfile b/server/Dockerfile new file mode 100644 index 000000000..661756f5b --- /dev/null +++ b/server/Dockerfile @@ -0,0 +1,15 @@ +# server/Dockerfile +FROM node:18 + +WORKDIR /app + +# Copier package.json et package-lock.json depuis la racine +COPY server ./server +COPY shared ./shared +COPY package*.json ./ + +# Installer les dépendances +RUN npm ci + +# Commande pour lancer le serveur +CMD ["node", "server/js/main.js"] diff --git a/server/js/area.js b/server/js/area.js index 63c3742e8..3b7efc75a 100644 --- a/server/js/area.js +++ b/server/js/area.js @@ -1,6 +1,5 @@ var cls = require('./lib/class'), - _ = require('underscore'), Utils = require('./utils'), Types = require("../../shared/js/gametypes"); diff --git a/server/js/checkpoint.js b/server/js/checkpoint.js index 1d5a97df7..fb53d8264 100644 --- a/server/js/checkpoint.js +++ b/server/js/checkpoint.js @@ -1,5 +1,4 @@ var cls = require("./lib/class"), - _ = require("underscore"), Utils = require("./utils"), Types = require("../../shared/js/gametypes"); diff --git a/server/js/chestarea.js b/server/js/chestarea.js index a16925922..083bcccc2 100644 --- a/server/js/chestarea.js +++ b/server/js/chestarea.js @@ -1,6 +1,5 @@ var Area = require('./area'), - _ = require('underscore'), Types = require("../../shared/js/gametypes"); module.exports = ChestArea = Area.extend({ From 1727e44ca282c6dda0b666c36cd3b923df3b5d4b Mon Sep 17 00:00:00 2001 From: Jeck0v Date: Thu, 10 Apr 2025 12:25:29 +0200 Subject: [PATCH 03/15] solution 1 --- Dockerfile | 23 +++++++++++++++++++++++ client/.dockerignore | 0 client/Dockerfile | 10 ---------- docker-compose.yaml | 20 -------------------- server/Dockerfile | 15 --------------- server/config.json | 2 +- 6 files changed, 24 insertions(+), 46 deletions(-) create mode 100644 Dockerfile create mode 100644 client/.dockerignore delete mode 100644 client/Dockerfile delete mode 100644 docker-compose.yaml delete mode 100644 server/Dockerfile diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 000000000..e5b5a5203 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,23 @@ +FROM node:18 + +WORKDIR /app +COPY . . + +RUN cd server && npm install +RUN cd client && npm install http-server --save-dev + +RUN chmod 644 server/config.json server/config_local.json + +RUN mkdir -p /config && \ + cp server/config.json /config/ && \ + cp server/config_local.json /config/ && \ + mkdir -p /maps && \ + cp server/maps/world_server.json /maps/ + +RUN sed -i "s|\./server/config\.json|/config/config.json|g" server/js/main.js && \ + sed -i "s|\./server/config_local\.json|/config/config_local.json|g" server/js/main.js && \ + sed -i "s|\./server/maps|/maps|g" server/js/main.js + +EXPOSE 8080 8000 + +CMD ["sh", "-c", "cd /app/client && npx http-server -p 8080 & cd /app/server && node js/main.js"] \ No newline at end of file diff --git a/client/.dockerignore b/client/.dockerignore new file mode 100644 index 000000000..e69de29bb diff --git a/client/Dockerfile b/client/Dockerfile deleted file mode 100644 index c747d96e9..000000000 --- a/client/Dockerfile +++ /dev/null @@ -1,10 +0,0 @@ -# client/Dockerfile -FROM node:18 - -WORKDIR /app - -RUN npm install -g serve - -COPY . . - -CMD ["serve", ".", "-l", "5000"] diff --git a/docker-compose.yaml b/docker-compose.yaml deleted file mode 100644 index 11771e76f..000000000 --- a/docker-compose.yaml +++ /dev/null @@ -1,20 +0,0 @@ -version: "3" - -services: - server: - build: - context: . - dockerfile: server/Dockerfile - ports: - - "8000:8000" - volumes: - - ./shared:/app/shared - - client: - build: - context: ./client - dockerfile: Dockerfile - ports: - - "5000:5000" - volumes: - - ./client:/app diff --git a/server/Dockerfile b/server/Dockerfile deleted file mode 100644 index 661756f5b..000000000 --- a/server/Dockerfile +++ /dev/null @@ -1,15 +0,0 @@ -# server/Dockerfile -FROM node:18 - -WORKDIR /app - -# Copier package.json et package-lock.json depuis la racine -COPY server ./server -COPY shared ./shared -COPY package*.json ./ - -# Installer les dépendances -RUN npm ci - -# Commande pour lancer le serveur -CMD ["node", "server/js/main.js"] diff --git a/server/config.json b/server/config.json index b36dac132..008e3f4d3 100644 --- a/server/config.json +++ b/server/config.json @@ -1,5 +1,5 @@ { - "host": "127.0.0.1", + "host": "0.0.0.0", "port": 8000, "debug_level": "info", "nb_players_per_world": 200, From cb6c7673e63e27e921a12420cecefec2026b132f Mon Sep 17 00:00:00 2001 From: Jeck0v Date: Thu, 10 Apr 2025 12:44:36 +0200 Subject: [PATCH 04/15] soon --- .idea/.gitignore | 8 ++++++++ .idea/discord.xml | 14 ++++++++++++++ Dockerfile | 22 ++++++++++++++-------- 3 files changed, 36 insertions(+), 8 deletions(-) create mode 100644 .idea/.gitignore create mode 100644 .idea/discord.xml diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 000000000..13566b81b --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/discord.xml b/.idea/discord.xml new file mode 100644 index 000000000..104c42f56 --- /dev/null +++ b/.idea/discord.xml @@ -0,0 +1,14 @@ + + + + + \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index e5b5a5203..493d7eaff 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,22 +1,28 @@ FROM node:18 +# Configuration de base WORKDIR /app COPY . . +# Installation des dépendances RUN cd server && npm install RUN cd client && npm install http-server --save-dev +# Correction des permissions RUN chmod 644 server/config.json server/config_local.json -RUN mkdir -p /config && \ - cp server/config.json /config/ && \ - cp server/config_local.json /config/ && \ - mkdir -p /maps && \ - cp server/maps/world_server.json /maps/ +# Préparation des fichiers de configuration +RUN mkdir -p /game_config && \ + cp server/config.json /game_config/ && \ + cp server/config_local.json /game_config/ && \ + mkdir -p /game_maps && \ + cp server/maps/world_server.json /game_maps/ -RUN sed -i "s|\./server/config\.json|/config/config.json|g" server/js/main.js && \ - sed -i "s|\./server/config_local\.json|/config/config_local.json|g" server/js/main.js && \ - sed -i "s|\./server/maps|/maps|g" server/js/main.js +# Patch du code source pour utiliser les chemins absolus +RUN sed -i "s|\./server/config\.json|/game_config/config.json|g" server/js/main.js && \ + sed -i "s|\./server/config_local\.json|/game_config/config_local.json|g" server/js/main.js && \ + sed -i "s|\./server/maps|/game_maps|g" server/js/main.js && \ + sed -i "s|\./server/config|/game_config|g" server/js/main.js EXPOSE 8080 8000 From 0d8d63eaae3f5b992f863055b703fad6837e14a2 Mon Sep 17 00:00:00 2001 From: Jeck0v Date: Thu, 10 Apr 2025 14:39:12 +0200 Subject: [PATCH 05/15] j'ai merder --- Dockerfile | 29 ----------------------------- 1 file changed, 29 deletions(-) delete mode 100644 Dockerfile diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index 493d7eaff..000000000 --- a/Dockerfile +++ /dev/null @@ -1,29 +0,0 @@ -FROM node:18 - -# Configuration de base -WORKDIR /app -COPY . . - -# Installation des dépendances -RUN cd server && npm install -RUN cd client && npm install http-server --save-dev - -# Correction des permissions -RUN chmod 644 server/config.json server/config_local.json - -# Préparation des fichiers de configuration -RUN mkdir -p /game_config && \ - cp server/config.json /game_config/ && \ - cp server/config_local.json /game_config/ && \ - mkdir -p /game_maps && \ - cp server/maps/world_server.json /game_maps/ - -# Patch du code source pour utiliser les chemins absolus -RUN sed -i "s|\./server/config\.json|/game_config/config.json|g" server/js/main.js && \ - sed -i "s|\./server/config_local\.json|/game_config/config_local.json|g" server/js/main.js && \ - sed -i "s|\./server/maps|/game_maps|g" server/js/main.js && \ - sed -i "s|\./server/config|/game_config|g" server/js/main.js - -EXPOSE 8080 8000 - -CMD ["sh", "-c", "cd /app/client && npx http-server -p 8080 & cd /app/server && node js/main.js"] \ No newline at end of file From 19b8d60bb3168406dff55bf5c3fe5be24002a601 Mon Sep 17 00:00:00 2001 From: Jeck0v Date: Thu, 10 Apr 2025 17:03:47 +0200 Subject: [PATCH 06/15] tout ce lance, juste pb avec nginx comme d'hab, 502 bad gateway, je m'en occupe --- .idea/inspectionProfiles/Project_Default.xml | 12 ++++ .idea/vcs.xml | 6 ++ infra/README.md | 54 +++++------------ infra/configmap/nginx-configmap.yaml | 44 ++++++++++++++ .../deployement/browserquest-deployement.yaml | 60 +++++++++++++++++++ infra/deployement/client-deployement.yaml | 31 ---------- infra/deployement/nginx-deployement.yaml | 27 --------- infra/deployement/server-deployement.yaml | 32 ---------- infra/ingress/ingress.yaml | 6 +- infra/nginx/nginx-configmap.yaml | 9 --- infra/nginx/nginx.conf | 11 +++- infra/nginx/readme.md | 4 +- infra/scalling/hpa-server.yaml | 18 ------ infra/scalling/vpa-server.yaml | 11 ---- ...ervices.yaml => browserquest-service.yaml} | 10 ++-- infra/services/client-services.yaml | 20 ------- infra/services/nginx-services.yaml | 14 ----- server/config.json | 4 +- 18 files changed, 158 insertions(+), 215 deletions(-) create mode 100644 .idea/inspectionProfiles/Project_Default.xml create mode 100644 .idea/vcs.xml create mode 100644 infra/configmap/nginx-configmap.yaml create mode 100644 infra/deployement/browserquest-deployement.yaml delete mode 100644 infra/deployement/client-deployement.yaml delete mode 100644 infra/deployement/nginx-deployement.yaml delete mode 100644 infra/deployement/server-deployement.yaml delete mode 100644 infra/nginx/nginx-configmap.yaml delete mode 100644 infra/scalling/hpa-server.yaml delete mode 100644 infra/scalling/vpa-server.yaml rename infra/services/{server-services.yaml => browserquest-service.yaml} (62%) delete mode 100644 infra/services/client-services.yaml delete mode 100644 infra/services/nginx-services.yaml diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 000000000..7e7ac73a0 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,12 @@ + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 000000000..35eb1ddfb --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/infra/README.md b/infra/README.md index cfc49d8c4..3b7cf5523 100644 --- a/infra/README.md +++ b/infra/README.md @@ -1,32 +1,9 @@ -Le temps que l'app fonctionne pas je vais utiliser une image docker valide pour pouvoir construire l'infra -l'image docker viens de: https://hub.docker.com/r/coloradostark/browserquest - - -### Documentation Docker Image -To run the program on a local machine with Docker type: -```bash -docker container run -it -p 80:80 -p 8000:8000 coloradostark/browserquest bash -``` -You will see a command prompt, type the following: -```bash -node server/js/main.js & -``` - -The server is now running. Now Open a new command prompt session and then type the following: - -```bash -docker container exec -it YOUR-CONTAINER-ID-NUMBER bash +### Documentation Lancement de l'app via le dockerfile +```shell +docker build -t browserquest . +docker run -p 8080:8080 -p 8000:8000 browserquest ``` -```bash -nvm use 10.23.0 - -cd / - -http-server -p 80 ./BrowserQuest/client -``` -That is all you need to do. It should be running and you can test it by typing 127.0.0.1 in the browser. - -More documentation on getting a production server running is located in client and server directories. +Dans notre cas on utilise une image dockerhub: ### Documentation lancement Minikube @@ -67,18 +44,19 @@ echo "$(minikube ip) browserquest.local" | sudo tee -a /etc/hosts ``` Aller dans le dossier racine: ```bash -kubectl apply -f infra/nginx/nginx-configmap.yaml -kubectl apply -f infra/deployement/nginx-deployement.yaml -kubectl apply -f infra/deployement/server-deployement.yaml -kubectl apply -f infra/deployement/client-deployement.yaml -kubectl apply -f infra/services/nginx-services.yaml -kubectl apply -f infra/services/server-services.yaml -kubectl apply -f infra/services/client-services.yaml -kubectl apply -f infra/ingress/ingress.yaml -kubectl apply -f infra/scalling/hpa-server.yaml -kubectl apply -f infra/scalling/hpa-client.yaml +kubectl apply -f infra/deployement/ +kubectl apply -f infra/services/ +kubectl apply -f infra/configmap/ +kubectl apply -f infra/ingress/ +``` +note à moi même: + +```bash +docker build -t jeck0v/browserquest . +minikube image load jeck0v/browserquest:lastest + ``` ### Vérrification des pods / services / ingress: ```bash diff --git a/infra/configmap/nginx-configmap.yaml b/infra/configmap/nginx-configmap.yaml new file mode 100644 index 000000000..2758d7e01 --- /dev/null +++ b/infra/configmap/nginx-configmap.yaml @@ -0,0 +1,44 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: reverse-proxy-config + labels: + app: reverse-proxy +data: + nginx.conf: | + events { + worker_connections 1024; + } + + http { + include mime.types; + default_type application/octet-stream; + + upstream websocket_backend { + server browserquest-service:8000; + } + + upstream frontend_backend { + server browserquest-service:80; + } + + server { + listen 80; + + location / { + proxy_pass http://frontend_backend; + root /usr/share/nginx/html; + index index.html; + try_files $uri $uri/ /index.html; + } + + location /ws/ { + proxy_pass http://websocket_backend; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "Upgrade"; + proxy_set_header Host $host; + } + } + } + diff --git a/infra/deployement/browserquest-deployement.yaml b/infra/deployement/browserquest-deployement.yaml new file mode 100644 index 000000000..a9aa62415 --- /dev/null +++ b/infra/deployement/browserquest-deployement.yaml @@ -0,0 +1,60 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: browserquest + labels: + app: browserquest +spec: + replicas: 2 + selector: + matchLabels: + app: browserquest + template: + metadata: + labels: + app: browserquest + spec: + containers: + - name: browserquest + image: jeck0v/browserquest:lastest + ports: + - containerPort: 80 + - containerPort: 8000 + resources: + requests: + cpu: "200m" + memory: "256Mi" + limits: + cpu: "750m" + memory: "768Mi" + +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: reverse-proxy + labels: + app: reverse-proxy +spec: + replicas: 1 + selector: + matchLabels: + app: reverse-proxy + template: + metadata: + labels: + app: reverse-proxy + spec: + containers: + - name: nginx + image: nginx:1.25 + ports: + - containerPort: 80 + volumeMounts: + - name: config-volume + mountPath: /etc/nginx/nginx.conf + subPath: nginx.conf + volumes: + - name: config-volume + configMap: + name: reverse-proxy-config diff --git a/infra/deployement/client-deployement.yaml b/infra/deployement/client-deployement.yaml deleted file mode 100644 index 38a3a2d2a..000000000 --- a/infra/deployement/client-deployement.yaml +++ /dev/null @@ -1,31 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - name: browserquest-client - labels: - app: browserquest - tier: client -spec: - replicas: 3 - selector: - matchLabels: - app: browserquest - tier: client - template: - metadata: - labels: - app: browserquest - tier: client - spec: - containers: - - name: client - image: coloradostark/browserquest - ports: - - containerPort: 80 - resources: - requests: - cpu: "100m" - memory: "128Mi" - limits: - cpu: "500m" - memory: "512Mi" diff --git a/infra/deployement/nginx-deployement.yaml b/infra/deployement/nginx-deployement.yaml deleted file mode 100644 index a5da015db..000000000 --- a/infra/deployement/nginx-deployement.yaml +++ /dev/null @@ -1,27 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - name: reverse-proxy -spec: - replicas: 1 - selector: - matchLabels: - app: reverse-proxy - template: - metadata: - labels: - app: reverse-proxy - spec: - containers: - - name: nginx - image: nginx:1.25 - ports: - - containerPort: 80 - volumeMounts: - - name: config-volume - mountPath: /etc/nginx/conf.d/custom.conf - subPath: nginx.conf - volumes: - - name: config-volume - configMap: - name: reverse-proxy-config diff --git a/infra/deployement/server-deployement.yaml b/infra/deployement/server-deployement.yaml deleted file mode 100644 index e0690246a..000000000 --- a/infra/deployement/server-deployement.yaml +++ /dev/null @@ -1,32 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - name: browserquest-server - labels: - app: browserquest - tier: server -spec: - replicas: 3 - selector: - matchLabels: - app: browserquest - tier: server - template: - metadata: - labels: - app: browserquest - tier: server - spec: - containers: - - name: server - image: coloradostark/browserquest - command: ["node", "server/js/main.js"] - ports: - - containerPort: 8000 - resources: - requests: - cpu: "100m" - memory: "128Mi" - limits: - cpu: "750m" - memory: "768Mi" diff --git a/infra/ingress/ingress.yaml b/infra/ingress/ingress.yaml index e6e53837b..749e2fc7d 100644 --- a/infra/ingress/ingress.yaml +++ b/infra/ingress/ingress.yaml @@ -9,7 +9,7 @@ metadata: nginx.ingress.kubernetes.io/proxy-send-timeout: "3600" nginx.ingress.kubernetes.io/proxy-http-version: "1.1" nginx.ingress.kubernetes.io/connection-proxy-header: "keep-alive" - nginx.ingress.kubernetes.io/websocket-services: "server-service" + nginx.ingress.kubernetes.io/websocket-services: "browserquest-service" spec: ingressClassName: nginx rules: @@ -20,13 +20,13 @@ spec: pathType: Prefix backend: service: - name: client-service + name: browserquest-service port: number: 80 - path: /ws/ pathType: Prefix backend: service: - name: server-service + name: browserquest-service port: number: 8000 diff --git a/infra/nginx/nginx-configmap.yaml b/infra/nginx/nginx-configmap.yaml deleted file mode 100644 index da6c2a916..000000000 --- a/infra/nginx/nginx-configmap.yaml +++ /dev/null @@ -1,9 +0,0 @@ -apiVersion: v1 -kind: ConfigMap -metadata: - name: reverse-proxy-config - labels: - app: reverse-proxy -data: - nginx.conf: | - {{ .Files.Get "infra/nginx/nginx.conf" | indent 4 }} diff --git a/infra/nginx/nginx.conf b/infra/nginx/nginx.conf index c0b61f00b..402221e4f 100644 --- a/infra/nginx/nginx.conf +++ b/infra/nginx/nginx.conf @@ -1,17 +1,24 @@ -events {} +events { + worker_connections 1024; +} http { include mime.types; default_type application/octet-stream; upstream websocket_backend { - server server-service:8000; + server browserquest-service:8000; + } + + upstream frontend_backend { + server browserquest-service:80; } server { listen 80; location / { + proxy_pass http://frontend_backend; root /usr/share/nginx/html; index index.html; try_files $uri $uri/ /index.html; diff --git a/infra/nginx/readme.md b/infra/nginx/readme.md index 3bc7282e5..04b45aa43 100644 --- a/infra/nginx/readme.md +++ b/infra/nginx/readme.md @@ -26,6 +26,6 @@ Ce NGINX est utilisé comme reverse proxy pour : ```bash kubectl apply -f nginx/nginx-configmap.yaml -kubectl apply -f deployment/nginx-deployment.yaml -kubectl apply -f service/nginx-service.yaml +kubectl apply -f deployement/nginx-deployement.yaml +kubectl apply -f services/nginx-services.yaml ``` diff --git a/infra/scalling/hpa-server.yaml b/infra/scalling/hpa-server.yaml deleted file mode 100644 index 17d8ce75c..000000000 --- a/infra/scalling/hpa-server.yaml +++ /dev/null @@ -1,18 +0,0 @@ -apiVersion: autoscaling/v2 -kind: HorizontalPodAutoscaler -metadata: - name: hpa-server -spec: - scaleTargetRef: - apiVersion: apps/v1 - kind: Deployment - name: server - minReplicas: 2 - maxReplicas: 5 - metrics: - - type: Resource - resource: - name: cpu - target: - type: Utilization - averageUtilization: 70 diff --git a/infra/scalling/vpa-server.yaml b/infra/scalling/vpa-server.yaml deleted file mode 100644 index df981c401..000000000 --- a/infra/scalling/vpa-server.yaml +++ /dev/null @@ -1,11 +0,0 @@ -apiVersion: autoscaling.k8s.io/v1 -kind: VerticalPodAutoscaler -metadata: - name: vpa-server -spec: - targetRef: - apiVersion: "apps/v1" - kind: Deployment - name: server - updatePolicy: - updateMode: "Auto" diff --git a/infra/services/server-services.yaml b/infra/services/browserquest-service.yaml similarity index 62% rename from infra/services/server-services.yaml rename to infra/services/browserquest-service.yaml index 16f57bbfa..170142977 100644 --- a/infra/services/server-services.yaml +++ b/infra/services/browserquest-service.yaml @@ -1,19 +1,17 @@ apiVersion: v1 kind: Service metadata: - name: server-service + name: browserquest-service labels: app: browserquest - tier: server spec: selector: app: browserquest - tier: server - ipFamilyPolicy: PreferDualStack - ipFamilies: - - IPv4 ports: - name: http port: 80 targetPort: 80 + - name: websocket + port: 8000 + targetPort: 8000 type: ClusterIP diff --git a/infra/services/client-services.yaml b/infra/services/client-services.yaml deleted file mode 100644 index df78cbc80..000000000 --- a/infra/services/client-services.yaml +++ /dev/null @@ -1,20 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - name: client-service - labels: - app: browserquest - tier: client -spec: - selector: - app: browserquest - tier: client - ipFamilyPolicy: PreferDualStack - ipFamilies: - - IPv4 - ports: - - name: http - port: 80 - targetPort: 80 - type: ClusterIP - diff --git a/infra/services/nginx-services.yaml b/infra/services/nginx-services.yaml deleted file mode 100644 index f66af2c7c..000000000 --- a/infra/services/nginx-services.yaml +++ /dev/null @@ -1,14 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - name: reverse-proxy-service - labels: - app: reverse-proxy -spec: - selector: - app: reverse-proxy - ports: - - name: http - port: 80 - targetPort: 80 - type: ClusterIP diff --git a/server/config.json b/server/config.json index b36dac132..3fe0015a1 100644 --- a/server/config.json +++ b/server/config.json @@ -1,9 +1,9 @@ { - "host": "127.0.0.1", + "host": "localhost", "port": 8000, "debug_level": "info", "nb_players_per_world": 200, "nb_worlds": 5, "map_filepath": "./server/maps/world_server.json", "metrics_enabled": false -} +} \ No newline at end of file From 1bb74a87406a5456595c2613901cc6eb5950fd03 Mon Sep 17 00:00:00 2001 From: Jeck0v Date: Thu, 10 Apr 2025 17:57:45 +0200 Subject: [PATCH 07/15] nginx avancement ingress & ingress-controller --- infra/ingress/ingress.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/infra/ingress/ingress.yaml b/infra/ingress/ingress.yaml index 749e2fc7d..f5a0e0a74 100644 --- a/infra/ingress/ingress.yaml +++ b/infra/ingress/ingress.yaml @@ -2,6 +2,7 @@ apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: browserquest-ingress + namespace: default annotations: nginx.ingress.kubernetes.io/rewrite-target: / nginx.ingress.kubernetes.io/use-regex: "true" From 251fadb5fd66bc862759d45f502aa61ae6d4afc2 Mon Sep 17 00:00:00 2001 From: Jeck0v Date: Thu, 10 Apr 2025 18:48:16 +0200 Subject: [PATCH 08/15] ajout namespace & essaie / apprentissage K8S + nginx-ingress --- infra/configmap/nginx-configmap.yaml | 1 + infra/deployement/browserquest-deployement.yaml | 2 ++ infra/ingress/ingress.yaml | 2 +- infra/services/browserquest-service.yaml | 1 + 4 files changed, 5 insertions(+), 1 deletion(-) diff --git a/infra/configmap/nginx-configmap.yaml b/infra/configmap/nginx-configmap.yaml index 2758d7e01..1e699c094 100644 --- a/infra/configmap/nginx-configmap.yaml +++ b/infra/configmap/nginx-configmap.yaml @@ -2,6 +2,7 @@ apiVersion: v1 kind: ConfigMap metadata: name: reverse-proxy-config + namespace: default labels: app: reverse-proxy data: diff --git a/infra/deployement/browserquest-deployement.yaml b/infra/deployement/browserquest-deployement.yaml index a9aa62415..566993783 100644 --- a/infra/deployement/browserquest-deployement.yaml +++ b/infra/deployement/browserquest-deployement.yaml @@ -2,6 +2,7 @@ apiVersion: apps/v1 kind: Deployment metadata: name: browserquest + namespace: default labels: app: browserquest spec: @@ -33,6 +34,7 @@ apiVersion: apps/v1 kind: Deployment metadata: name: reverse-proxy + namespace: default labels: app: reverse-proxy spec: diff --git a/infra/ingress/ingress.yaml b/infra/ingress/ingress.yaml index f5a0e0a74..37f96b6e7 100644 --- a/infra/ingress/ingress.yaml +++ b/infra/ingress/ingress.yaml @@ -2,7 +2,7 @@ apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: browserquest-ingress - namespace: default + namespace: ingress-nginx annotations: nginx.ingress.kubernetes.io/rewrite-target: / nginx.ingress.kubernetes.io/use-regex: "true" diff --git a/infra/services/browserquest-service.yaml b/infra/services/browserquest-service.yaml index 170142977..f44d415c7 100644 --- a/infra/services/browserquest-service.yaml +++ b/infra/services/browserquest-service.yaml @@ -2,6 +2,7 @@ apiVersion: v1 kind: Service metadata: name: browserquest-service + namespace: default labels: app: browserquest spec: From 5476209257f7d6eb292dbe37df6751e85f7bdcd6 Mon Sep 17 00:00:00 2001 From: Jeck0v Date: Fri, 11 Apr 2025 00:07:57 +0200 Subject: [PATCH 09/15] =?UTF-8?q?=20retour=20=C3=A0=20la=20r=C3=A9alit?= =?UTF-8?q?=C3=A9=20=C3=A7a=20ne=20marchais=20pas=20avant=20ni=20maintenan?= =?UTF-8?q?t=20d'ailleurs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- infra.md | 103 ++++++++++++++++++ infra/README.md | 79 -------------- infra/configmap/nginx-configmap.yaml | 45 -------- .../deployement/browserquest-deployement.yaml | 62 ----------- infra/ingress/ingress.yaml | 33 ------ infra/networking/duallstack-config.md | 9 -- infra/networking/netpol.yaml | 21 ---- infra/nginx/nginx.conf | 35 ------ infra/nginx/readme.md | 31 ------ infra/scalling/hpa-client.yaml | 18 --- infra/scalling/vpa-client.yaml | 11 -- infra/services/browserquest-service.yaml | 18 --- 12 files changed, 103 insertions(+), 362 deletions(-) create mode 100644 infra.md delete mode 100644 infra/README.md delete mode 100644 infra/configmap/nginx-configmap.yaml delete mode 100644 infra/deployement/browserquest-deployement.yaml delete mode 100644 infra/ingress/ingress.yaml delete mode 100644 infra/networking/duallstack-config.md delete mode 100644 infra/networking/netpol.yaml delete mode 100644 infra/nginx/nginx.conf delete mode 100644 infra/nginx/readme.md delete mode 100644 infra/scalling/hpa-client.yaml delete mode 100644 infra/scalling/vpa-client.yaml delete mode 100644 infra/services/browserquest-service.yaml diff --git a/infra.md b/infra.md new file mode 100644 index 000000000..28fa994fb --- /dev/null +++ b/infra.md @@ -0,0 +1,103 @@ +### Documentation Lancement de l'app via le dockerfile +```shell +docker build -t browserquest . +docker run -p 8080:8080 -p 8000:8000 browserquest +``` +Dans notre cas on utilisera notre image dockerhub: + +`jeck0v/browserquest:lastest` + +### Documentation lancement Minikube + +#### Installer Minikube et Kubectl sur windows: +On utilise Chocolatery, donc si pas installer => dans powershell admin +```powershell +Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls12; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1')) +``` +Minikube: +```bash +choco install minikube +``` +Kubectl: +```bash +choco install kubernetes-cli +``` +#### Lancement Minikube: +```bash +minikube start --driver=docker --kubernetes-version=v1.32.0 +``` +Si besoin de suppr le cluster: +```bash +minikube delete +``` +Activer l'ingress de minikube +```bash +minikube addons enable ingress +``` +Activer les metrics-server pour le scalling du cluster +```bash +minikube addons enable metrics-server +``` +Pour être sûr que l'image est bien prise en compte par minikube: +```bash +docker build -t jeck0v/browserquest . +minikube image load jeck0v/browserquest:lastest +``` +Aller dans le dossier racine: +```bash +kubectl apply -f infra/deployement/ +kubectl apply -f infra/services/ +kubectl apply -f infra/configmap/ +kubectl apply -f infra/ingress/ +kubectl apply -f infra/scalling +``` +### Vérrification des pods / services / ingress / hpa: + +```bash +kubectl get pods +kubectl get hpa +kubectl get services +kubectl get ingress +``` + +### Tester l'app: +Dans un autre terminal qu'il faudra laisser ouvert: +via le tunnel aller à `localhost:8080` +```bash +minikube tunnel +``` +ou +
+```bash +kubectl port-forward svc/browserquest-service 8080:80 +``` +## Config nginx, configmap et ingress + +- un reverse proxy avec **nginx** pour gérer les requêtes HTTP et WebSocket +- un **configmap** pour gérer la config de Nginx +- un **ingress** pour exposer l'app (+ ingress-controller)
+Cette partie n'est pas à 100% opérationel, je n'ai pas beaucoup d'xp en K8S donc je pense pas avoir fini ça d'ici le temps imparti + +## Infra Kubernetes + +- **deployement** : Pour déployer les pods de l'application et de Nginx +- **services** : Pour exposer les pods et permettre la communication entre eux +- **configmap** : Pour fournir des configurations personnalisées à Nginx +- **ingress** : Pour gérer l'accès externe à l'app + +### Ce que j'aurais aimé faire de plus +Je n’ai pas énormément d'expérience avec K8S, et c'étais assez complexe pour moi. Cela dit, je me suis beaucoup amusé à apprendre et à tester. Même si le résultat n'est pas incroyable, j'ai tenté de comprendre au mieux chaque éléments, et j’ai pas mal appris. + +J’aurais bien aimé : + +- Finaliser proprement la partie Ingress + Ingress Controller + +- Approfondir Kubernetes Security + +- Mettre en place AWS EKS, avec ELB, et potentiellement un déploiement complet en cloud + + Mais avec le temps imparti, ce n'était pas réaliste ahahha :) + + + + diff --git a/infra/README.md b/infra/README.md deleted file mode 100644 index 3b7cf5523..000000000 --- a/infra/README.md +++ /dev/null @@ -1,79 +0,0 @@ -### Documentation Lancement de l'app via le dockerfile -```shell -docker build -t browserquest . -docker run -p 8080:8080 -p 8000:8000 browserquest -``` -Dans notre cas on utilise une image dockerhub: - -### Documentation lancement Minikube - -#### Installer Minikube et Kubectl sur windows: -On utilise Chocolatery, donc si pas installer => dans powershell admin -```powershell -Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls12; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1')) -``` -Minikube: -```bash -choco install minikube -``` -Kubectl: -```bash -choco install kubernetes-cli -``` -#### Lancement Minikube: -```bash -minikube start --driver=docker --kubernetes-version=v1.32.0 -``` -Si erreur du style : -
-` -❗ L'image n'a pas été construite pour la version actuelle de minikube. Pour résoudre ce problème, vous pouvez supprimer et recréer votre cluster minikube en utilisant les dernières images. Version de minikube attendue : v1.33..1 -> Version de minikube actuelle : v1.35.0 -` -
-Il faut delete le cluster puis refaire le minikube start -```bash -minikube delete -``` -Activer l'ingress de minikube -```bash -minikube addons enable ingress -``` -Dans ton windows host: -```bash -echo "$(minikube ip) browserquest.local" | sudo tee -a /etc/hosts -``` -Aller dans le dossier racine: -```bash -kubectl apply -f infra/deployement/ -kubectl apply -f infra/services/ -kubectl apply -f infra/configmap/ -kubectl apply -f infra/ingress/ - - -``` -note à moi même: - -```bash -docker build -t jeck0v/browserquest . -minikube image load jeck0v/browserquest:lastest - -``` -### Vérrification des pods / services / ingress: -```bash -kubectl get pods -``` -```bash -kubectl get services -kubectl get ingress -``` -### Tester l'app -Go to => -http://browserquest.local - - - - - - - - diff --git a/infra/configmap/nginx-configmap.yaml b/infra/configmap/nginx-configmap.yaml deleted file mode 100644 index 1e699c094..000000000 --- a/infra/configmap/nginx-configmap.yaml +++ /dev/null @@ -1,45 +0,0 @@ -apiVersion: v1 -kind: ConfigMap -metadata: - name: reverse-proxy-config - namespace: default - labels: - app: reverse-proxy -data: - nginx.conf: | - events { - worker_connections 1024; - } - - http { - include mime.types; - default_type application/octet-stream; - - upstream websocket_backend { - server browserquest-service:8000; - } - - upstream frontend_backend { - server browserquest-service:80; - } - - server { - listen 80; - - location / { - proxy_pass http://frontend_backend; - root /usr/share/nginx/html; - index index.html; - try_files $uri $uri/ /index.html; - } - - location /ws/ { - proxy_pass http://websocket_backend; - proxy_http_version 1.1; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection "Upgrade"; - proxy_set_header Host $host; - } - } - } - diff --git a/infra/deployement/browserquest-deployement.yaml b/infra/deployement/browserquest-deployement.yaml deleted file mode 100644 index 566993783..000000000 --- a/infra/deployement/browserquest-deployement.yaml +++ /dev/null @@ -1,62 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - name: browserquest - namespace: default - labels: - app: browserquest -spec: - replicas: 2 - selector: - matchLabels: - app: browserquest - template: - metadata: - labels: - app: browserquest - spec: - containers: - - name: browserquest - image: jeck0v/browserquest:lastest - ports: - - containerPort: 80 - - containerPort: 8000 - resources: - requests: - cpu: "200m" - memory: "256Mi" - limits: - cpu: "750m" - memory: "768Mi" - ---- -apiVersion: apps/v1 -kind: Deployment -metadata: - name: reverse-proxy - namespace: default - labels: - app: reverse-proxy -spec: - replicas: 1 - selector: - matchLabels: - app: reverse-proxy - template: - metadata: - labels: - app: reverse-proxy - spec: - containers: - - name: nginx - image: nginx:1.25 - ports: - - containerPort: 80 - volumeMounts: - - name: config-volume - mountPath: /etc/nginx/nginx.conf - subPath: nginx.conf - volumes: - - name: config-volume - configMap: - name: reverse-proxy-config diff --git a/infra/ingress/ingress.yaml b/infra/ingress/ingress.yaml deleted file mode 100644 index 37f96b6e7..000000000 --- a/infra/ingress/ingress.yaml +++ /dev/null @@ -1,33 +0,0 @@ -apiVersion: networking.k8s.io/v1 -kind: Ingress -metadata: - name: browserquest-ingress - namespace: ingress-nginx - annotations: - nginx.ingress.kubernetes.io/rewrite-target: / - nginx.ingress.kubernetes.io/use-regex: "true" - nginx.ingress.kubernetes.io/proxy-read-timeout: "3600" - nginx.ingress.kubernetes.io/proxy-send-timeout: "3600" - nginx.ingress.kubernetes.io/proxy-http-version: "1.1" - nginx.ingress.kubernetes.io/connection-proxy-header: "keep-alive" - nginx.ingress.kubernetes.io/websocket-services: "browserquest-service" -spec: - ingressClassName: nginx - rules: - - host: browserquest.local - http: - paths: - - path: / - pathType: Prefix - backend: - service: - name: browserquest-service - port: - number: 80 - - path: /ws/ - pathType: Prefix - backend: - service: - name: browserquest-service - port: - number: 8000 diff --git a/infra/networking/duallstack-config.md b/infra/networking/duallstack-config.md deleted file mode 100644 index 972abbaf8..000000000 --- a/infra/networking/duallstack-config.md +++ /dev/null @@ -1,9 +0,0 @@ -# DualStack IPv4/IPv6 Support in Minikube - -Minikube ≥ v1.30.0 (avec Kubernetes 1.26+) supporte l’IPv6 en dual-stack si activé : - -## Étapes : -Active IPv6 avec le driver Docker : -```bash - -minikube start --network-plugin=cni --cni=calico --feature-gates="IPv6DualStack=true" --extra-config=kubelet.node-ip=, diff --git a/infra/networking/netpol.yaml b/infra/networking/netpol.yaml deleted file mode 100644 index 33359e3d7..000000000 --- a/infra/networking/netpol.yaml +++ /dev/null @@ -1,21 +0,0 @@ -apiVersion: networking.k8s.io/v1 -kind: NetworkPolicy -metadata: - name: restrict-traffic -spec: - podSelector: - matchLabels: - app: browserquest - policyTypes: - - Ingress - - Egress - ingress: - - from: - - podSelector: - matchLabels: - app: browserquest - egress: - - to: - - podSelector: - matchLabels: - app: browserquest \ No newline at end of file diff --git a/infra/nginx/nginx.conf b/infra/nginx/nginx.conf deleted file mode 100644 index 402221e4f..000000000 --- a/infra/nginx/nginx.conf +++ /dev/null @@ -1,35 +0,0 @@ -events { - worker_connections 1024; -} - -http { - include mime.types; - default_type application/octet-stream; - - upstream websocket_backend { - server browserquest-service:8000; - } - - upstream frontend_backend { - server browserquest-service:80; - } - - server { - listen 80; - - location / { - proxy_pass http://frontend_backend; - root /usr/share/nginx/html; - index index.html; - try_files $uri $uri/ /index.html; - } - - location /ws/ { - proxy_pass http://websocket_backend; - proxy_http_version 1.1; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection "Upgrade"; - proxy_set_header Host $host; - } - } -} diff --git a/infra/nginx/readme.md b/infra/nginx/readme.md deleted file mode 100644 index 04b45aa43..000000000 --- a/infra/nginx/readme.md +++ /dev/null @@ -1,31 +0,0 @@ -# NGINX Reverse Proxy - BrowserQuest - -Ce dossier contient les fichiers liés au déploiement d’un reverse proxy NGINX personnalisé dans Kubernetes. - -## Objectif - -Ce NGINX est utilisé comme reverse proxy pour : -- Servir les fichiers statiques du client (`/`) -- Gérer les connexions WebSocket vers le backend (`/ws/`) -- S'assurer que la communication reste persistente (keep-alive) et compatible WebSocket - -## Structure - -- `nginx.conf` : fichier de configuration NGINX (monté via un `ConfigMap`) -- `nginx-configmap.yaml` : expose `nginx.conf` sous forme de `ConfigMap` -- `nginx-deployment.yaml` : déploie un conteneur NGINX avec le `ConfigMap` -- `nginx-service.yaml` : expose le reverse proxy comme un service interne - -## À savoir - -- Le reverse proxy redirige `/ws/` vers `server-service:8000` -- La racine `/` est servie depuis `/usr/share/nginx/html` (penser à builder le client dedans si besoin) - -## Déploiement - -```bash - -kubectl apply -f nginx/nginx-configmap.yaml -kubectl apply -f deployement/nginx-deployement.yaml -kubectl apply -f services/nginx-services.yaml -``` diff --git a/infra/scalling/hpa-client.yaml b/infra/scalling/hpa-client.yaml deleted file mode 100644 index 534d00f97..000000000 --- a/infra/scalling/hpa-client.yaml +++ /dev/null @@ -1,18 +0,0 @@ -apiVersion: autoscaling/v2 -kind: HorizontalPodAutoscaler -metadata: - name: hpa-client -spec: - scaleTargetRef: - apiVersion: apps/v1 - kind: Deployment - name: client - minReplicas: 2 - maxReplicas: 5 - metrics: - - type: Resource - resource: - name: cpu - target: - type: Utilization - averageUtilization: 60 diff --git a/infra/scalling/vpa-client.yaml b/infra/scalling/vpa-client.yaml deleted file mode 100644 index d8cda4be6..000000000 --- a/infra/scalling/vpa-client.yaml +++ /dev/null @@ -1,11 +0,0 @@ -apiVersion: autoscaling.k8s.io/v1 -kind: VerticalPodAutoscaler -metadata: - name: vpa-client -spec: - targetRef: - apiVersion: "apps/v1" - kind: Deployment - name: client - updatePolicy: - updateMode: "Auto" diff --git a/infra/services/browserquest-service.yaml b/infra/services/browserquest-service.yaml deleted file mode 100644 index f44d415c7..000000000 --- a/infra/services/browserquest-service.yaml +++ /dev/null @@ -1,18 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - name: browserquest-service - namespace: default - labels: - app: browserquest -spec: - selector: - app: browserquest - ports: - - name: http - port: 80 - targetPort: 80 - - name: websocket - port: 8000 - targetPort: 8000 - type: ClusterIP From aee99536e846f6c15968a3871915f924756c6002 Mon Sep 17 00:00:00 2001 From: Jeck0v Date: Fri, 11 Apr 2025 00:08:50 +0200 Subject: [PATCH 10/15] =?UTF-8?q?peut=20=C3=AAtre=20bient=C3=B4t...=20ah?= =?UTF-8?q?=20non=20toujours=20pas=20:)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- browserquest-infra/docs/README.md | 0 browserquest-infra/kustomization.yaml | 4 ++ .../manifests/base/deployment.yaml | 27 +++++++++++++ browserquest-infra/manifests/base/hpa.yaml | 19 +++++++++ .../manifests/base/kustomization.yaml | 6 +++ .../manifests/base/namespace.yaml | 4 ++ .../manifests/base/service.yaml | 13 +++++++ .../manifests/dualstack/enable-dualstack.md | 0 .../manifests/ingress/controller.yaml | 15 +++++++ .../manifests/ingress/ingress.yaml | 27 +++++++++++++ .../manifests/ingress/kustomization.yaml | 2 + .../manifests/metrics/kustomization.yaml | 2 + .../manifests/metrics/metrics-server.yaml | 39 +++++++++++++++++++ browserquest-infra/scripts/deploy.bat | 14 +++++++ browserquest-infra/scripts/start-minikube.bat | 4 ++ browserquest-infra/scripts/status.bat | 4 ++ browserquest-infra/scripts/test-access.bat | 13 +++++++ 17 files changed, 193 insertions(+) create mode 100644 browserquest-infra/docs/README.md create mode 100644 browserquest-infra/kustomization.yaml create mode 100644 browserquest-infra/manifests/base/deployment.yaml create mode 100644 browserquest-infra/manifests/base/hpa.yaml create mode 100644 browserquest-infra/manifests/base/kustomization.yaml create mode 100644 browserquest-infra/manifests/base/namespace.yaml create mode 100644 browserquest-infra/manifests/base/service.yaml create mode 100644 browserquest-infra/manifests/dualstack/enable-dualstack.md create mode 100644 browserquest-infra/manifests/ingress/controller.yaml create mode 100644 browserquest-infra/manifests/ingress/ingress.yaml create mode 100644 browserquest-infra/manifests/ingress/kustomization.yaml create mode 100644 browserquest-infra/manifests/metrics/kustomization.yaml create mode 100644 browserquest-infra/manifests/metrics/metrics-server.yaml create mode 100644 browserquest-infra/scripts/deploy.bat create mode 100644 browserquest-infra/scripts/start-minikube.bat create mode 100644 browserquest-infra/scripts/status.bat create mode 100644 browserquest-infra/scripts/test-access.bat diff --git a/browserquest-infra/docs/README.md b/browserquest-infra/docs/README.md new file mode 100644 index 000000000..e69de29bb diff --git a/browserquest-infra/kustomization.yaml b/browserquest-infra/kustomization.yaml new file mode 100644 index 000000000..0b4b67445 --- /dev/null +++ b/browserquest-infra/kustomization.yaml @@ -0,0 +1,4 @@ +resources: + - manifests/base + - manifests/ingress + - manifests/metrics diff --git a/browserquest-infra/manifests/base/deployment.yaml b/browserquest-infra/manifests/base/deployment.yaml new file mode 100644 index 000000000..e4aaeb795 --- /dev/null +++ b/browserquest-infra/manifests/base/deployment.yaml @@ -0,0 +1,27 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: browserquest + namespace: browserquest +spec: + replicas: 1 + selector: + matchLabels: + app: browserquest + template: + metadata: + labels: + app: browserquest + spec: + containers: + - name: browserquest + image: jeck0v/browserquest:latest + ports: + - containerPort: 80 + resources: + requests: + cpu: 100m + memory: 128Mi + limits: + cpu: 500m + memory: 256Mi diff --git a/browserquest-infra/manifests/base/hpa.yaml b/browserquest-infra/manifests/base/hpa.yaml new file mode 100644 index 000000000..dc365db74 --- /dev/null +++ b/browserquest-infra/manifests/base/hpa.yaml @@ -0,0 +1,19 @@ +apiVersion: autoscaling/v2 +kind: HorizontalPodAutoscaler +metadata: + name: browserquest-hpa + namespace: browserquest +spec: + scaleTargetRef: + apiVersion: apps/v1 + kind: Deployment + name: browserquest + minReplicas: 1 + maxReplicas: 5 + metrics: + - type: Resource + resource: + name: cpu + target: + type: Utilization + averageUtilization: 50 diff --git a/browserquest-infra/manifests/base/kustomization.yaml b/browserquest-infra/manifests/base/kustomization.yaml new file mode 100644 index 000000000..27cb562ce --- /dev/null +++ b/browserquest-infra/manifests/base/kustomization.yaml @@ -0,0 +1,6 @@ +namespace: browserquest +resources: + - namespace.yaml + - deployment.yaml + - service.yaml + - hpa.yaml diff --git a/browserquest-infra/manifests/base/namespace.yaml b/browserquest-infra/manifests/base/namespace.yaml new file mode 100644 index 000000000..8267280c7 --- /dev/null +++ b/browserquest-infra/manifests/base/namespace.yaml @@ -0,0 +1,4 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: browserquest diff --git a/browserquest-infra/manifests/base/service.yaml b/browserquest-infra/manifests/base/service.yaml new file mode 100644 index 000000000..0dc8c6b41 --- /dev/null +++ b/browserquest-infra/manifests/base/service.yaml @@ -0,0 +1,13 @@ +apiVersion: v1 +kind: Service +metadata: + name: browserquest + namespace: browserquest +spec: + type: NodePort + ports: + - port: 80 + targetPort: 80 + nodePort: 30000 + selector: + app: browserquest diff --git a/browserquest-infra/manifests/dualstack/enable-dualstack.md b/browserquest-infra/manifests/dualstack/enable-dualstack.md new file mode 100644 index 000000000..e69de29bb diff --git a/browserquest-infra/manifests/ingress/controller.yaml b/browserquest-infra/manifests/ingress/controller.yaml new file mode 100644 index 000000000..a7bd4d3f5 --- /dev/null +++ b/browserquest-infra/manifests/ingress/controller.yaml @@ -0,0 +1,15 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: ingress-nginx +--- +apiVersion: helm.cattle.io/v1 +kind: HelmChart +metadata: + name: ingress-nginx + namespace: kube-system +spec: + chart: ingress-nginx + repo: https://kubernetes.github.io/ingress-nginx + targetNamespace: ingress-nginx + version: 4.10.0 diff --git a/browserquest-infra/manifests/ingress/ingress.yaml b/browserquest-infra/manifests/ingress/ingress.yaml new file mode 100644 index 000000000..d5bc05e88 --- /dev/null +++ b/browserquest-infra/manifests/ingress/ingress.yaml @@ -0,0 +1,27 @@ +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: browserquest-ingress + namespace: browserquest + annotations: + haproxy.ingress.kubernetes.io/rewrite-target: / + haproxy.ingress.kubernetes.io/use-forwarded-headers: "true" +spec: + ingressClassName: haproxy + rules: + - http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: browserquest + port: + number: 80 + - path: /ws/ + pathType: Prefix + backend: + service: + name: browserquest + port: + number: 8000 diff --git a/browserquest-infra/manifests/ingress/kustomization.yaml b/browserquest-infra/manifests/ingress/kustomization.yaml new file mode 100644 index 000000000..fb80823d9 --- /dev/null +++ b/browserquest-infra/manifests/ingress/kustomization.yaml @@ -0,0 +1,2 @@ +resources: + - ingress.yaml diff --git a/browserquest-infra/manifests/metrics/kustomization.yaml b/browserquest-infra/manifests/metrics/kustomization.yaml new file mode 100644 index 000000000..37e6e9a80 --- /dev/null +++ b/browserquest-infra/manifests/metrics/kustomization.yaml @@ -0,0 +1,2 @@ +resources: + - metrics-server.yaml diff --git a/browserquest-infra/manifests/metrics/metrics-server.yaml b/browserquest-infra/manifests/metrics/metrics-server.yaml new file mode 100644 index 000000000..2fc250b65 --- /dev/null +++ b/browserquest-infra/manifests/metrics/metrics-server.yaml @@ -0,0 +1,39 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: metrics-server +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: metrics-server + namespace: metrics-server +spec: + selector: + matchLabels: + k8s-app: metrics-server + template: + metadata: + labels: + k8s-app: metrics-server + spec: + containers: + - name: metrics-server + image: k8s.gcr.io/metrics-server/metrics-server:v0.6.4 + args: + - --kubelet-insecure-tls + - --kubelet-preferred-address-types=InternalIP + ports: + - containerPort: 4443 +--- +apiVersion: v1 +kind: Service +metadata: + name: metrics-server + namespace: metrics-server +spec: + ports: + - port: 443 + targetPort: 4443 + selector: + k8s-app: metrics-server diff --git a/browserquest-infra/scripts/deploy.bat b/browserquest-infra/scripts/deploy.bat new file mode 100644 index 000000000..a942899f9 --- /dev/null +++ b/browserquest-infra/scripts/deploy.bat @@ -0,0 +1,14 @@ +@echo off +kubectl apply -k manifests/base +kubectl apply -k manifests/metrics + +echo Attente du controller NGINX... +kubectl wait --namespace ingress-nginx --for=condition=Ready pod --selector=app.kubernetes.io/component=controller --timeout=120s + +:retry +kubectl apply -k manifests/ingress +IF %ERRORLEVEL% NEQ 0 ( + echo Echec de l'application de l'ingress, nouvelle tentative dans 10s... + timeout /t 10 + GOTO retry +) diff --git a/browserquest-infra/scripts/start-minikube.bat b/browserquest-infra/scripts/start-minikube.bat new file mode 100644 index 000000000..d21a6bd23 --- /dev/null +++ b/browserquest-infra/scripts/start-minikube.bat @@ -0,0 +1,4 @@ +@echo off +minikube delete +minikube start --driver=docker --feature-gates=IPv6DualStack=true --network-plugin=cni --cni=bridge --extra-config=kubelet.node-ip=::1 +minikube addons enable ingress diff --git a/browserquest-infra/scripts/status.bat b/browserquest-infra/scripts/status.bat new file mode 100644 index 000000000..3815bf9e5 --- /dev/null +++ b/browserquest-infra/scripts/status.bat @@ -0,0 +1,4 @@ +@echo off +kubectl get all -n browserquest +kubectl get hpa -n browserquest +minikube service list diff --git a/browserquest-infra/scripts/test-access.bat b/browserquest-infra/scripts/test-access.bat new file mode 100644 index 000000000..4d8aff23a --- /dev/null +++ b/browserquest-infra/scripts/test-access.bat @@ -0,0 +1,13 @@ +@echo off +echo Test d'accessibilite de l'application sur http://localhost:8080... + +timeout /t 5 > nul + +curl -I http://localhost:8080 + +IF %ERRORLEVEL% EQU 0 ( + echo [OK] Application accessible sur http://localhost:8080 +) ELSE ( + echo [ERREUR] L'application ne repond pas sur http://localhost:8080 + echo Verifie si le tunnel Minikube est bien lance (minikube tunnel) +) From 829305a89593a95e7437b49481ede04195ac5160 Mon Sep 17 00:00:00 2001 From: Jeck0v Date: Fri, 11 Apr 2025 01:57:21 +0200 Subject: [PATCH 11/15] =?UTF-8?q?=20je=20suis=20l'homme=20le=20plus=20heur?= =?UTF-8?q?eux=20du=20monde,=20comme=20quoi=20il=20faut=20toujours=20pers?= =?UTF-8?q?=C3=A9v=C3=A9rer?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../manifests/base/deployment.yaml | 9 +++-- .../manifests/base/service.yaml | 13 ++++--- .../manifests/ingress/controller.yaml | 12 +++--- .../manifests/ingress/ingress.yaml | 12 +++--- .../manifests/ingress/kustomization.yaml | 2 +- .../manifests/kustomization.yaml | 4 ++ .../manifests/metrics/metrics-server.yaml | 39 ------------------- .../manifests/metrics/placeholder.yaml | 8 ++++ browserquest-infra/scripts/start-minikube.bat | 1 + 9 files changed, 40 insertions(+), 60 deletions(-) create mode 100644 browserquest-infra/manifests/kustomization.yaml create mode 100644 browserquest-infra/manifests/metrics/placeholder.yaml diff --git a/browserquest-infra/manifests/base/deployment.yaml b/browserquest-infra/manifests/base/deployment.yaml index e4aaeb795..2091d5533 100644 --- a/browserquest-infra/manifests/base/deployment.yaml +++ b/browserquest-infra/manifests/base/deployment.yaml @@ -15,13 +15,14 @@ spec: spec: containers: - name: browserquest - image: jeck0v/browserquest:latest + image: jeck0v/browserquest:lastest ports: - containerPort: 80 + name: http + - containerPort: 8080 + name: websocket resources: requests: cpu: 100m - memory: 128Mi limits: - cpu: 500m - memory: 256Mi + cpu: 200m diff --git a/browserquest-infra/manifests/base/service.yaml b/browserquest-infra/manifests/base/service.yaml index 0dc8c6b41..167991e2e 100644 --- a/browserquest-infra/manifests/base/service.yaml +++ b/browserquest-infra/manifests/base/service.yaml @@ -4,10 +4,13 @@ metadata: name: browserquest namespace: browserquest spec: - type: NodePort - ports: - - port: 80 - targetPort: 80 - nodePort: 30000 selector: app: browserquest + ports: + - name: http + port: 80 + targetPort: 8080 + - name: websocket + port: 8000 + targetPort: 8000 + diff --git a/browserquest-infra/manifests/ingress/controller.yaml b/browserquest-infra/manifests/ingress/controller.yaml index a7bd4d3f5..9c32b2cf8 100644 --- a/browserquest-infra/manifests/ingress/controller.yaml +++ b/browserquest-infra/manifests/ingress/controller.yaml @@ -1,8 +1,3 @@ -apiVersion: v1 -kind: Namespace -metadata: - name: ingress-nginx ---- apiVersion: helm.cattle.io/v1 kind: HelmChart metadata: @@ -11,5 +6,10 @@ metadata: spec: chart: ingress-nginx repo: https://kubernetes.github.io/ingress-nginx - targetNamespace: ingress-nginx version: 4.10.0 + valuesContent: |- + controller: + service: + type: NodePort + extraArgs: + enable-ssl-passthrough: "" diff --git a/browserquest-infra/manifests/ingress/ingress.yaml b/browserquest-infra/manifests/ingress/ingress.yaml index d5bc05e88..eea417024 100644 --- a/browserquest-infra/manifests/ingress/ingress.yaml +++ b/browserquest-infra/manifests/ingress/ingress.yaml @@ -4,12 +4,14 @@ metadata: name: browserquest-ingress namespace: browserquest annotations: - haproxy.ingress.kubernetes.io/rewrite-target: / - haproxy.ingress.kubernetes.io/use-forwarded-headers: "true" + nginx.ingress.kubernetes.io/use-regex: "true" + nginx.ingress.kubernetes.io/backend-protocol: "HTTP" + nginx.ingress.kubernetes.io/ssl-redirect: "false" spec: - ingressClassName: haproxy + ingressClassName: nginx rules: - - http: + - host: localhost + http: paths: - path: / pathType: Prefix @@ -18,7 +20,7 @@ spec: name: browserquest port: number: 80 - - path: /ws/ + - path: /ws pathType: Prefix backend: service: diff --git a/browserquest-infra/manifests/ingress/kustomization.yaml b/browserquest-infra/manifests/ingress/kustomization.yaml index fb80823d9..caebd60d9 100644 --- a/browserquest-infra/manifests/ingress/kustomization.yaml +++ b/browserquest-infra/manifests/ingress/kustomization.yaml @@ -1,2 +1,2 @@ resources: - - ingress.yaml + - ingress.yaml \ No newline at end of file diff --git a/browserquest-infra/manifests/kustomization.yaml b/browserquest-infra/manifests/kustomization.yaml new file mode 100644 index 000000000..f43f78fcf --- /dev/null +++ b/browserquest-infra/manifests/kustomization.yaml @@ -0,0 +1,4 @@ +resources: + - ./base + - ./ingress + - ./metrics diff --git a/browserquest-infra/manifests/metrics/metrics-server.yaml b/browserquest-infra/manifests/metrics/metrics-server.yaml index 2fc250b65..e69de29bb 100644 --- a/browserquest-infra/manifests/metrics/metrics-server.yaml +++ b/browserquest-infra/manifests/metrics/metrics-server.yaml @@ -1,39 +0,0 @@ -apiVersion: v1 -kind: Namespace -metadata: - name: metrics-server ---- -apiVersion: apps/v1 -kind: Deployment -metadata: - name: metrics-server - namespace: metrics-server -spec: - selector: - matchLabels: - k8s-app: metrics-server - template: - metadata: - labels: - k8s-app: metrics-server - spec: - containers: - - name: metrics-server - image: k8s.gcr.io/metrics-server/metrics-server:v0.6.4 - args: - - --kubelet-insecure-tls - - --kubelet-preferred-address-types=InternalIP - ports: - - containerPort: 4443 ---- -apiVersion: v1 -kind: Service -metadata: - name: metrics-server - namespace: metrics-server -spec: - ports: - - port: 443 - targetPort: 4443 - selector: - k8s-app: metrics-server diff --git a/browserquest-infra/manifests/metrics/placeholder.yaml b/browserquest-infra/manifests/metrics/placeholder.yaml new file mode 100644 index 000000000..72bc6193c --- /dev/null +++ b/browserquest-infra/manifests/metrics/placeholder.yaml @@ -0,0 +1,8 @@ +# placeholder pour que kubectl ne plante pas +apiVersion: v1 +kind: ConfigMap +metadata: + name: dummy-metrics + namespace: browserquest +data: + dummy: "true" diff --git a/browserquest-infra/scripts/start-minikube.bat b/browserquest-infra/scripts/start-minikube.bat index d21a6bd23..a55f51227 100644 --- a/browserquest-infra/scripts/start-minikube.bat +++ b/browserquest-infra/scripts/start-minikube.bat @@ -2,3 +2,4 @@ minikube delete minikube start --driver=docker --feature-gates=IPv6DualStack=true --network-plugin=cni --cni=bridge --extra-config=kubelet.node-ip=::1 minikube addons enable ingress +minikube addons enable metrics-server \ No newline at end of file From 6e75045e783bd611b4fcf65a9e1407324cd05024 Mon Sep 17 00:00:00 2001 From: Jeck0v Date: Fri, 11 Apr 2025 03:42:56 +0200 Subject: [PATCH 12/15] =?UTF-8?q?=20id=C3=A9e=20Websocket=20=C3=A0=20fix:f?= =?UTF-8?q?ier=20c=C3=B4t=C3=A9=20client=20&=20server=20si=20y=20a=20pas?= =?UTF-8?q?=20un=20bail=20de=20websocket=20qui=20me=20bloque=20la=20co=20a?= =?UTF-8?q?vec=20le=20ingress,s?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- browserquest-infra/manifests/base/deployment.yaml | 4 ++-- browserquest-infra/manifests/ingress/ingress.yaml | 7 ++++--- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/browserquest-infra/manifests/base/deployment.yaml b/browserquest-infra/manifests/base/deployment.yaml index 2091d5533..a91983b44 100644 --- a/browserquest-infra/manifests/base/deployment.yaml +++ b/browserquest-infra/manifests/base/deployment.yaml @@ -15,11 +15,11 @@ spec: spec: containers: - name: browserquest - image: jeck0v/browserquest:lastest + image: jeck0v/browserquest:test ports: - containerPort: 80 name: http - - containerPort: 8080 + - containerPort: 8000 name: websocket resources: requests: diff --git a/browserquest-infra/manifests/ingress/ingress.yaml b/browserquest-infra/manifests/ingress/ingress.yaml index eea417024..a4a2ac549 100644 --- a/browserquest-infra/manifests/ingress/ingress.yaml +++ b/browserquest-infra/manifests/ingress/ingress.yaml @@ -6,11 +6,12 @@ metadata: annotations: nginx.ingress.kubernetes.io/use-regex: "true" nginx.ingress.kubernetes.io/backend-protocol: "HTTP" + nginx.ingress.kubernetes.io/websocket-services: "browserquest" nginx.ingress.kubernetes.io/ssl-redirect: "false" spec: ingressClassName: nginx rules: - - host: localhost + - host: browserquest http: paths: - path: / @@ -20,8 +21,8 @@ spec: name: browserquest port: number: 80 - - path: /ws - pathType: Prefix + - path: /socket.io + pathType: ImplementationSpecific backend: service: name: browserquest From 0521d2edbe85e0c27ebb3282d940c84c16e6d36b Mon Sep 17 00:00:00 2001 From: Jeck0v Date: Fri, 11 Apr 2025 03:49:19 +0200 Subject: [PATCH 13/15] Ajout / modification de la docs --- browserquest-infra/docs/README.md | 0 infra.md => browserquest-infra/docs/infra.md | 36 +++++++------------ browserquest-infra/scripts/start-minikube.bat | 2 +- browserquest-infra/scripts/test-access.bat | 1 - 4 files changed, 13 insertions(+), 26 deletions(-) delete mode 100644 browserquest-infra/docs/README.md rename infra.md => browserquest-infra/docs/infra.md (78%) diff --git a/browserquest-infra/docs/README.md b/browserquest-infra/docs/README.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/infra.md b/browserquest-infra/docs/infra.md similarity index 78% rename from infra.md rename to browserquest-infra/docs/infra.md index 28fa994fb..3c2ddfc1d 100644 --- a/infra.md +++ b/browserquest-infra/docs/infra.md @@ -5,7 +5,7 @@ docker run -p 8080:8080 -p 8000:8000 browserquest ``` Dans notre cas on utilisera notre image dockerhub: -`jeck0v/browserquest:lastest` +`jeck0v/browserquest:test` ### Documentation lancement Minikube @@ -24,7 +24,7 @@ choco install kubernetes-cli ``` #### Lancement Minikube: ```bash -minikube start --driver=docker --kubernetes-version=v1.32.0 +minikube start --driver=docker --network-plugin=cni --cni=bridge ``` Si besoin de suppr le cluster: ```bash @@ -41,35 +41,23 @@ minikube addons enable metrics-server Pour être sûr que l'image est bien prise en compte par minikube: ```bash docker build -t jeck0v/browserquest . -minikube image load jeck0v/browserquest:lastest +minikube image load jeck0v/browserquest:test ``` -Aller dans le dossier racine: +Aller dans le dossier browserquest-infra: +ça lancera tout ```bash -kubectl apply -f infra/deployement/ -kubectl apply -f infra/services/ -kubectl apply -f infra/configmap/ -kubectl apply -f infra/ingress/ -kubectl apply -f infra/scalling +.\scripts\start-minikube.bat +.\scripts\deploy.bat +.\scripts\status.bat +.\scripts\test-access.bat ``` -### Vérrification des pods / services / ingress / hpa: -```bash -kubectl get pods -kubectl get hpa -kubectl get services -kubectl get ingress -``` ### Tester l'app: -Dans un autre terminal qu'il faudra laisser ouvert: -via le tunnel aller à `localhost:8080` -```bash -minikube tunnel -``` -ou -
+Dans un autre terminal qu'il faudra laisser ouvert: + ```bash -kubectl port-forward svc/browserquest-service 8080:80 +kubectl port-forward -n browserquest svc/browserquest 8080:80 ``` ## Config nginx, configmap et ingress diff --git a/browserquest-infra/scripts/start-minikube.bat b/browserquest-infra/scripts/start-minikube.bat index a55f51227..3407dbd0e 100644 --- a/browserquest-infra/scripts/start-minikube.bat +++ b/browserquest-infra/scripts/start-minikube.bat @@ -1,5 +1,5 @@ @echo off minikube delete -minikube start --driver=docker --feature-gates=IPv6DualStack=true --network-plugin=cni --cni=bridge --extra-config=kubelet.node-ip=::1 +minikube start --driver=docker --network-plugin=cni --cni=bridge minikube addons enable ingress minikube addons enable metrics-server \ No newline at end of file diff --git a/browserquest-infra/scripts/test-access.bat b/browserquest-infra/scripts/test-access.bat index 4d8aff23a..ffc351028 100644 --- a/browserquest-infra/scripts/test-access.bat +++ b/browserquest-infra/scripts/test-access.bat @@ -9,5 +9,4 @@ IF %ERRORLEVEL% EQU 0 ( echo [OK] Application accessible sur http://localhost:8080 ) ELSE ( echo [ERREUR] L'application ne repond pas sur http://localhost:8080 - echo Verifie si le tunnel Minikube est bien lance (minikube tunnel) ) From d2d4a76c6ef9145d5b944c73b9051d2139d981f0 Mon Sep 17 00:00:00 2001 From: Maxime Date: Fri, 11 Apr 2025 09:41:46 +0200 Subject: [PATCH 14/15] Update deployment and service configurations, modify client connection settings, and adjust server host - Changed Docker image for browserquest from 'jeck0v/browserquest:test' to 'maxbdk/browserquest:test'. - Updated service and deployment to use port 8080 instead of 80 for HTTP. - Modified client connection URL to use 'ws://' and adjusted reconnection settings. - Changed server host from '127.0.0.1' to '0.0.0.0' for broader accessibility. --- browserquest-infra/manifests/base/deployment.yaml | 4 ++-- browserquest-infra/manifests/base/service.yaml | 4 ++-- client/js/gameclient.js | 10 +++++----- server/config.json | 2 +- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/browserquest-infra/manifests/base/deployment.yaml b/browserquest-infra/manifests/base/deployment.yaml index a91983b44..35a835a4b 100644 --- a/browserquest-infra/manifests/base/deployment.yaml +++ b/browserquest-infra/manifests/base/deployment.yaml @@ -15,9 +15,9 @@ spec: spec: containers: - name: browserquest - image: jeck0v/browserquest:test + image: maxbdk/browserquest:test ports: - - containerPort: 80 + - containerPort: 8080 name: http - containerPort: 8000 name: websocket diff --git a/browserquest-infra/manifests/base/service.yaml b/browserquest-infra/manifests/base/service.yaml index 167991e2e..059d55df0 100644 --- a/browserquest-infra/manifests/base/service.yaml +++ b/browserquest-infra/manifests/base/service.yaml @@ -4,13 +4,13 @@ metadata: name: browserquest namespace: browserquest spec: + type: NodePort selector: app: browserquest ports: - name: http - port: 80 + port: 8080 targetPort: 8080 - name: websocket port: 8000 targetPort: 8000 - diff --git a/client/js/gameclient.js b/client/js/gameclient.js index ac40dd025..8c420e652 100644 --- a/client/js/gameclient.js +++ b/client/js/gameclient.js @@ -41,15 +41,15 @@ define(["player", "entityfactory"], function (Player, EntityFactory) { }, connect: function (dispatcherMode) { - var url = "http://" + this.host + ":" + this.port, + var url = "ws://" + this.host + ":" + this.port, self = this; this.connection = io(url, { - transports: ["websocket", "polling"], + transports: ["websocket"], reconnection: true, - reconnectionAttempts: 5, - reconnectionDelay: 1000, - timeout: 20000, + reconnectionAttempts: 3, + reconnectionDelay: 2000, + timeout: 5000, forceNew: true, }); diff --git a/server/config.json b/server/config.json index be9b16666..1aed330ea 100644 --- a/server/config.json +++ b/server/config.json @@ -1,5 +1,5 @@ { - "host": "127.0.0.1", + "host": "0.0.0.0", "port": 8000, "debug_level": "info", "nb_players_per_world": 200, From 340ace306b5e17546e8d9b2278d9d75e05291bac Mon Sep 17 00:00:00 2001 From: Maxime Date: Fri, 11 Apr 2025 10:55:27 +0200 Subject: [PATCH 15/15] Update deployment and HPA configurations to enhance scalability and resource allocation - Increased the number of replicas in the deployment from 1 to 3 for improved availability. - Adjusted CPU resource requests from 100m to 500m and limits from 200m to 1000m to better handle load. - Updated HPA minimum replicas from 1 to 3 and maximum replicas from 5 to 8 to support higher scaling capabilities. --- browserquest-infra/manifests/base/deployment.yaml | 6 +++--- browserquest-infra/manifests/base/hpa.yaml | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/browserquest-infra/manifests/base/deployment.yaml b/browserquest-infra/manifests/base/deployment.yaml index 35a835a4b..768f4573c 100644 --- a/browserquest-infra/manifests/base/deployment.yaml +++ b/browserquest-infra/manifests/base/deployment.yaml @@ -4,7 +4,7 @@ metadata: name: browserquest namespace: browserquest spec: - replicas: 1 + replicas: 3 selector: matchLabels: app: browserquest @@ -23,6 +23,6 @@ spec: name: websocket resources: requests: - cpu: 100m + cpu: 500m limits: - cpu: 200m + cpu: 1000m diff --git a/browserquest-infra/manifests/base/hpa.yaml b/browserquest-infra/manifests/base/hpa.yaml index dc365db74..f2154925f 100644 --- a/browserquest-infra/manifests/base/hpa.yaml +++ b/browserquest-infra/manifests/base/hpa.yaml @@ -8,8 +8,8 @@ spec: apiVersion: apps/v1 kind: Deployment name: browserquest - minReplicas: 1 - maxReplicas: 5 + minReplicas: 3 + maxReplicas: 8 metrics: - type: Resource resource: