Utiliser Config Sync avec Kustomize et Helm


Dans ce tutoriel, vous ajoutez des configurations Kustomize qui référencent les charts Helm vers votre dépôt, puis vous utilisez Config Sync pour synchroniser votre cluster avec votre dépôt.

Lorsque vous utilisez Config Sync, les configurations Kustomize et les charts Helm que vous placez dans votre dépôt Git sont rendus automatiquement. Le rendu automatisé offre les avantages suivants :

  • Vous n'avez plus besoin d'un pipeline d'hydratation externe. Sans rendu automatisé, vous devez le rendu des configurations manuellement à l'aide de Kustomize et Helm sur votre poste de travail, ou configurer une étape pour déclencher le processus d'hydratation dans vos systèmes CI. Grâce au rendu automatisé, Config Sync gère l'exécution.

  • Vos coûts de maintenance sont réduits. Sans rendu automatisé, vous devez conserver un dépôt Git avec les configurations Kustomize et les graphiques Helm d'origine, et un autre dépôt Git avec le résultat généré par l'hydratation externe. Vous devez ensuite configurer Config Sync pour la synchronisation à partir du dépôt Git avec le résultat rendu. Avec le rendu automatisé, vous n'avez besoin de conserver qu'un seul dépôt avec les configurations d'origine.

  • Votre workflow de développement est simplifié. Sans rendu automatisé, les modifications apportées à vos configurations d'origine doivent être examinées deux fois avant la fusion : une fois dans le dépôt d'origine, puis une fois dans le dépôt rendu. Avec le rendu automatisé, les configurations de rendu sont générées par Config Sync et vous ne devez examiner que les modifications apportées aux configurations d'origine.

Objectifs

  • Configurez votre dépôt avec des configurations Kustomize qui référencent un chart Helm prêt à l'emploi pour cert-manager. cert-manager est un outil pour Kubernetes qui vous aide à gérer vos certificats.
  • Prévisualisez et validez les configurations que vous créez.
  • Utilisez Config Sync pour effectuer le rendu de votre chart et synchroniser votre cluster avec votre dépôt automatiquement.
  • Vérifiez que l'installation a réussi.

Coûts

Dans ce document, vous utilisez les composants facturables suivants de Google Cloud :

Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût. Les nouveaux utilisateurs de Google Cloud peuvent bénéficier d'un essai gratuit.

Une fois que vous avez terminé les tâches décrites dans ce document, vous pouvez éviter de continuer à payer des frais en supprimant les ressources que vous avez créées. Pour en savoir plus, consultez la section Effectuer un nettoyage.

Avant de commencer

  1. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  2. Make sure that billing is enabled for your Google Cloud project.

  3. Créez un cluster répondant aux exigences de Config Sync et utilisez les paramètres Config Sync suivants ou assurez-vous d'y avoir accès :
  4. Enregistrer un cluster dans un parc.
  5. Installez l'outil de ligne de commande nomos. Si vous avez déjà installé l'outil nomos, veillez à le mettre à niveau vers la version 1.9.0 ou ultérieure.
  6. Installez Helm.

Il est également utile de se familiariser avec Git, Kustomize et Helm.

Configurer votre dépôt

Les tâches suivantes vous montrent comment préparer un dépôt Git avec des configurations combinant des configurations Kustomize avec des charts Helm :

  1. Créez un dépôt Git ou assurez-vous d'y avoir accès. Étant donné que votre dépôt utilise Kustomize et Helm, il doit s'agir d'un dépôt non structuré.

  2. À la racine de votre dépôt Git, créez un fichier nommé kustomization.yaml et collez-y le code suivant :

    # ./kustomization.yaml
    resources:
    - base
    
    patches:
    - path: ignore-deployment-mutation-patch.yaml
      target:
        kind: Deployment
    

    Ce fichier est une superposition Kustomize qui pointe vers la base Kustomize. Cette superposition inclut un correctif pour la base du chart Helm qui ajoute l'annotation client.lifecycle.config.k8s.io/mutation: ignore à tous les objets de déploiement. L'annotation force Config Sync à ignorer les modifications conflictuelles à cet objet dans le cluster après sa création.

  3. Dans votre dépôt Git, créez un répertoire nommé base :

    mkdir base
    
  4. Dans le répertoire base, créez un autre fichier nommé kustomization.yaml et collez-y le code suivant :

    # ./base/kustomization.yaml
    helmCharts:
    - name: cert-manager
      repo: https://charts.jetstack.io
      version: v1.5.3
      releaseName: my-cert-manager
      namespace: cert-manager
    

    Ce fichier est la base Kustomize, qui effectue le rendu du chart Helm distant.

  5. Revenez à la racine de votre dépôt Git, créez un fichier nommé ignore-deployment-mutation-patch.yaml et collez-y le code suivant :

    # ./ignore-deployment-mutation-patch.yaml
    apiVersion: apps/v1
    kind: Deployment
    metadata:
     name: any
     annotations:
       client.lifecycle.config.k8s.io/mutation: ignore
    

    Ce fichier est un correctif appliqué au chart Helm de base. L'annotation client.lifecycle.config.k8s.io/mutation: ignore est ajoutée à tous les déploiements situés dans le répertoire de base.

  6. Effectuez un commit des modifications dans votre dépôt :

    git add .
    git commit -m 'Set up manifests.'
    git push
    

