main
etape2
K8s, des applications en mode local et les présenter via HomePage
HarborNFS -> via un service NFS sur cloud.googleesh26harbor-matricule.duckdns.org16 mai, 👉 fin de journéeK8s, des applications en mode cloud et les ajouter à HomePage
esh26.matricule.duckdns.org25 mai, 👉 fin de journéeve2cuy)
👉 remise le 17 maicloud.google
es-4204d4-h26
sudo ne reconnait plus le mot de passe, redémarrer la session ssh.Harbor avec certificats TLS
DNS sur DuckDNS -> harbor-matricule.duckdns.orgHarbor, créer un dépot (projet) nommé esh26
homepage:esh26 (à partir de ghcr.io/gethomepage/homepage:latest)
docker tag ghcr.io/gethomepage/homepage:latest 4204d4.duckdns.org/esh26/homepage:esh26docker push 4204d4.duckdns.org/esh26/homepage:esh26wordpress:esh26 (à partir de wordpress:latest)mariadb:esh26 (à partir de mariadb:latest)jenkins:esh26 (à partir de jenkins/jenkins:lts)node-red:esh26 (à partir de nodered/node-red:latest)mattermost:esh26 (à partir de mattermost/mattermost-preview)NFS sur le dossier /esh26
/esh26, /esh26/themes, /esh26/plugins et /esh26/node-redk8s local (soit via VMs ou Docker-Desktop)
metallbtraefik (http://dashbord.esh26)
docker-desktop il faut utiliser 127.0.0.1 dashboard.esh26 wordpress.esh26 ... dans hosts, sinon, il faut utiliser l’adress IP publique du service traefik.homepage
image: 4204d4.duckdns.org/esh26/homepage:esh26configMap, voir les notes de cours, pour les fichiers:
config.yamlservices.yamlwidgets.yamlbookmarks.yamlsettings.yamlhttps!homepage est http://tp02.esh26



configmap voir iciharbor via harbor.matricule.duckdns.org/esh26/harbor:esh26 NOTE: 🛑 Si harbor a été démarré avec le mot de passe par défaut, il faudra effacer la base de données et recommencer la configuration:
sudo docker-compose down -v
rm -r /data/database
rm -r /data/registry
sudo ./prepare
sudo docker-compose up -d
NFS /esh26/wordpress/themes voir ici

NFS /esh26/node-red


local-pathapiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: jenkins-pvc
spec:
accessModes:
- ReadWriteOnce
storageClassName: local-path
resources:
requests:
storage: 5Gi

# Générer le certificat
sudo certbot certonly --standalone -d 4204d4.duckdns.org
# Renseigner le fichier `harbor.yml`
nano harbor.yml
https:
# https port for harbor, default is 443
port: 443
# The path of cert and key files for nginx
certificate: /etc/letsencrypt/live/4204d4.duckdns.org/fullchain.pem
private_key: /etc/letsencrypt/live/4204d4.duckdns.org/privkey.pem
Voir ici
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-nfs-node-red
spec:
...
storageClassName: nfs-node-red
nfs:
server: esh26-mon-matricule.duckdns.org
path: /esh26/node-red
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-nfs-node-red
spec:
storageClassName: nfs-node-red
...
# ============================================================
# ConfigMap — config.yaml de Homepage
# ============================================================
apiVersion: v1
kind: ConfigMap
metadata:
name: homepage-config
data:
config.yaml: |
title: Homepage
theme: dark
color: slate
allowedHosts: homepage.esh26
apiVersion: apps/v1
kind: Deployment
metadata:
name: homepage
spec:
replicas: 1
selector:
matchLabels:
app: homepage
template:
metadata:
labels:
app: homepage
spec:
containers:
- name: homepage
image: harbor.matricule.duckdns.org/esh26/homepage:esh26
### Lancer une application multi-fichiers YAML
# kustomization.yaml
# kubectl apply -k ./
resources:
- esh26.yaml
- traefik-ns.yaml
- jenkins.yaml
- node-red.yaml
- wordpress.yaml
Dans les notes de cours, il est indiqué qu’un PVC est toujours dépendant d’un PV.
Par contre, pour un volume local il est possible d’utiliser la classe storageClassName: local-path si le service local-path à été installé.
# Installation d'un `local-path-storage`
kubectl apply -f https://raw.githubusercontent.com/rancher/local-path-provisioner/v0.0.32/deploy/local-path-storage.yaml
$ kga
NAME READY STATUS RESTARTS AGE
pod/homepage-76fb784c47-gqspg 1/1 Running 0 24h
pod/jenkins-55b96dfc79-t9h4n 1/1 Running 0 23h
pod/mariadb-8544495789-4s4sv 1/1 Running 0 24h
pod/mattermost-69f568bcf9-rtk76 1/1 Running 0 24h
pod/node-red-68b55c5bfb-xhz65 1/1 Running 0 24h
pod/wordpress-5d9548759d-v7dh5 1/1 Running 0 24h
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/homepage ClusterIP 10.109.226.194 <none> 80/TCP 24h
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 24h
service/mariadb-service ClusterIP 10.100.209.86 <none> 3306/TCP 24h
service/service-jenkins ClusterIP 10.103.139.150 <none> 80/TCP,50000/TCP 23h
service/service-mattermost ClusterIP 10.107.102.101 <none> 8065/TCP 24h
service/service-node-red ClusterIP 10.100.73.1 <none> 80/TCP 24h
service/wordpress-service ClusterIP 10.104.185.125 <none> 80/TCP 24h
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/homepage 1/1 1 1 24h
deployment.apps/jenkins 1/1 1 1 23h
deployment.apps/mariadb 1/1 1 1 24h
deployment.apps/mattermost 1/1 1 1 24h
deployment.apps/node-red 1/1 1 1 24h
deployment.apps/wordpress 1/1 1 1 24h
NAME DESIRED CURRENT READY AGE
replicaset.apps/homepage-76fb784c47 1 1 1 24h
replicaset.apps/jenkins-55b96dfc79 1 1 1 23h
replicaset.apps/mariadb-8544495789 1 1 1 24h
replicaset.apps/mattermost-69f568bcf9 1 1 1 24h
replicaset.apps/node-red-68b55c5bfb 1 1 1 24h
replicaset.apps/wordpress-5d9548759d 1 1 1 24h
remise le 25 mai
k8s de type auto-pilote, sur google, nommé tu-parles-dun-projettraefik
etape-02-MATRICULE.duckdns.org, renseigner des routes versdashboard.etape-02-MATRICULE.duckdns.orgscaling.etape-02-MATRICULE.duckdns.orgimmich.etape-02-MATRICULE.duckdns.orggcloud. Cette section représente des coûts d’environ 8$ par jour. Idéalement, il faudrait déployer sur gcloud autour de la date de remise.
traefikLe dashboard de traefik doit être protégé par un mot de passe:

Avec Traefik, on utilise le middleware BasicAuth.
htpasswd -nb admin leMotDePasseHyperSecret
apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
name: basic-auth
namespace: traefik
spec:
basicAuth:
secret: traefik-auth-secret
---
apiVersion: v1
kind: Secret
metadata:
name: traefik-auth-secret
namespace: traefik
type: Opaque
stringData:
users: "admin:$apr1$......" # ← coller le résultat de htpasswd ici
Puis, référer au Middleware dans le fichier values.yaml de traefik
helm upgrade traefik traefik/traefik -n traefik -f values.yaml

À partir du manifeste disponible –> ICI, déployer l’application de démonstration de la fonction K8s d’auto-scaling.

Ce projet permet d’expérimenter avec le scaling des pods en fonction de la demande. Le bouton Démarrer la charge va lancer un pod qui va saturer le site web. Par conséquent, le réplicatset va augmenter le nombre de pods pour maintenir le pression cpu sous 50%.
😉 Dans ce manifeste, il ne manque que la route ingress.
NOTE: 🛑 Les ressources de ce manifeste ne seront pas créées dans le namespace default. Par défaut, traefik ne voit pas les services qui sont dans un autre espace de nom que default.
💡Indice:
kubernetesCRD:
allowCrossNamespace: true # ← ajouter ceci

Il faut déployer le gestionnaire de photos Immich en utilisant un volume NFS pour le contenu.


#/etc/export
/esh26/immich *(rw,sync,no_subtree_check,all_squash,anonuid=65534,anongid=65534,insecure)
NOTE: 🛑 Les ressources de ce manifeste ne seront pas créées dans le namespace default. Par défaut, traefik ne voit pas les services qui sont dans un autre espace de nom que default.
| Matricule | Nom | Prénom | Liens |
|---|---|---|---|
| 1146373 | Charbonneau | Félix | 👍harbor ‼️Traefik ‼️scaling |
| 1929205 | Moussette | David | ‼️harbor ‼️Traefik ‼️scaling |
| 2133738 | Boudreault | Charles | 👍harbor 👍Traefik 👍scaling |
| 2135251 | Latreille | Léa | 👍harbor 👍Traefik 👍scaling |
| 2176750 | Lamonde | Louis | 👍harbor 👍Traefik 👍scaling |
| 2236171 | Papineau | Émy | 👍 harbor 👍Traefik 👍scaling |
| 2248071 | Bilodeau | Lilianne | 👍 harbor 👍Traefik 👍scaling |
| 2251141 | Bouchareb | Saad | 👍harbor 👍Traefik 👍scaling |
| 2464026 | Ezzahiri | Adam | 👍harbor 👍Traefik 👍scaling |
| 2467525 | Guertin | Ubert | 👍harbor 👍Traefik 👍scaling |
| 2482651 | Korotkov | Maxim | 👍harbor 👍Traefik 👍scaling |
| 2487266 | Goudreau | Gabriel | 👍 harbor 👍Traefik 👍scaling |
| 6226374 | Gosselin-Beaudoin | Xavier | 👍harbor ‼️Traefik ‼️scaling |
| 6294775 | Paradis | Laury-Ann | 👍 harbor ‼️Traefik ‼️scaling |
| 6313976 | Lamirande | Xavier | 👍harbor 👍Traefik 👍scaling |
| 1191869 | Bebnowski-Lavoie | Guillaume | 👍 harbor 🤔Traefik 👍scaling |
| 1970541 | Asfaw | Marcus | 👍 harbor 👍Traefik 👍scaling |
| 2156548 | Mechmachi | Achraf | 👍 harbor 👍Traefik ‼️scaling |
| 2241079 | Légaré | Christopher | 👍 harbor 👍Traefik 👍scaling |
| 2257181 | Rivet | Olivier | ‼️harbor ‼️Traefik ‼️scaling |
| 2357057 | Rimpel Morel | Chelsey | 👍harbor 👍Traefik 👍scaling |
| 2383950 | Lalonde | Félix | 👍 harbor 👍Traefik 🛑scaling |
| 2384502 | Guay | Raphaël | 👍 harbor ‼️Traefik ‼️scaling |
| 2482798 | Archambault | Derek | 👍 harbor 👍Traefik 👍scaling |
| 6220854 | Paradis | Louam | 👍 harbor 👍Traefik 👍scaling |
| 6235015 | Diallo | Abdoulaye | 👍 harbor 👍Traefik 👍scaling |
| 6289173 | Dubois | Zachary | 👍 harbor 👍Traefik 👍scaling |
| 6297476 | Forget | Antoine | 👍 harbor 👍Traefik 👍scaling |
| 6313680 | Nibimenya | Maëlys | ‼️harbor ‼️Traefik ‼️scaling |