IBM Cloud Docs
Conditionnement d'applications en vue de leur réutilisation dans plusieurs environnements avec Kustomize

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 :

Pour configurer des fichiers de configuration avec Kustomize :

  1. Installez l'outil 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
      
  2. Créez un répertoire pour votre application dans un système de contrôle de version, tel que Git.

    git init ~/<my_app>
    
  3. 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 avec kustomize :

    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
    
  4. Configurez le référentiel base.

    1. Accédez au référentiel base.

      cd ~/<my_app>/base
      
    2. 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.

    3. Créez un fichier kustomization qui spécifie la configuration de base à appliquer dans tous les environnements. Le fichier kustomization doit inclure la liste de fichiers YAML de configuration resource Kubernetes qui sont stockés dans le même référentiel base. Dans le fichier kustomization, 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érentiel base. 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 et pvc.yaml.

    4. 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 YAML kustomization et resource. Les fichiers YAML combinés sont renvoyés dans stdout dans la sortie. Utilisez cette même commande pour générer les modifications ultérieures que vous apportez au fichier YAML kustomization, telles que l'ajout d'un libellé.

      kustomize build
      
  5. Configurez votre référentiel overlay avec des fichiers YAML kustomization uniques pour chacun de vos environnements, par exemple, staging et prod.

    1. 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 fichier kustomization base dans le référentiel base que vous avez créé précédemment. Cette zone est obligatoire pour un fichier kustomization 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 fichier kustomization, 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 configuration base, plus les composants supplémentaires que vous spécifiez dans le fichier de configuration overlay. Si la configuration est un nouveau fichier qui ne se trouve pas dans la base, vous devez également ajouter le nom de fichier à la zone resources.
      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 fichier kustomization, 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.
    2. Générez vos fichiers de configuration staging/overlay.

      kustomize build overlay/staging
      
    3. 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 fichier deployment.yaml de sorte que votre environnement de production puisse gérer davantage de demandes utilisateur.

    4. 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
      
  6. Appliquez les ressources Kubernetes pour l'environnement que vous souhaitez déployer. L'exemple ci-après utilise le référentiel staging.

    1. 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
      
    2. Appliquez les ressources Kubernetes à votre cluster. Inclure l'option -k et le répertoire où se trouve le fichier kustomization. Par exemple, si vous vous trouvez déjà dans le répertoire staging, ajoutez ../staging pour marquer le chemin vers le répertoire.
      kubectl apply -k ../staging
      
      Exemple de sortie
      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
      
    3. 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.
      kubectl get -k ../staging
      
      Exemple de sortie
      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
      
    4. Répétez ces étapes pour chaque environnement que vous souhaitez créer.
  7. 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