kustomize vous permet de personnaliser les fichiers YAML bruts et sans modèle à plusieurs fins, laissant le YAML original intact et utilisable tel quel.
kustomize cible Kubernetes; Il comprend et peut corriger les objets API de style Kubernetes. C'est comme make , en ce qu'il fait, il est déclaré dans un fichier, et c'est comme sed , en ce qu'il émet un texte modifié.
Cet outil est parrainé par SIG-CLI (KEP).
Pour trouver la version Kustomze intégrée dans les versions récentes de Kubectl, exécutez kubectl version :
> kubectl version --client
Client Version: v1.31.0
Kustomize Version: v5.4.2Le flux de construction Kustomze à v2.0.3 a été ajouté à Kubectl v1.14. Le flux Kustomze dans Kubectl est resté figé à V2.0.3 jusqu'à Kubectl v1.21, qui l'a mis à jour vers la V4.0.5. Il sera mis à jour régulièrement à l'avenir, et ces mises à jour seront reflétées dans les notes de version de Kubernetes.
| Version kubectl | Version Kustomze |
|---|---|
| <v1.14 | n / A |
| v1.14-v1.20 | v2.0.3 |
| v1.21 | V4.0.5 |
| v1.22 | V4.2.0 |
| v1.23 | V4.4.1 |
| v1.24 | V4.5.4 |
| v1.25 | V4.5.7 |
| v1.26 | V4.5.7 |
| v1.27 | v5.0.1 |
Pour des exemples et des guides d'utilisation de l'intégration Kubectl, veuillez consulter la documentation de Kubernetes.
Dans certains répertoires contenant vos fichiers de ressources YAML (déploiements, services, configmaps, etc.), créez un fichier Kustomation.
Ce fichier doit déclarer ces ressources et toute personnalisation pour s'appliquer à eux, par exemple, ajoutez une étiquette commune .
base: kustomization + resources
kustomization.yaml deployment.yaml service.yaml
+---------------------------------------------+ +-------------------------------------------------------+ +-----------------------------------+
| apiVersion: kustomize.config.k8s.io/v1beta1 | | apiVersion: apps/v1 | | apiVersion: v1 |
| kind: Kustomization | | kind: Deployment | | kind: Service |
| commonLabels: | | metadata: | | metadata: |
| app: myapp | | name: myapp | | name: myapp |
| resources: | | spec: | | spec: |
| - deployment.yaml | | selector: | | selector: |
| - service.yaml | | matchLabels: | | app: myapp |
| configMapGenerator: | | app: myapp | | ports: |
| - name: myapp-map | | template: | | - port: 6060 |
| literals: | | metadata: | | targetPort: 6060 |
| - KEY=value | | labels: | +-----------------------------------+
+---------------------------------------------+ | app: myapp |
| spec: |
| containers: |
| - name: myapp |
| image: myapp |
| resources: |
| limits: |
| memory: "128Mi" |
| cpu: "500m" |
| ports: |
| - containerPort: 6060 |
+-------------------------------------------------------+
Structure de fichiers:
~/someApp ├── deployment.yaml ├── kustomization.yaml └── service.yaml
Les ressources de ce répertoire pourraient être une fourche de la configuration de quelqu'un d'autre. Si c'est le cas, vous pouvez facilement reprendre le matériel source pour capturer des améliorations, car vous ne modifiez pas directement les ressources.
Générez Yaml personnalisé avec:
kustomize build ~/someApp
Le YAML peut être directement appliqué à un cluster:
kustomize build ~/someApp | kubectl apply -f -
Gérer les variantes traditionnelles d'une configuration - comme le développement , la stadification et la production - en utilisant des superpositions qui modifient une base commune.
overlay: kustomization + patches
kustomization.yaml replica_count.yaml cpu_count.yaml
+-----------------------------------------------+ +-------------------------------+ +------------------------------------------+
| apiVersion: kustomize.config.k8s.io/v1beta1 | | apiVersion: apps/v1 | | apiVersion: apps/v1 |
| kind: Kustomization | | kind: Deployment | | kind: Deployment |
| commonLabels: | | metadata: | | metadata: |
| variant: prod | | name: myapp | | name: myapp |
| resources: | | spec: | | spec: |
| - ../../base | | replicas: 80 | | template: |
| patches: | +-------------------------------+ | spec: |
| - path: replica_count.yaml | | containers: |
| - path: cpu_count.yaml | | - name: myapp |
+-----------------------------------------------+ | resources: |
| limits: |
| memory: "128Mi" |
| cpu: "7000m" |
+------------------------------------------+
Structure de fichiers:
~/someApp ├── base │ ├── deployment.yaml │ ├── kustomization.yaml │ └── service.yaml └── overlays ├── development │ ├── cpu_count.yaml │ ├── kustomization.yaml │ └── replica_count.yaml └── production ├── cpu_count.yaml ├── kustomization.yaml └── replica_count.yaml
Prenez le travail de l'étape (1) ci-dessus, déplacez-le dans un sous-répertoire someApp appelé base , puis placez les superpositions dans un répertoire de frères.
Une superposition n'est qu'une autre personnalisation, se référant à la base, et se référant à des correctifs pour s'appliquer à cette base.
Cet arrangement facilite la gestion de votre configuration avec git . La base pourrait avoir des fichiers d'un référentiel en amont géré par quelqu'un d'autre. Les superpositions pourraient être dans un référentiel que vous possédez. L'organisation des clones Repo en tant que frères et sœurs sur le disque évite le besoin de sous-modules Git (bien que cela fonctionne bien, si vous êtes un fan de sous-module).
Générer du yaml avec
kustomize build ~ /someApp/overlays/productionLe YAML peut être directement appliqué à un cluster:
kustomize build ~ /someApp/overlays/production | kubectl apply -f -
La participation à la communauté de Kubernetes est régie par le code de conduite de Kubernetes.