1. Objectifs
Kustomize est un outil qui permet de personnaliser la configuration des applications sans utiliser de modèle, ce qui simplifie l'utilisation des applications prêtes à l'emploi. Il est disponible en tant qu'utilitaire autonome et est intégré à kubectl via kubectl apply -k. Il peut également être utilisé en tant que CLI autonome. Pour en savoir plus, consultez kustomize.io.
Dans ce tutoriel, vous allez découvrir certains des concepts de base de Kustomize et l'utiliser pour gérer les variations dans les applications et les environnements.
Vous découvrirez comment :
- Utiliser le client de ligne de commande kustomize
- Remplacer les éléments communs
- Corriger les structures YAML plus grandes
- Utiliser plusieurs calques de superposition
2. Préparer votre espace de travail
- Ouvrez l'éditeur Cloud Shell en accédant à l'URL 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 de l'IDE
cd kustomize-lab && cloudshell workspace .
3. Utiliser le client de ligne de commande kustomize
La puissance de Kustomize réside dans sa capacité à superposer et à modifier les fichiers YAML Kubernetes de base avec des valeurs personnalisées. Pour ce faire, kustomize nécessite un fichier de base contenant des instructions sur l'emplacement des fichiers et les éléments à remplacer. Kustomize est inclus dans l'écosystème Kubernetes et peut être exécuté de différentes manières.
Dans cette section, vous allez créer une configuration kustomize de base et traiter les fichiers avec le 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éez un fichier
deployment.yamlKubernetes 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.yamlde 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 qu'à des valeurs de remplacement spécifiques.
Créez un fichier kustomization.yaml qui fait 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. Cette opération génère les fichiers YAML de déploiement sans aucune modification, ce qui est normal puisque vous n'avez pas encore inclus de variantes.
kustomize build chat-app/base
Ce client autonome peut être combiné au client kubectl pour appliquer directement le résultat, comme dans l'exemple suivant. Cela permet de diffuser le résultat de la commande de compilation directement 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 requise.
Vous pouvez également exécuter kustomize avec l'outil intégré à kubectl. comme dans l'exemple suivant.
(Ne pas exécuter : inclus pour référence uniquement)
kubectl apply -k chat-app/base
4. Remplacer des é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 des valeurs de base.
Les images, les espaces de noms et les libellés sont très souvent personnalisés pour chaque application et environnement. Comme ils sont souvent modifiés, Kustomize vous permet de les déclarer directement dans kustomize.yaml, ce qui élimine la nécessité de 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 et un préfixe de nom, et ajouter des libellés à votre kustomization.yaml.
- Mettez à jour le fichier
kustomization.yamlpour inclure les libellés et les espaces de noms courants.
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 résultant contient désormais l'espace de noms, les libellés 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 libellés et des espaces de noms qui ne figurent pas dans le fichier YAML de déploiement. Notez également que le nom est passé de chat-app à 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 à des structures YAML plus grandes
Kustomize permet également d'appliquer des correctifs qui recouvrent les ressources de base. Cette technique est souvent utilisée pour fournir de la variabilité entre les applications et les environnements.
Dans cette étape, vous allez créer des variantes d'environnement pour une seule application qui utilise 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 avec 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 maintenant le correctif de production avec 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. Toutefois, ces correctifs contiennent des variables d'environnement uniques pour le développement et la production.
- Implémenter les fichiers YAML kustomize pour le répertoire de base
Réécrivez le fichier kustomization.yaml de base, supprimez l'espace de noms et le préfixe du nom, car il s'agit simplement de la configuration de base sans variante. Ces champs seront déplacés vers les fichiers d'environnement dans un instant.
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 de développement
Implémentez maintenant les variantes pour le développement et la production 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émenter 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écuter 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 le développement afin d'afficher le résultat fusionné.
kustomize build chat-app/dev
Notez que le résultat contient des résultats fusionnés tels que les libellés des configurations de base et de développement, ainsi que le nom de l'image de conteneur des dossiers de base et la variable d'environnement des dossiers de développement.
6. Utiliser plusieurs calques de superposition
De nombreuses organisations disposent d'une équipe qui aide les équipes chargées des applications et gère la plate-forme. Ces équipes souhaitent souvent inclure des détails spécifiques à intégrer dans toutes les applications, dans tous les environnements, comme un agent de journalisation.
Dans cet exemple, vous allez créer un dossier shared-kustomize et des ressources 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éez un
deployment.yamlsimple 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éez un fichier kustomization.yaml dans le dossier partagé.
cat <<EOF > shared-kustomize/kustomization.yaml
bases:
- deployment.yaml
EOF
- Référencez le dossier shared-kustomize depuis votre application.
Étant donné que vous souhaitez que le dossier shared-kustomize soit la base de toutes vos applications, vous devrez mettre à jour votre chat-app/base/kustomization.yaml pour utiliser shared-kustomize comme base. Il applique ensuite son propre fichier deployment.yaml. Les dossiers d'environnement seront ensuite à nouveau corrigés.
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écuter kustomize et afficher les résultats fusionnés pour le développement
kustomize build chat-app/dev
Notez que le résultat contient les résultats fusionnés des dossiers de base de l'application, de l'environnement de l'application et shared-kustomize. Plus précisément, vous pouvez voir dans la section "Conteneurs" les valeurs des trois emplacements.
(résultat, ne pas copier)
<pre>
`containers:`
`- env:`
`- name: ENVIRONMENT`
`value: dev`
`name: chat-app`
`- image: image`
`name: app`
`- image: logging-agent-image`
`name: logging-agent`
</pre>