1. Objectifs
Kustomize est un outil qui offre un moyen sans modèle de personnaliser la configuration des applications, simplifiant ainsi l'utilisation des applications prêtes à l'emploi. Il est disponible en tant qu'utilitaire autonome et intégré à kubectl via kubectl apply -k
, et peut être utilisé comme CLI autonome. Pour en savoir plus, consultez le site kustomize.io.
Dans ce tutoriel, vous allez découvrir certains des concepts fondamentaux de Kustomize et l'utiliser pour gérer les variantes dans les applications et les environnements.
Vous découvrirez comment :
- Utiliser le client de ligne de commande kustomize
- Remplacer les éléments communs
- Corriger des structures YAML plus volumineuses
- Utiliser plusieurs couches de superposition
2. Préparer votre espace de travail
- Ouvrez l'éditeur Cloud Shell à l'adresse suivante :
https://ide.cloud.google.com
- Dans la fenêtre de terminal, créez un répertoire de travail pour ce tutoriel.
mkdir kustomize-lab
- Accédez au répertoire et définissez l'espace de travail IDE
cd kustomize-lab && cloudshell workspace .
3. Utilisation du client de ligne de commande kustomize
L'efficacité de Kustomize réside dans la possibilité de superposer et de modifier les fichiers YAML Kubernetes de base avec des valeurs personnalisées. Pour ce faire, kustomize requiert un fichier de base contenant des instructions indiquant où se trouvent les fichiers et ce qu'ils doivent remplacer. Kustomize fait partie de l'écosystème Kubernetes et peut être exécuté selon différentes méthodes.
Dans cette section, vous allez créer une configuration kustomize de base et traiter les fichiers à l'aide du client de ligne de commande kustomize autonome.
- Pour commencer, vous allez créer un dossier pour stocker vos fichiers de configuration de base
mkdir -p chat-app/base
- Créer un objet Kubernetes
deployment.yaml
simple dans le dossier de base
cat <<EOF > chat-app/base/deployment.yaml
kind: Deployment
apiVersion: apps/v1
metadata:
name: app
spec:
template:
`metadata:`
`name: chat-app`
`spec:`
`containers:`
`- name: chat-app`
`image: chat-app-image`
EOF
- Créer le
kustomization.yaml
de base
Kustomize recherche un fichier appelé kustomization.yaml comme point d'entrée. Ce fichier contient des références aux différents fichiers de base et de remplacement, ainsi que des valeurs de remplacement spécifiques.
Créez un fichier kustomization.yaml
qui référence deployment.yaml
en tant que ressources de base.
cat <<EOF > chat-app/base/kustomization.yaml
bases:
- deployment.yaml
EOF
- Exécutez la commande kustomize sur le dossier de base. Les fichiers YAML de déploiement sont alors générés sans aucune modification, ce qui est normal, car vous n'avez pas encore inclus de variantes.
kustomize build chat-app/base
Ce client autonome peut être associé au client kubectl pour appliquer le résultat directement, comme dans l'exemple suivant. Le résultat de la commande de compilation est alors directement diffusé dans la commande kubectl apply.
(Ne pas exécuter : inclus pour référence uniquement)
kustomize build chat-app/base | kubectl apply -f -
Cette technique est utile si une version spécifique du client Kustomize est nécessaire.
Vous pouvez également exécuter kustomize avec les outils intégrés à kubectl. Comme dans l'exemple suivant.
(Ne pas exécuter : inclus pour référence uniquement)
kubectl apply -k chat-app/base
4. Remplacer les éléments communs
Maintenant que votre espace de travail est configuré et que vous avez vérifié que kustomize fonctionne, il est temps de remplacer certaines valeurs de base.
Les images, les espaces de noms et les étiquettes sont très couramment personnalisés pour chaque application et chaque environnement. Étant donné qu'ils sont fréquemment modifiés, Kustomize vous permet de les déclarer directement dans kustomize.yaml
, ce qui vous évite d'avoir à créer de nombreux correctifs pour ces scénarios courants.
Cette technique est souvent utilisée pour créer une instance spécifique d'un modèle. Un ensemble de ressources de base peut désormais être utilisé pour plusieurs implémentations en modifiant simplement le nom et son espace de noms.
Dans cet exemple, vous allez ajouter un espace de noms, un préfixe de nom et des étiquettes à votre kustomization.yaml
.
- Mettez à jour le fichier
kustomization.yaml
pour inclure des étiquettes et des espaces de noms communs.
Copiez et exécutez les commandes suivantes dans votre terminal
cat <<EOF > chat-app/base/kustomization.yaml
bases:
- deployment.yaml
namespace: my-namespace
nameprefix: my-
commonLabels:
app: my-app
EOF
- Exécuter la commande de compilation
L'exécution de la compilation à ce stade montre que le fichier YAML obtenu contient désormais l'espace de noms, les étiquettes et les noms préfixés dans les définitions de service et de déploiement.
kustomize build chat-app/base
Notez que le résultat contient des étiquettes et des espaces de noms qui ne figurent pas dans le fichier YAML de déploiement. Notez également que le nom chat-app
a été remplacé par my-chat-app
.
(Résultat ne pas copier)
kind: Deployment
metadata:
labels:
`app: my-app`
name: my-chat-app
namespace: my-namespace
5. Appliquer des correctifs aux structures YAML plus volumineuses
Kustomize offre également la possibilité d'appliquer des correctifs qui se superposent aux ressources de base. Cette technique est souvent utilisée pour garantir des variations entre les applications et les environnements.
Au cours de cette étape, vous allez créer des variantes d'environnement pour une seule application utilisant les mêmes ressources de base.
- Commencez par créer des dossiers pour les différents environnements
mkdir -p chat-app/dev
mkdir -p chat-app/prod
- Écrivez le correctif de l'étape à l'aide de la commande suivante :
cat <<EOF > chat-app/dev/deployment.yaml
kind: Deployment
apiVersion: apps/v1
metadata:
name: app
spec:
template:
`spec:`
`containers:`
`- name: chat-app`
`env:`
`- name: ENVIRONMENT`
`value: dev`
EOF
- Écrivez le correctif prod à l'aide de la commande suivante :
cat <<EOF > chat-app/prod/deployment.yaml
kind: Deployment
apiVersion: apps/v1
metadata:
name: app
spec:
template:
`spec:`
`containers:`
`- name: chat-app`
`env:`
`- name: ENVIRONMENT`
`value: prod`
EOF
Notez que les correctifs ci-dessus ne contiennent pas le nom de l'image de conteneur. Cette valeur est fournie dans le fichier base/deployment.yaml que vous avez créé à l'étape précédente. Ces correctifs contiennent toutefois des variables d'environnement uniques pour le développement et la production.
- Implémentez les fichiers YAML kustomize pour le répertoire de base
Réécrivez le fichier kustomization.yaml de base, et supprimez l'espace de noms et le préfixe du nom, car il ne s'agit que de la configuration de base, sans aucune variante. Ces champs seront déplacés vers les fichiers d'environnement dans quelques instants.
cat <<EOF > chat-app/base/kustomization.yaml
bases:
- deployment.yaml
commonLabels:
app: chat-app
EOF
- Implémenter les fichiers YAML kustomize pour le répertoire dev
Implémentez maintenant les variantes pour "dev" et "prod" en exécutant les commandes suivantes dans votre terminal.
cat <<EOF > chat-app/dev/kustomization.yaml
bases:
- ../base
namespace: dev
nameprefix: dev-
commonLabels:
env: dev
patches:
- deployment.yaml
EOF
Notez l'ajout de la section patches
: du fichier. Cela indique que kustomize doit superposer ces fichiers aux ressources de base.
- Implémentez les fichiers YAML kustomize pour le répertoire prod
cat <<EOF > chat-app/prod/kustomization.yaml
bases:
- ../base
namespace: prod
nameprefix: prod-
commonLabels:
env: prod
patches:
- deployment.yaml
EOF
- Exécutez kustomize pour fusionner les fichiers.
Une fois les fichiers de base et d'environnement créés, vous pouvez exécuter le processus kustomize pour corriger les fichiers de base.
Exécutez la commande suivante pour que "dev" affiche le résultat fusionné.
kustomize build chat-app/dev
Notez que le résultat contient des résultats fusionnés tels que les étiquettes des configurations de base et de développement, le nom de l'image de conteneur de la base et la variable d'environnement des dossiers de développement.
6. Utilisation de plusieurs calques de superpositions
De nombreuses organisations disposent d'une équipe qui soutient les équipes chargées des applications et qui gère la plate-forme. Ces équipes voudront souvent inclure des détails spécifiques à inclure dans toutes les applications de tous les environnements, par exemple un agent Logging.
Dans cet exemple, vous allez créer un dossier et des ressources shared-kustomize
qui seront inclus par toutes les applications, quel que soit l'environnement dans lequel elles sont déployées.
- Créer le dossier shared-kustomize
mkdir shared-kustomize
- Créer un élément
deployment.yaml
simple dans le dossier partagé
cat <<EOF > shared-kustomize/deployment.yaml
kind: Deployment
apiVersion: apps/v1
metadata:
name: app
spec:
template:
`spec:`
`containers:`
`- name: logging-agent`
`image: logging-agent-image`
EOF
- Créer un fichier kustomization.yaml dans le dossier partagé
cat <<EOF > shared-kustomize/kustomization.yaml
bases:
- deployment.yaml
EOF
- Référencer le dossier shared-kustomize de votre application
Comme vous souhaitez que le dossier shared-kustomize
soit la base de toutes vos applications, vous devez mettre à jour votre fichier chat-app/base/kustomization.yaml
pour qu'il utilise shared-kustomize
comme base. Ensuite, appliquez un correctif à son propre fichier deployment.yaml. Les dossiers d’environnement seront ensuite
correctifs à nouveau en plus de cela.
Copiez et exécutez les commandes suivantes dans votre terminal
cat <<EOF > chat-app/base/kustomization.yaml
bases:
- ../../shared-kustomize
commonLabels:
app: chat-app
patches:
- deployment.yaml
EOF
- Exécutez kustomize et affichez les résultats fusionnés pour dev.
kustomize build chat-app/dev
Notez que le résultat contient des résultats fusionnés à partir de la base de l'application, de l'environnement de l'application et des dossiers shared-kustomize
. Plus précisément, la section "Conteneurs" vous permet de voir les valeurs des trois emplacements.
(ne pas copier la sortie)
<pre>
`containers:`
`- env:`
`- name: ENVIRONMENT`
`value: dev`
`name: chat-app`
`- image: image`
`name: app`
`- image: logging-agent-image`
`name: logging-agent`
</pre>