Le dépôt d'exemples contient un exemple de ce type de dépôt.

Prévisualiser et valider les configurations de rendu

Avant que Config Sync effectue le rendu des configurations et les synchronise avec le cluster, assurez-vous que les configurations sont exactes en exécutant nomos hydrate pour prévisualiser la configuration de rendu et en exécutant nomos vet pour vérifier que le format est correct.

  1. Exécutez la commande nomos hydrate suivante avec les options suivantes :

    nomos hydrate \
        --source-format=unstructured \
        --output=OUTPUT_DIRECTORY
    

    Dans cette commande :

    • --source-format=unstructured permet à nomos hydrate de travailler sur un dépôt non structuré. Étant donné que vous utilisez des configurations Kustomize et des charts Helm, vous devez utiliser un dépôt non structuré et ajouter cette option.
    • --output=OUTPUT_DIRECTORY vous permet de définir un chemin d'accès aux configurations de rendu. Remplacez OUTPUT_DIRECTORY par l'emplacement où vous souhaitez enregistrer le résultat.
  2. Vérifiez la syntaxe et la validité de vos configurations en exécutant nomos vet avec les options suivantes :

    nomos vet \
        --source-format=unstructured \
        --keep-output=true \
        --output=OUTPUT_DIRECTORY
    

    Dans cette commande :

    • --source-format=unstructured permet à nomos vet de travailler sur un dépôt non structuré.
    • --keep-output=true enregistre les configurations de rendu.
    • --output=OUTPUT_DIRECTORY est le chemin d'accès aux configurations de rendu.

Configurer la synchronisation à partir du dépôt Git

Maintenant que vous avez créé un dépôt avec les configurations que vous souhaitez utiliser, vous pouvez configurer la synchronisation entre votre cluster et votre dépôt. Si vous avez déjà installé Config Sync, passez à la section Vérifier l'état de synchronisation.

  1. Dans la console Google Cloud, activez l'API GKE Hub.

    Accéder à l'API GKE Hub

  2. Dans la console Google Cloud, accédez à la page Configuration sous la section Fonctionnalités.

    Accéder à la page "Configuration"

  3. Cliquez sur Installer Config Sync.

  4. Sélectionnez Mises à niveau automatiques pour permettre à Config Sync de mettre à niveau les versions automatiquement.

  5. Sous Options d'installation, sélectionnez Installer Config Sync sur des clusters individuels.

  6. Dans le tableau Clusters disponibles, sélectionnez cs-cluster, puis cliquez sur Installer Config Sync. Dans l'onglet Paramètres, l'état du cs-cluster devrait s'afficher comme Activé après quelques minutes.

  7. Dans le tableau de bord Config Sync, cliquez sur Déployer le package.

  8. Dans le tableau Sélectionner des clusters pour le déploiement de packages, sélectionnez cs-cluster, puis cliquez sur Continuer.

  9. Laissez l'option Package hébergé sur Git, puis cliquez sur Continuer.

  10. Dans le champ Nom du package, saisissez sample-repository.

  11. Dans le champ URL du dépôt, saisissez https://github.com/GoogleCloudPlatform/anthos-config-management-samples.

  12. Dans le champ Chemin d'accès, saisissez config-sync-quickstart/multirepo/root.

  13. Conservez les valeurs par défaut dans les autres champs.

  14. Cliquez sur Déployer le package.

    Après quelques minutes, Synchronisé doit s'afficher dans la colonne État de synchronisation de cs-cluster.

