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.

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.

  1. Pour configurer votre objet RootSync, créez un fichier root-sync.yaml :

    # root-sync.yaml
    apiVersion: configsync.gke.io/v1beta1
    kind: RootSync
    metadata:
      name: root-sync
      namespace: config-management-system
    spec:
      sourceFormat: unstructured
      git:
        repo: YOUR_GIT_REPOSITORY
        branch: main
        auth: none
      override:
        enableShellInRendering: true
    

    Remplacez YOUR_GIT_REPOSITORY par l'URL de votre dépôt Git.

  2. Appliquez le fichier root-sync.yaml à votre cluster :

    kubectl apply -f root-sync.yaml
    

Vérifiez 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