Skip to content

Commit

Permalink
ajout de compose2manifests_functions.md
Browse files Browse the repository at this point in the history
  • Loading branch information
natman committed Oct 28, 2024
1 parent 4919656 commit 8748d5b
Show file tree
Hide file tree
Showing 2 changed files with 141 additions and 3 deletions.
6 changes: 3 additions & 3 deletions compose2manifests.sh
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
#!/bin/bash
# 24/10/21 NBT
# 24/10/21 blanchet<at>abes.fr
# Script de conversion d'un fichier docker-compose.yaml en manifests k8s
# Génère 3 types de manifest: deploy, services, configMap
# Nécessite les paquets jq, yq, moreutils, docker-compose, kompose
# Génère pour chacun des services ces manifest: deploy, services, configMap, secret, persistentVolumeClaim
# Nécessite les paquets jq, yq, jc, moreutils, docker-compose, kompose
# Usage:
# ./compose2manifests.sh [ prod || test || dev || local ] [ appli_name ] [default || '' || secret || env_file | help] [kompose] [helm]\n"

Expand Down
138 changes: 138 additions & 0 deletions documentation/compose2manifests_functions.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,138 @@
## compose2manifests.sh

`\> compose2manifests.sh environnement appli env_file kompose`

### environnement appli

- vérification et si besoin installation des pré-requis : jq, yq, jc,
docker-compose, kompose, oc, kubectl

- détermination du domaine

- recherche automatique de l'hôte Docker de l'application définie ou
saisie manuelle des hôtes Docker

- vérification de la connectivité ssh aux hôte Docker par clé, le cas
échéant génération et installation d'une clé publique.

- téléchargement du « docker-compose.yml » par Github ou depuis l'hôte
Docker

- téléchargement du « .env » depuis l'hôte Docker

- personnalisation de la variable .env

- remplacement du nom du service par la directive « container_name »

### env_file

#### Transformation des variables en env_file

- L'objectif de la transformation de la directive `environment` en `env_file` est de faciliter la prise en charge de `Kompose` pour une conversion de type `secretMapKeyRef` et `configMapKeyRef`. Cet objet `env` défini dans l'api `deployment` ne doit pas contenir de caractère `_` et être en minuscule.

- analyse les variables du fichier .env pour distinguer les variables
sensibles qui seront ensuite converties par kompose en objet k8s
« secret », des variables non sensibles qui seront transformées en
objet « configMap ».

### kompose

#### Traitement des yaml générés

##### Correction des bugs kompose

- `patch_RWO ()`

Kompose transforme la directive docker ReadOnly d'un volume en
volume ReadOnlyMany qui n'est pas supporté par la plupart des
drivers CSI. Le patch transforme ReadOnlyMany en ReadWriteOnly

- `patch_secret ()`

Lors de la création d'un secret, le caractère « \\n » est inséré en
base64, le patch le corrige

- `patch_secretKeys ()`

les références à un secretKey doivent être faite en minuscule et sans caractère `.` ou ``. L'importation depuis Docker peut
faire référence à des noms en majuscule ou à des combinaisons de caractères non acceptés par les RFC adoptées par k8s.

- `patch_labels ()`

Contourne la limitation à 64 caractères des labels et des noms de volumes

##### Réseau

- `patch_expose_auto ()`

Analyse les ports déclarés dans le docker-compose et les compare à ceux actifs sur le Docker host. Les ports existants et non déclarés dans le docker-compose.yml sont ajoutés dans leurs services respectifs.

- `patch_expose ()`

permet de rajouter manuellement des ports aux services existants.

- `patch_networkPolicy ()`

Traite l'ingress pour rendre l'appli disponible depuis l'extérieur

##### Stockage

- `create_pv2 ()`

Ce patch cherche les volumes NFS montés sur l'hôte docker source et
crée un persistent Volume de type NFS plutôt que csi, avec les mêmes
caractéristiques.

- `create_pvc_nfs ()`

Transforme le fichier pvc convertit par kompose en claim du
persistent volume généré avec create_pv2 ()

- `create_sc ()`

Certains containers Docker accèdent au même volume. Beaucoup de
drivers csi ne supportant que le mode ReadWriteOnly, ce patch
propose d'installer le drivers officiel nfs.csi.k8s.io avec la
capacité RWX et de convertir ces volumes en pvc compatibles.

##### Fichiers

- `patch_configmaps ()`

Transforme les fichiers de configuration de type volume en
configMaps de quelques ko à la place d'un pvc de 100Mo. Rejoint les bonnes pratiques k8s

- `create_configmaps ()`

Crée des objets configMaps pour les volumes bind qui sont des
fichiers et non des répertoires. Un montage sshfs est utilisé sur l'hôte docker pour utiliser facilement la commande « oc create cm ». On peut ainsi créer des configmaps d'objets binaires.

#### Déploiement de l'application

- Création du projet.

- Génération d'une règle Security Context Constraint pour le
ServiceAccount par défaut. Sans cela les conteneurs root ne
démarrent pas sous OKD.

- Création du secret Docker pour récupérer des images sur DockerHub sans restriction.

#### Copie des données persistantes

- `select_nfs_mount_point ()`

Tri des pvc NFS et claim pour éviter par la suite la copie inutile
des partages NFS.

- `copy_to_okd ()`

Cherche sur l'hôte Docker la taille des répertoires des volumes
persistants pour les inclure dans les pvc générés par kompose (par défaut 100Mio). Copie au travers d'un copier-coller et volume après volume les données via un container de debug qui se connecte en SSH.

#### Actions finales

- Redémarrage des pods

- Exposition des services pour créer une route

- Génération de l'URL d'accès à l'application.

0 comments on commit 8748d5b

Please sign in to comment.