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 :
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é.
À la racine de votre dépôt Git, créez un fichier nommé
kustomization.yamlet collez-y le code suivant :# ./kustomization.yaml resources: - base patches: - path: ignore-deployment-mutation-patch.yaml target: kind: DeploymentCe 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.Dans votre dépôt Git, créez un répertoire nommé
base:mkdir baseDans le répertoire
base, créez un autre fichier nommékustomization.yamlet 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-managerCe fichier est la base Kustomize, qui effectue le rendu du chart Helm distant.
Revenez à la racine de votre dépôt Git, créez un fichier nommé
ignore-deployment-mutation-patch.yamlet 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: ignoreCe fichier est un correctif appliqué au chart Helm de base. L'annotation
client.lifecycle.config.k8s.io/mutation: ignoreest ajoutée à tous les déploiements situés dans le répertoire de base.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.
Exécutez la commande
nomos hydratesuivante avec les options suivantes :nomos hydrate \ --source-format=unstructured \ --output=OUTPUT_DIRECTORYDans cette commande :
--source-format=unstructuredpermet ànomos hydratede 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_DIRECTORYvous permet de définir un chemin d'accès aux configurations de rendu. RemplacezOUTPUT_DIRECTORYpar l'emplacement où vous souhaitez enregistrer le résultat.
Vérifiez la syntaxe et la validité de vos configurations en exécutant
nomos vetavec les options suivantes :nomos vet \ --source-format=unstructured \ --keep-output=true \ --output=OUTPUT_DIRECTORYDans cette commande :
--source-format=unstructuredpermet ànomos vetde travailler sur un dépôt non structuré.--keep-output=trueenregistre les configurations de rendu.--output=OUTPUT_DIRECTORYest 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.
Pour configurer votre objet
RootSync, créez un fichierroot-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: trueRemplacez
YOUR_GIT_REPOSITORYpar l'URL de votre dépôt Git.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.
Vérifiez qu'il n'y a pas d'autres erreurs en utilisant
nomos status:nomos statusExemple de résultat :
*CLUSTER_NAME -------------------- <root> https:/github.com/GoogleCloudPlatform/anthos-config-management-samples.git/helm-component/manifests@init SYNCED fd17dd5aVérifiez que le composant Helm est correctement installé :
kubectl get all -n cert-managerExemple 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