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.yml listant 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.yml dans base/kustomization.yml. Ce fichier référence toutes les ressources de l'Example Voting App.
  • Utiliser l'un des dossiers resources/kustomize/dev ou resources/kustomize/prod avec kubectl. 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.yml et mettre à jour kustomization.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.