Vérifier l'installation

Une fois que vous avez installé et configuré Config Sync, vous pouvez vérifier que l'installation s'est bien déroulée.

  1. Vérifiez qu'il n'y a pas d'autres erreurs en utilisant nomos status :

    nomos status
    

    Exemple de résultat :

    *CLUSTER_NAME
    --------------------
    <root>   https:/github.com/GoogleCloudPlatform/anthos-config-management-samples.git/helm-component/manifests@init
    SYNCED   fd17dd5a
    
  2. Vérifiez que le composant Helm est correctement installé :

    kubectl get all -n cert-manager
    

    Exemple de résultat :

    NAME                                              READY   STATUS    RESTARTS   AGE
    pod/my-cert-manager-54f5ccf74-wfzs4               1/1     Running   0          10m
    pod/my-cert-manager-cainjector-574bc8678c-rh7mq   1/1     Running   0          10m
    pod/my-cert-manager-webhook-7454f4c77d-rkct8      1/1     Running   0          10m
    
    NAME                              TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)    AGE
    service/my-cert-manager           ClusterIP   10.76.9.35     <none>        9402/TCP   10m
    service/my-cert-manager-webhook   ClusterIP   10.76.11.205   <none>        443/TCP    10m
    
    NAME                                         READY   UP-TO-DATE   AVAILABLE   AGE
    deployment.apps/my-cert-manager              1/1     1            1           10m
    deployment.apps/my-cert-manager-cainjector   1/1     1            1           10m
    deployment.apps/my-cert-manager-webhook      1/1     1            1           10m
    
    NAME                                                    DESIRED   CURRENT   READY   AGE
    replicaset.apps/my-cert-manager-54f5ccf74               1         1         1       10m
    replicaset.apps/my-cert-manager-cainjector-574bc8678c   1         1         1       10m
    replicaset.apps/my-cert-manager-webhook-7454f4c77d      1         1         1       10m
    

Nettoyer

Pour éviter que les ressources utilisées lors de ce tutoriel soient facturées sur votre compte Google Cloud, supprimez le projet contenant les ressources, ou conservez le projet et supprimez les ressources individuelles.

Supprimer le projet

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

Supprimer des ressources individuelles

Supprimer les fichiers manifestes de votre dépôt

Afin d'éviter toute suppression accidentelle, Config Sync ne vous permet pas de supprimer tous les espaces de noms ou les ressources à l'échelle d'un cluster dans un seul commit. Suivez ces instructions pour désinstaller correctement le composant et supprimer l'espace de noms dans des commits distincts :

  1. Supprimez le composant cert-manager de votre dépôt :

    git rm -rf manifests/cert-manager \
        && git commit -m "uninstall cert-manager" \
        && git push origin BRANCH
    

    Remplacez BRANCH par la branche dans laquelle vous avez créé votre dépôt.

  2. Supprimez l'espace de noms cert-manager :

    git rm manifests/namespace-cert-manager.yaml \
        && git commit -m "remove the cert-manager namespace" \
        && git push origin BRANCH
    
  3. Vérifiez que l'espace de noms cert-manager n'existe pas :

    kubectl get namespace cert-namespace
    

    Exemple de résultat :

    Error from server (NotFound): namespaces "cert-namespace" not found
    

Supprimer le cluster

Pour supprimer le cluster, exécutez les commandes suivantes :

Console

Pour supprimer un cluster à l'aide de la console Google Cloud, procédez comme suit :

  1. Dans la console Google Cloud, accédez à la page GKE.

    Accéder à la page GKE

  2. À côté du cluster que vous souhaitez supprimer, cliquez sur Actions puis sur Supprimer.

  3. Lorsque vous êtes invité à confirmer votre choix, cliquez à nouveau sur Supprimer.

gcloud

Pour supprimer un cluster à l'aide de Google Cloud CLI, exécutez la commande suivante :

gcloud container clusters delete CLUSTER_NAME

Pour en savoir plus, consultez la documentation sur gcloud container clusters delete.

Étape suivante