Kustomize
Kustomize est un outil intégré à kubectl pour du déploiement multi-environnements et la gestion de configuration.
Voir la documentation officielle de Kustomize et la documentation de référence
Kustomize Example Voting App
Un déploiement d'application avec Kustomize nécessite:
- Une base avec la config YAML (Deployment, Services, etc.) et un
kustomization.ymllistant les ressources et options souhaitées - Un ou plusieurs overrides (typiquement par environnement, mais pas forcément)
Pour Kustomizer Example Voting App :
- Copier
resources/kustomize/base-kustomization.ymldansbase/kustomization.yml. Ce fichier référence toutes les ressources de l'Example Voting App. - Utiliser l'un des dossiers
resources/kustomize/devouresources/kustomize/prodaveckubectl. Chacun référence sa base via un chemin relatif, ex :resources: [ "../../../base" ]
#
# Attention au -k
#
# Comme kubectl apply -f mais va lire depuis dev et toutes les ressources référencées (y compris la base)
kubectl apply -n <YOU> -k resources/kustomize/dev
Observer le résultat selon le contenu des fichiers kustomization.yml de dev et base, en particulier commonLabels
Définir le namespace
Créer un namespace avec votre nom préfixé par -kustomize, ex : YOU-kustomize.
Mettre à jour le kustomization.yml de dev pour définir le namespace YOU-kustomize et appliquer sans flag -n xxx, ex :
kubectl apply -k resources/kustomize/dev
Que sont devenues les ressources dans l'ancien namespace ?
Patches et générateurs ConfigMap/Secret
Utiliser un ConfigMap generator pour créer une ConfigMap à partir du fichier postgresql.conf
Utiliser un Secret generator pour créer un Secret à partir du fichier postgres-secret.properties
- Il faut des options supplémentaires pour considérer ce fichier comme des variables d'environnement
Surcharger le Deployment avec un patch pour s'assurer que les valeurs du Secret et de la ConfigMap sont utilisées à la place de celles définies dans la base.
- Utiliser
db-deployment-patch.ymlet mettre à jourkustomization.yml
Adapter une autre Kustomization
Reproduire les changements de la Kustomization dev dans la Kustomization prod et déployer les deux dans le même namespace.