Conditionnement d'applications en vue de leur réutilisation dans plusieurs environnements avec Kustomize
Dans le cadre d'une application cloud-native à douze facteurs, vous souhaitez maintenir la parité dev-to-prod
en mettant en place un pipeline de développement et
de livraison continus qui utilise une base de code source commune, contrôlée par version. Dans vos référentiels de base de code, vous stockez vos fichiers manifestes de configuration des ressources Kubernetes, souvent au format YAML. Vous pouvez
utiliser le projet Kubernetes Kustomize pour normaliser et personnaliser vos déploiements dans plusieurs environnements.
Par exemple, vous pouvez configurer un fichier YAML de base kustomization
pour déclarer les objets Kubernetes tels que les déploiements et les PVC qui sont partagés dans vos environnements de développement, de test et de production.
Ensuite, vous pouvez mettre en place des fichiers YAML kustomization
séparés qui ont des configurations personnalisées pour chaque environnement, par exemple plus de répliques en production qu'en test. Ces fichiers YAML personnalisés
peuvent ensuite se superposer au fichier YAML de base partagé, de sorte que vous pouvez gérer des environnements qui sont pour la plupart identiques, à l'exception de quelques différences de configuration superposées que vous contrôlez à la
source. Pour plus d'informations sur Kustomize, comme un glossaire et une FAQ, consultez la documentation de Kustomize.
Avant de commencer :
- Assurez-vous que votre version
kubectl
correspond à la version de votre cluster. - Connectez-vous à votre compte. Le cas échéant, ciblez le groupe de ressources approprié. Définissez le contexte de votre cluster.
Pour configurer des fichiers de configuration avec Kustomize :
-
- Pour macOS, vous pouvez utiliser le gestionnaire de package
brew
.brew install kustomize
- Pour Windows, vous pouvez utiliser le gestionnaire de package
chocolatey
.choco install kustomize
- Pour macOS, vous pouvez utiliser le gestionnaire de package
-
Créez un répertoire pour votre application dans un système de contrôle de version, tel que Git.
git init ~/<my_app>
-
Créez la structure de votre repo pour votre répertoire
kustomize
base
répertoire,overlay
et les répertoires d'environnement tels que staging et production. Dans les étapes suivantes, vous configurez ces référentiels pour une utilisation aveckustomize
:mkdir -p ~/<my_app>/base && mkdir -p ~/<my_app>/overlay && mkdir -p ~/<my_app>/overlay/staging && mkdir -p ~/<my_app>/overlay/prod
Exemple de structure de référentiels
. ├── base └── overlay ├── prod └── staging
-
Configurez le référentiel
base
.-
Accédez au référentiel base.
cd ~/<my_app>/base
-
Créez un ensemble initial de fichiers YAML de configuration Kubernetes pour votre déploiement d'application. Vous pourriez utiliser le
wasliberty
Exemple YAML pour créer un déploiement, un service, une carte de configuration et une revendication de volume persistant. -
Créez un fichier
kustomization
qui spécifie la configuration de base à appliquer dans tous les environnements. Le fichierkustomization
doit inclure la liste de fichiers YAML de configuration resource Kubernetes qui sont stockés dans le même référentielbase
. Dans le fichierkustomization
, vous pouvez également ajouter des configurations qui s'appliquent à tous les fichiers YAML de ressource dans le référentiel de base, par exemple, un préfixe ou un suffixe qui est ajouté à tous les noms de ressource, un libellé, l'espace de noms existant dans lequel les ressources sont créées, des secrets, des objets ConfigMap, etc.apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization namespace: wasliberty namePrefix: kustomtest- nameSuffix: -v2 commonLabels: app: kustomized-wasliberty resources: - deployment.yaml - service.yaml - pvc.yaml - configmap.yaml - secret.yaml
Les noms des fichiers YAML
resources
doivent correspondre aux noms des autres fichiers dans le référentielbase
. Vous pouvez inclure plusieurs configurations dans le même fichier, mais dans l'exemple, les configurations sont des fichiers distincts, par exemple,deployment.yaml
,service.yaml
etpvc.yaml
. -
Générez vos fichiers YAML resource avec les configurations que vous avez définies dans le fichier YAML de base
kustomization
. Les ressources sont générées en combinant les configurations dans les fichiers YAMLkustomization
et resource. Les fichiers YAML combinés sont renvoyés dansstdout
dans la sortie. Utilisez cette même commande pour générer les modifications ultérieures que vous apportez au fichier YAMLkustomization
, telles que l'ajout d'un libellé.kustomize build
-
-
Configurez votre référentiel overlay avec des fichiers YAML
kustomization
uniques pour chacun de vos environnements, par exemple, staging et prod.-
Dans le référentiel staging, créez un fichier
kustomization.yaml
. Ajoutez des configurations uniques à staging, telles qu'un libellé, une balise image ou un fichier YAML pour un nouveau composant que vous souhaitez tester.apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization namePrefix: staging- commonLabels: env: staging owner: TeamA bases: - ../../base patchesStrategicMerge: - configmap.yaml - new_staging_resource.yaml resources: - new_staging_resource.yaml
Comprendre les composants YAML Composant Description namePrefix
Spécifiez un préfixe à associer au nom de chaque ressource que vous souhaitez créer avec votre fichier kustomization
de préproduction, par exemple,staging-
.commonLabels
Ajoutez des libellés qui sont uniques aux objets de préproduction, par exemple, l'environnement de préproduction et l'équipe responsable. bases
Ajoutez un chemin relatif à un répertoire ou une URL vers un référentiel distant qui contient un fichier kustomization
base. Dans cet exemple, le chemin relatif pointe vers le fichierkustomization
base dans le référentielbase
que vous avez créé précédemment. Cette zone est obligatoire pour un fichierkustomization
overlay.patchesStrategicMerge
Répertoriez les fichiers YAML de configuration resource que vous souhaitez fusionner avec le fichier kustomization
base. Vous devez également ajouter ces fichiers au même référentiel que le fichierkustomization
, par exemple,overlay/staging
. Ces fichiers de configuration resource peuvent contenir de petites modifications qui sont fusionnées avec les fichiers de configuration base de même nom sous forme de correctif. La ressource récupère tous les composants qui se trouvent dans le fichier de configurationbase
, plus les composants supplémentaires que vous spécifiez dans le fichier de configurationoverlay
. Si la configuration est un nouveau fichier qui ne se trouve pas dans la base, vous devez également ajouter le nom de fichier à la zoneresources
.resources
Répertoriez les fichiers YAML de configuration resource qui sont uniques dans le référentiel staging et qui ne sont pas inclus dans le référentiel base. Ajoutez ces fichiers également dans la zone patchesStrategicMerge
et ajoutez-les au même référentiel que le fichierkustomization
, par exemple,overlay/staging
.Autres configurations possibles Pour connaître les autres configurations que vous pouvez ajouter à votre fichier, consultez la rubrique Créer un fichier kustomization
. -
Générez vos fichiers de configuration staging/overlay.
kustomize build overlay/staging
-
Répétez ces étapes pour créer votre fichier
kustomization
prod/overlay et d'autres fichiers YAML de configuration. Par exemple, vous pouvez augmenter le nombre de répliques dans votre fichierdeployment.yaml
de sorte que votre environnement de production puisse gérer davantage de demandes utilisateur. -
Passez en revue votre structure de référentiel
kustomize
pour vous assurer qu'elle contient tous les fichiers de configuration YAML dont vous avez besoin. La structure peut se présenter comme suit :├── base │ ├── configmap.yaml │ ├── deployment.yaml │ ├── kustomization.yaml │ ├── pvc.yaml │ ├── secret.yaml │ └── service.yaml └── overlay ├── prod │ ├── deployment.yaml │ ├── kustomization.yaml │ └── new_prod_resource.yaml └── staging ├── configmap.yaml ├── kustomization.yaml └── new_staging_resource.yaml
-
-
Appliquez les ressources Kubernetes pour l'environnement que vous souhaitez déployer. L'exemple ci-après utilise le référentiel staging.
- Accédez au répertoire overlay/staging. Si vous n'avez pas créé vos ressources lors de l'étape précédente, créez-les maintenant.
cd overlay/staging && kustomize build
- Appliquez les ressources Kubernetes à votre cluster. Inclure l'option
-k
et le répertoire où se trouve le fichierkustomization
. Par exemple, si vous vous trouvez déjà dans le répertoire staging, ajoutez../staging
pour marquer le chemin vers le répertoire.
Exemple de sortiekubectl apply -k ../staging
configmap/staging-kustomtest-configmap-v2 created secret/staging-kustomtest-secret-v2 created service/staging-kustomtest-service-v2 created deployment.apps/staging-kustomtest-deployment-v2 created job.batch/staging-pi created persistentvolumeclaim/staging-kustomtest-pvc-v2 created
- Assurez-vous que les modifications uniques du répertoire staging sont appliquées. Par exemple, si vous avez ajouté un préfixe
staging-
, les pods et les autres ressources qui sont créés comportent ce préfixe dans leur nom.
Exemple de sortiekubectl get -k ../staging
NAME DATA AGE configmap/staging-kustomtest-configmap-v2 2 90s NAME TYPE DATA AGE secret/staging-kustomtest-secret-v2 Opaque 2 90s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/staging-kustomtest-service-v2 NodePort 172.21.xxx.xxx <none> 9080:30200/TCP 90s NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/staging-kustomtest-deployment-v2 0/3 3 0 91s NAME COMPLETIONS DURATION AGE job.batch/staging-pi 1/1 41s 2m37s NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE persistentvolumeclaim/staging-kustomtest-pvc-v2 Pending ibmc-file-bronze 90s
- Répétez ces étapes pour chaque environnement que vous souhaitez créer.
- Accédez au répertoire overlay/staging. Si vous n'avez pas créé vos ressources lors de l'étape précédente, créez-les maintenant.
-
Facultatif : nettoyez votre environnement en retirant toutes les ressources que vous avez appliquées avec Kustomize.
kubectl delete -k <directory>
Exemple de sortie
configmap "staging-kustomtest-configmap-v2" deleted secret "staging-kustomtest-secret-v2" deleted service "staging-kustomtest-service-v2" deleted deployment.apps "staging-kustomtest-deployment-v2" deleted job.batch "staging-pi" deleted persistentvolumeclaim "staging-kustomtest-pvc-v2" deleted