Pour une correction de 90/100, il est possible réaliser, à la maison, la partie B de ce projet grace à la fonction Kubernetes de Docker Desktop. Il suffit de remplacer le volume Longhorn par un volume local. Dans ce cas, le défi WordPress ne sera pas considéré.
Réaliser, documenter et automatiser les cycles d’édition, de production et de distribution d’une application apache2/php dans un réseau K8s à charge équilibrée – déploiement réalisé sur un cluster local .
Pour cloner le projet à partir du cli de git:
git clone https://github.com/ve2cuy/420-4D4.TP03.Depart.git
Le mot de passe pour les serveurs, les VM et Rancher est !abc_def_123_456!
Toutes les adresses IP doivent être fixes, serveurs, VM, nœuds K8s. Voici la plage disponible:
NOTE: À vous de gérer la plage IP disponibles en collaboration avec l’ensemble des participants.
Il faut créer 4 vms (une VM par équipe) Ubuntu 22.04 par serveur Proxmox avec les ressources nécessaires pour rouler K8S, Rancher, metallb, longhorn, Ingress, le monitoring (prometheus, grafana) et les déploiements de la partie 2. Les VMs seront nommées, E1-VM1, E2-VM1, E3-VM1 et E4-VM1 sur le serveur Promox 01, E1-VM2, E2-VM2 sur le serveur Promox 01, E3-VM2 sur le serveur Promox 02 et E4-VM2 sur le serveur Promox 03, E1-VM3, E2-VM3, E3-VM3 et E4-VM3 sur le serveur Promox 02 et E1-VM4, E2-VM4, E3-VM4 et E4-VM4 sur le serveur Promox 03.
Il faut installer un amas K8S constitué de 4 noeuds – 1 master, 3 worker – selon la topologie suivante:
alain@k8s01:~$ k get pod -n ingress-nginx NAME READY STATUS RESTARTS AGE ingress-nginx-controller-7d9674b7cf-nrb87 1/1 Running 0 9d
NOOOOOTE: Chaque étudiant est responsable de la rédaction de son document. Cette étape n’est pas un travail d’équipe 🫥.
FIN DE LA PARTIE A
Cette partie doit-être déployée sur le cluster K8S du D139.
Il est possible de développer le projet à la maison sur un cluster équivalent (Par exemple, 4 VM sous VirtualBox) et de déployer la version finale au D139.
ATTENTION – Il ne faut pas enregistrer de manifestes sur les noeuds de votre amas – cluster K8S -. La commande kubectl doit être utilisée sur votre poste de travail et non pas lors d’une session ssh. Si vous placez des manifestes sur un des noeuds, ils seront disponibles à TOUS!!!
De plus, il faut ABSOLUMENT créer un espace de nom – namespace – à partir de votre matricule et créer TOUTES les RESSOURCES du projet dans cet espace de nom. VOIR LA SECTION COPIER/COLLER pour des exemples.
Déployer, en utilisant l’infrastructure du D139 , une application apache2/php – en 10 duplicas – qui affiche la page suivante:
Par exemple,
NOTE IMPORTANTE: Seulement le fichier index.php – la version index.php.PV-NFS-CLOUD – doit être stocké dans le volume NFS de la VM en nuage. Les feuilles de styles – css – sont stockées dans l’image personnalisée.
NOTE: L’application de départ est disponible ici.
NOTE: Pour tester l’application localement, ‘docker build‘:
docker build --tag tp03:latest . docker run --rm -p 80:80 tp03:latest
Puis dans un fureteur:
http://localhost
Le conteneur que vous construirez affichera initialement la page suivante:
IMPORTANT – Lors de son utilisation dans le déploiement K8S, ce conteneur doit utiliser un volume NFS pour le fichier index.php.
Ce qui devrait alors produire le résultat suivant:
Cette application doit proposer deux liens – ATTENTION: Pondération importante -, via le menu et son contenu, vers deux autres applications déployées avec K8s
IMPORTANT: Il faut ABSOLUMENT référer à ces applications à partir de leur nom de domaine. Il ne pas coder à la dure l’adresse IP dans le fichier index.php. Il faut utiliser des règles ingress pour faire le lien vers le service – Pondération importante -.
NOTE: Il faut de Nombreuses secondes, avant que ces applications soient téléchargées et fonctionnelles.
Le fichier ‘index.php‘ du site principal doit être stocké et lu à partir d’un Volume persistant – PV – de type NFS hébergé sur un service en nuage tel que Linode, AWS ou Google cloud.
NOTE: Pour des raisons de sécurité, le partage NFS doit-être renseigné en lecture seule (RO).
ATTENTION, Pondération importante
NextCloud est une application qui permet l’accès à des fichiers personnels via une interface Web.
Voici une page exemple:
ATTENTION: Pondération importante pour ce point!
Si les paramètres – variables d’environnement – ont été renseignés correctement, la page d’accueil de l’application sera présentée:
NOTE: Dans le cas d’un message d’erreur indiquant que le domaine n’est pas autorisé,
il faudra alors définir correctement la variable d’environnement suivante:
NEXTCLOUD_TRUSTED_DOMAINS =
INDICE: Utiliser l’adresse du loadbalancer et le nom de domaine
NOTE: Dans le cas de l’erreur suivante:
Internal Server Error The server encountered an internal error and was unable to complete your request. Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report. More details can be found in the server log.
La variable NEXTCLOUD_TRUSTED_DOMAINS n’est probablement pas définie.
ATTENTION – Pour la préservation des données, il faut utiliser un volume PV de type ‘Longhorn‘ d’une taille de 2Go, nommé nextcloud-votre-matricule.
√ tp03-solution-v2022-avec-NFS % k get pv -n tp03 NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE nextcloud-alain 2Gi RWO Retain Bound tp03/nextcloud-alain longhorn-static 18m √ tp03-solution-v2022-avec-NFS % k get pvc -n tp03 NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE nextcloud-alain Bound nextcloud-alain 2Gi RWO longhorn-static 43s
NOTE: Si la valeur de NEXTCLOUD_TRUSTED_DOMAINS n’est pas renseignée correctement lors d’un test, il sera peut-être nécessaire de recréer le volume+PV+PVC dans longhorn 😉.
Si tout va bien, nous obtiendrons l’écran suivant:
Il ne reste qu’à se connecter en utilisant les valeurs renseignée par les secrets du déploiement de Nextcloud.
‘Mattermost est un logiciel et un service de messagerie instantanée libre auto-hébergeable. Il est conçu comme un chat interne pour les organisations et les entreprises, et il est présenté comme une alternative à Slack‘
Voici une page exemple:
Voici la page d’accueil d’une nouvelle installation de Mattermost:
Référence diagnostic
Référence1 – Utilisation sous docker
Référence2 – GitHub
Note: Pour obtenir le 10 points bonus, il faut réaliser avec succès tous les points du défi.
1 – État de départ – avant le déploiement
# État K8s de départ: √ tp03.v2 % kubectl get all NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 2d5h √ tp03.v2 % kubectl get service NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 2d5h √ tp03.v2 % kubectl get pv No resources found √ tp03.v2 % kubectl get pvc No resources found in default namespace.
2 – Déploiement du projet
# Application du manifeste du TP03 √ tp03.v2 % kubectl apply -f tp03.yml persistentvolume/pv-tp03 created persistentvolumeclaim/pvc-nextcloud created deployment.apps/tp03-deployment created service/tp03-service created deployment.apps/mariadb-nextcloud created service/service-mariadb-nextcloud created deployment.apps/nextcloud created service/service-nextcloud created deployment.apps/mattermost created service/service-mattermost created secret/tp03-top-secret created
3 – État après le déploiement
√ tp03.v2 % kubectl get all NAME READY STATUS RESTARTS AGE pod/mariadb-nextcloud-67f4646cd7-9wbdl 1/1 Running 0 3m14s pod/mattermost-8764bf86-p66zd 1/1 Running 0 3m14s pod/nextcloud-7bcfdb6648-zcm7s 1/1 Running 0 3m14s pod/tp03-deployment-7b9d6c98c5-4wr9k 1/1 Running 0 3m14s pod/tp03-deployment-7b9d6c98c5-78nt7 1/1 Running 0 3m14s pod/tp03-deployment-7b9d6c98c5-7f2dw 1/1 Running 0 3m14s pod/tp03-deployment-7b9d6c98c5-blrlh 1/1 Running 0 3m14s pod/tp03-deployment-7b9d6c98c5-bx9k6 1/1 Running 0 3m14s pod/tp03-deployment-7b9d6c98c5-gfkhz 1/1 Running 0 3m14s pod/tp03-deployment-7b9d6c98c5-h5l5h 1/1 Running 0 3m14s pod/tp03-deployment-7b9d6c98c5-jbdv6 1/1 Running 0 3m14s pod/tp03-deployment-7b9d6c98c5-kn6c5 1/1 Running 0 3m14s pod/tp03-deployment-7b9d6c98c5-scm5w 1/1 Running 0 3m14s pod/tp03-deployment-7b9d6c98c5-xx4j7 1/1 Running 0 3m14s pod/tp03-deployment-7b9d6c98c5-zhmxw 1/1 Running 0 3m14s NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/mariadb-nextcloud 1/1 1 1 3m14s deployment.apps/mattermost 1/1 1 1 3m14s deployment.apps/nextcloud 1/1 1 1 3m14s deployment.apps/tp03-deployment 12/12 12 12 3m14s NAME DESIRED CURRENT READY AGE replicaset.apps/mariadb-nextcloud-67f4646cd7 1 1 1 3m14s replicaset.apps/mattermost-8764bf86 1 1 1 3m14s replicaset.apps/nextcloud-7bcfdb6648 1 1 1 3m14s replicaset.apps/tp03-deployment-7b9d6c98c5 12 12 12 3m14s
4 – Contenu du ‘pvc’
$ ls /mnt/nextcloud/ 3rdparty apps core data lib ocs remote.php status.php AUTHORS config cron.php index.html occ ocs-provider resources themes COPYING console.php custom_apps index.php ocm-provider public.php robots.txt version.php $
5 – Contenu du ‘secret’
√ tp03.v2 % kubectl describe secrets tp03-top-secret Name: tp03-top-secret Namespace: default Labels: <none> Annotations: <none> Type: Opaque Data ==== NEXTCLOUD_ADMIN_PASSWORD: 5 bytes NEXTCLOUD_ADMIN_USER: 5 bytes MYSQL_DATABASE: 9 bytes MYSQL_HOST: 25 bytes MYSQL_PASSWORD: 6 bytes MYSQL_USER: 9 bytes
6 – Liste des ‘services’
√ tp03-solution-v2023-avec-NFS % k get service -n tp03 NAME TYPE EXTERNAL-IP PORT(S) AGE service-mariadb-nextcloud ClusterIP <none> 3306/TCP 39s service-mattermost ClusterIP <none> 80/TCP 38s service-nextcloud ClusterIP <none> 80/TCP 39s tp03-service ClusterIP <none> 80/TCP 39s
7 – Liste des règles ingress
√ tp03-solution-v2022-avec-NFS % k get ingress -n tp03 NAME CLASS HOSTS ADDRESS PORTS ingress-tp03 nginx accueil.tp03, mattermost.tp03, nextcloud.tp03 192.168.2.61 80