From 0a6fc9ffe852a0cf499cd0a59d06f783510eab8d27d743d31b2f7be4cf9b8a85 Mon Sep 17 00:00:00 2001 From: Maxime TEYSSIER Date: Thu, 26 Feb 2026 15:37:51 +0100 Subject: [PATCH] First learning config files --- 01-premier-pas.yaml | 19 ++++++++++++ 02-service.yaml | 12 ++++++++ 03-ingress.yaml | 25 +++++++++++++++ 04-stockage.yaml | 36 ++++++++++++++++++++++ 05-final copy.yaml | 70 +++++++++++++++++++++++++++++++++++++++++ 06-web-memo.yaml | 72 +++++++++++++++++++++++++++++++++++++++++++ project/memo.yaml | 60 ++++++++++++++++++++++++++++++++++++ project/stockage.yaml | 11 +++++++ 8 files changed, 305 insertions(+) create mode 100644 01-premier-pas.yaml create mode 100644 02-service.yaml create mode 100644 03-ingress.yaml create mode 100644 04-stockage.yaml create mode 100644 05-final copy.yaml create mode 100644 06-web-memo.yaml create mode 100644 project/memo.yaml create mode 100644 project/stockage.yaml diff --git a/01-premier-pas.yaml b/01-premier-pas.yaml new file mode 100644 index 0000000..13fd07d --- /dev/null +++ b/01-premier-pas.yaml @@ -0,0 +1,19 @@ +apiVersion: apps/v1 +kind: Deployment # kind => Le genre +metadata: + name: mon-application # Le nom du groupe +spec: + replicas: 3 # On veut 3 copies + selector: + matchLabels: + app: apprentissage # C'est le "tag" qui lie le goupe aux pods + template: + metadata: + labels: + app: apprentissage # Le tag collé sur chaque pod + spec: + containers: + - name: web-conainter + image: nginxdemos/hello # Image fun qui affiche l'@IP du pod + ports: + - containerPort: 80 \ No newline at end of file diff --git a/02-service.yaml b/02-service.yaml new file mode 100644 index 0000000..dcb3714 --- /dev/null +++ b/02-service.yaml @@ -0,0 +1,12 @@ +apiVersion: v1 +kind: Service +metadata: + name: mon-service-apprentissage # Le nom du "Standardiste" +spec: + selector: + app: apprentissage # IMPORTANT: Doit correspondre exactement au label du Deployment + ports: + - protocol: TCP + port: 80 # Port sur lequel Service écoute + targetPort: 80 # Port sur lequel Pod écoute + type: ClusterIP \ No newline at end of file diff --git a/03-ingress.yaml b/03-ingress.yaml new file mode 100644 index 0000000..4c16151 --- /dev/null +++ b/03-ingress.yaml @@ -0,0 +1,25 @@ +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: ingress-apprentissage + annotations: + # On dit à cert-manager d'utiliser ton émetteur Step-CA + cert-manager.io/cluster-issuer: "step-ca-issuer" + # On force la redirection vers le HTTPS + traefik.ingress.kubernetes.io/routeur.entrypoints: websecure +spec: + tls: + - hosts: + - apprentissage.teyssier.lan + secretName: apprentissage-tls # Nom secret stockant le certificat + rules: + - host: apprentissage.teyssier.lan + http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: mon-service-apprentissage # On pointe vers le service du Module 02 + port: + number: 80 \ No newline at end of file diff --git a/04-stockage.yaml b/04-stockage.yaml new file mode 100644 index 0000000..fc5dbff --- /dev/null +++ b/04-stockage.yaml @@ -0,0 +1,36 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: pvc-apprentissage +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 500Mi + storageClassName: local-path +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: nginx-memoire +spec: + replicas: 1 + selector: + matchLabels: + app: memoire + template: + metadata: + labels: + app: memoire + spec: + containers: + - name: nginx + image: nginx:latest + volumeMounts: + - name: stockage-web + mountPath: /usr/share/nginx/html # Plug disk here + volumes: + - name: stockage-web + persistentVolumeClaim: + claimName: pvc-apprentissage \ No newline at end of file diff --git a/05-final copy.yaml b/05-final copy.yaml new file mode 100644 index 0000000..d74d2da --- /dev/null +++ b/05-final copy.yaml @@ -0,0 +1,70 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: pvc-apprentissage +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 500Mi + storageClassName: local-path +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: app-final +spec: + replicas: 2 #Pour la HA, Toujours 2 de UP + selector: + matchLabels: + app: prod + template: + metadata: + labels: + app: prod + spec: + containers: + - name: nginx + image: nginx:latest + volumeMounts: + - name: data + mountPath: /usr/share/nginx/html + volumes: + - name: data + persistentVolumeClaim: + claimName: pvc-apprentissage +--- +apiVersion: v1 +kind: Service +metadata: + name: svc-finale +spec: + ports: + - port: 80 + targetPort: 80 + selector: + app: prod +--- +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: ingress-finale + annotations: + traefik.ingress.kubernetes.io/router.entrypoints: websecure +spec: + tls: + - hosts: + - apprentissage.teyssier.lan + secretName: apprentissage-tls + rules: + - host: apprentissage.teyssier.lan + http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: svc-finale + port: + number: 80 diff --git a/06-web-memo.yaml b/06-web-memo.yaml new file mode 100644 index 0000000..07194f3 --- /dev/null +++ b/06-web-memo.yaml @@ -0,0 +1,72 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: pvc-apprentissage +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 1Gi # Memos a besoin d'un peu plus de place pour la DB + storageClassName: local-path +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: app-memos +spec: + replicas: 1 # Pour les bases de données type SQLite, on reste sur 1 pod pour éviter la corruption + selector: + matchLabels: + app: notes + template: + metadata: + labels: + app: notes + spec: + containers: + - name: memos + image: neosmemo/memos:stable + ports: + - containerPort: 5230 + volumeMounts: + - name: data + mountPath: /var/opt/memos # Chemin où Memos stocke sa base de données + volumes: + - name: data + persistentVolumeClaim: + claimName: pvc-apprentissage +--- +apiVersion: v1 +kind: Service +metadata: + name: svc-notes +spec: + ports: + - port: 80 + targetPort: 5230 # Memos écoute sur le 5230 par défaut + selector: + app: notes +--- +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: ingress-notes + annotations: + traefik.ingress.kubernetes.io/router.entrypoints: websecure +spec: + tls: + - hosts: + - apprentissage.teyssier.lan + secretName: apprentissage-tls + rules: + - host: apprentissage.teyssier.lan + http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: svc-notes + port: + number: 80 \ No newline at end of file diff --git a/project/memo.yaml b/project/memo.yaml new file mode 100644 index 0000000..a39ff08 --- /dev/null +++ b/project/memo.yaml @@ -0,0 +1,60 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: app-memos +spec: + replicas: 1 # Pour les bases de données type SQLite, on reste sur 1 pod pour éviter la corruption + selector: + matchLabels: + app: notes + template: + metadata: + labels: + app: notes + spec: + containers: + - name: memos + image: neosmemo/memos:stable + ports: + - containerPort: 5230 + volumeMounts: + - name: data + mountPath: /var/opt/memos # Chemin où Memos stocke sa base de données + volumes: + - name: data + persistentVolumeClaim: + claimName: pvc-apprentissage +--- +apiVersion: v1 +kind: Service +metadata: + name: svc-notes +spec: + ports: + - port: 80 + targetPort: 5230 # Memos écoute sur le 5230 par défaut + selector: + app: notes +--- +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: ingress-notes + annotations: + traefik.ingress.kubernetes.io/router.entrypoints: websecure +spec: + tls: + - hosts: + - apprentissage.teyssier.lan + secretName: apprentissage-tls + rules: + - host: apprentissage.teyssier.lan + http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: svc-notes + port: + number: 80 \ No newline at end of file diff --git a/project/stockage.yaml b/project/stockage.yaml new file mode 100644 index 0000000..10f7b84 --- /dev/null +++ b/project/stockage.yaml @@ -0,0 +1,11 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: pvc-apprentissage +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 1Gi # Memos a besoin d'un peu plus de place pour la DB + storageClassName: local-path \ No newline at end of file