Note de traduction.: Cet article a Ă©tĂ© Ă©crit par Scott Lowe, un ingĂ©nieur expĂ©rimentĂ© en IT, qui est l'auteur/co-auteur de sept livres imprimĂ©s (principalement sur VMware vSphere). Il travaille actuellement pour sa filiale VMware â Heptio (acquise en 2016), spĂ©cialisĂ©e dans le cloud computing et Kubernetes. Le texte sert d'introduction concise et facile Ă comprendre Ă la gestion des configurations pour Kubernetes Ă l'aide de la technologie , rĂ©cemment intĂ©grĂ©e Ă K8s.

Kustomize est un outil qui permet aux utilisateurs « d'adapter des fichiers YAML simples et sans modĂšles Ă diverses fins, tout en laissant le YAML original intouchĂ© et rĂ©utilisable » (description tirĂ©e directement de ). Kustomize peut ĂȘtre exĂ©cutĂ© directement ou, Ă partir de Kubernetes 1.14, utilisĂ© kubectl -k pour accĂ©der Ă ses fonctionnalitĂ©s (bien qu'Ă l'Ă©tat actuel de Kubernetes 1.15, un binaire distinct soit plus rĂ©cent que les fonctionnalitĂ©s intĂ©grĂ©es Ă kubectl). (Note de traduction.: Avec la rĂ©cente publication kustomize , il est Ă©galement intĂ©grĂ© dans l'outil kubeadm.) Dans cette publication, je souhaite familiariser les lecteurs avec les bases de kustomize.
Dans sa forme/application la plus simple, kustomize est simplement un ensemble de ressources (fichiers YAML dĂ©finissant des objets Kubernetes : Deployments, Services, etc.) plus une liste d'instructions sur les modifications Ă apporter Ă ces ressources. De la mĂȘme maniĂšre que make utilise un ensemble d'instructions contenues dans Makefile, et Docker construit un conteneur basĂ© sur les instructions de Dockerfile, kustomize utilise kustomization.yaml pour stocker les directives sur les modifications que l'utilisateur souhaite apporter Ă l'ensemble de ressources.
Voici un exemple de fichier kustomization.yaml:
resources:
- deployment.yaml
- service.yaml
namePrefix: dev-
namespace: development
commonLabels:
environment: development Je ne vais pas essayer de parler de tous les champs possibles dans le fichier kustomization.yaml (c'est bien expliqué ), mais je donnerai une brÚve explication d'un exemple spécifique :
- Champ
resourcesindique quels (ressources) seront modifiés par kustomize. Dans ce cas, il recherchera les ressources dans les fichiersdeployment.yamletservice.yamldans son répertoire (il est possible d'indiquer des chemins absolus ou relatifs). - Champ
namePrefixindique Ă kustomize d'ajouter un prĂ©fixe spĂ©cifique (dans ce cas âdev-) Ă l'attributnomde toutes les ressources dĂ©finies dans le champresources. Ainsi, si dans le Deployment il y anomavec la valeurnginx-deployment, kustomize le transformera endev-nginx-deployment. - Champ
namespaceindique à kustomize d'ajouter un espace de noms donné à toutes les ressources. Dans ce cas, Deployment et Service seront placés dans l'espace de nomsdéveloppement. - Enfin, le champ
commonLabelscontient un ensemble d'étiquettes qui seront ajoutées à toutes les ressources. Dans notre exemple, kustomize attribuera une étiquette aux ressources avec le nomenvironmentet la valeurdéveloppement.
Si l'utilisateur exécute kustomize build . dans le répertoire contenant le fichier kustomization.yaml et les ressources nécessaires (c'est-à -dire les fichiers deployment.yaml et service.yaml), il obtiendra en sortie le texte avec les modifications spécifiées dans kustomization.yaml.

Note de traduction.: Illustration de la documentation du projet sur l'utilisation "simple" de kustomize
La sortie peut ĂȘtre redirigĂ©e, si nĂ©cessaire pour enregistrer les modifications :
kustomize build . > custom-config.yamlLes rĂ©sultats sont dĂ©terministes (avec les mĂȘmes donnĂ©es en entrĂ©e, les mĂȘmes rĂ©sultats seront obtenus en sortie), il n'est donc pas nĂ©cessaire de sauvegarder le rĂ©sultat dans un fichier. Au lieu de cela, il peut ĂȘtre immĂ©diatement passĂ© Ă une autre commande :
kustomize build . | kubectl apply -f - L'accĂšs aux fonctionnalitĂ©s de kustomize peut Ă©galement ĂȘtre obtenu via kubectl -k (Ă partir de la version 1.14 de Kubernetes). Cependant, gardez Ă l'esprit qu'un package kustomize autonome se met Ă jour plus rapidement que celui intĂ©grĂ© dans kubectl (en tout cas, c'est ce qui se passe avec la version 1.15 de Kubernetes).
Les lecteurs pourraient se demander : "Pourquoi toutes ces complexités, si l'on peut éditer les fichiers directement ?" Excellente question. Dans notre exemple, il est effectivement est possible possible de modifier les fichiers deployment.yaml et service.yaml directement, mais que faire s'ils sont un fork d'un projet ? Modifier les fichiers directement complique (si ce n'est pas impossible) le rebase du fork lorsque des modifications sont apportées à la source. L'utilisation de kustomize permet de centraliser ces modifications dans un fichier kustomization.yaml, laissant les fichiers originaux intacts et facilitant ainsi, si nécessaire, le rebase des fichiers sources.
Les avantages de kustomize deviennent Ă©vidents dans des cas d'utilisation plus complexes. Dans l'exemple ci-dessus, kustomization.yaml les ressources se trouvent dans le mĂȘme rĂ©pertoire. Cependant, kustomize supporte des scĂ©narios d'utilisation oĂč il existe une configuration de base et de nombreuses variantes de celle-ci, Ă©galement connues sous le nom de la nouvelle commande. Par exemple, l'utilisateur a souhaitĂ© prendre le Deployment et le Service pour nginx, que j'ai utilisĂ©s comme exemple, et crĂ©er des versions (ou variantes) de dĂ©veloppement, de staging et de production de ces fichiers. Pour cela, il lui faudra les overlays mentionnĂ©s ci-dessus et les ressources de base.
Pour illustrer l'idée des overlays et des ressources de base (base resources), supposons que les répertoires aient la structure suivante :
- base
- deployment.yaml
- service.yaml
- kustomization.yaml
- overlays
- dev
- kustomization.yaml
- staging
- kustomization.yaml
- prod
- kustomization.yaml Dans le fichier base/kustomization.yaml les utilisateurs utilisent le champ resources déclarent simplement les ressources que doit inclure kustomize.
Dans chacun des fichiers overlays/{dev,staging,prod}/kustomization.yaml les utilisateurs font référence à la configuration de base dans le champ resources, puis spécifient les modifications concrÚtes pour cet environnement. Par exemple, le fichier overlays/dev/kustomization.yaml pourrait ressembler à l'exemple donné précédemment :
resources:
- ../../base
namePrefix: dev-
namespace: development
commonLabels:
environment: development Le fichier overlays/prod/kustomization.yaml pourrait ĂȘtre complĂštement diffĂ©rent :
resources:
- ../../base
namePrefix: prod-
namespace: production
commonLabels:
environment: production
sre-team: blue Lorsque l'utilisateur exĂ©cutera kustomize build . dans le rĂ©pertoire overlays/dev, kustomize gĂ©nĂ©rera une variante development. Si toutefois on exĂ©cute kustomize build . dans le rĂ©pertoire overlays/prod â cela produira une variante production. Et tout cela â sans apporter de modifications aux fichiers (base) et tout cela â de maniĂšre dĂ©clarative et dĂ©terministe. La configuration de base et les rĂ©pertoires d'overlays peuvent ĂȘtre directement engagĂ©s dans le systĂšme de contrĂŽle de version, sachant qu'Ă partir de ces fichiers, on peut reproduire la configuration souhaitĂ©e Ă tout moment.

Note de traduction.: Illustration de la documentation du projet sur l'utilisation des overlays dans kustomize
Kustomize sait beaucoup faire plus que ce qui est expliqué dans cet article. Néanmoins, j'espÚre qu'il servira de bonne introduction.
Ressources supplémentaires
Il existe de nombreux bons articles et publications sur kustomize. Voici quelques-uns que j'ai trouvés particuliÚrement utiles :
- ;
- ;
- ;
- .
Note de traduction.: Un bloc de liens publié comme recommandé sur le site de l'outil, suivi d'une collection de vidéos des derniÚres présentations sur kustomize. Si vous avez des questions ou des suggestions pour améliorer ce matériel, je suis toujours ouvert aux retours. Vous pouvez me contacter sur le
canal Slack Kubernetes ou sur Cinq principaux enseignements du Helm Summit 2019 Ă Amsterdam
P.S. de l'auteur
Lisez aussi dans notre blog :
- «»;
- «»;
- «»;
- «».
Source : habr.com
