Utiliser un dépôt avec des configurations Kustomize et des charts Helm

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.

Exigences

Pour afficher automatiquement les configurations Kustomize et les charts Helm, assurez-vous que votre environnement répond aux exigences suivantes :

  • Il dispose d'une version Anthos Config Management 1.9.0 ou ultérieure. Si nécessaire, mettez à niveau Anthos Config Management.
  • Le mode multi-dépôt est activé. Si vous utilisez Google Cloud Console ou l'outil de ligne de commande gcloud pour installer Config Sync, le mode multi-dépôt est activé par défaut dans les versions 1.7.0 et ultérieures.
  • Pour déclencher le processus de rendu, votre dépôt Git doit comporter un fichier de configuration Kustomize (kustomization.yaml, kustomization.yml ou Kustomization) à la racine de votre répertoire Git. Si le répertoire racine ne possède pas de fichier de configuration Kustomization, Config Sync synchronise les configurations telles quelles sans aucun rendu.
  • Incluez vos configurations dans kustomization.yaml. Si vous n'incluez pas ces fichiers de configuration, les configurations ne sont pas synchronisées avec le cluster.

Exemple d'architecture de dépôt pour les configurations Kustomize

L'exemple de dépôt suivant montre comment configurer le dépôt pour utiliser les configurations Kustomize avec le rendu automatique. Ce dépôt comprend trois superpositions (team-a, team-b et team-c) qui référencent la même base.

Le schéma suivant montre la structure des répertoires :

├── base
│   ├── kustomization.yaml
│   ├── namespace.yaml
│   ├── networkpolicy.yaml
│   ├── rolebinding.yaml
│   └── role.yaml
├── kustomization.yaml
├── README.md
├── team-a
│   └── kustomization.yaml
├── team-b
│   └── kustomization.yaml
└── team-c
    └── kustomization.yaml

Le fichier kustomization.yaml suivant se trouve à la racine du dépôt et contient les références des trois superpositions :

# ./kustomization.yaml
resources:
- team-a
- team-b
- team-c

Le fichier kustomize.yaml suivant se trouve dans le répertoire team-a et est la superposition de team-a :

# ./team-a/kustomization.yaml
namespace: team-a

resources:
- ../base

patches:
- target:
   kind: RoleBinding
   name: team-admin-rolebinding
 patch: |-
   - op: replace
     path: /subjects/0/name
     value: team-a-admin@mydomain.com
- target:
   kind: Namespace
   name: default
 patch: |-
   - op: replace
     path: /metadata/name
     value: team-a

Le fichier kustomization.yaml suivant se trouve dans le répertoire base et est la base Kustomize :

# ./base/kustomization.yaml
resources:
- namespace.yaml
- rolebinding.yaml
- role.yaml
- networkpolicy.yaml

Vous pouvez explorer ce dépôt dans le répertoire Configurer des règles spécifiques à un espace de noms de l'exemple de dépôt Anthos Config Management.

Afficher automatiquement les charts Helm

Vous pouvez afficher automatiquement les charts Helm à l'aide des champs helmGlobals et helmCharts de vos fichiers kustomization.yaml.

Champs du chart Helm

Config Sync accepte l'ajout des champs suivants à vos fichiers kustomization.yaml :

Champ Description
helmGlobals Paramètres appliqués à tous les charts Helm
helmGlobals.chartHome Accepte une chaîne. Un chemin d'accès au fichier, en rapport à la racine Kustomization, vers un répertoire contenant un sous-répertoire pour chaque chart à inclure dans Kustomization. La valeur par défaut de ce champ est charts.
helmGlobals.configHome Accepte une chaîne. Définit une valeur que Kustomize doit transmettre à Helm avec la variable d'environnement HELM_CONFIG_HOME. Kustomize ne tente pas de lire ou d'écrire ce répertoire. En cas d'omission, TMP_DIR/helm est utilisé, où TMP_DIR est un répertoire temporaire créé par Kustomize pour Helm.
helmCharts Un tableau de paramètres de chart Helm
helmCharts.name Accepte une chaîne. Le nom du chart. Ce champ est obligatoire.
helmCharts.version Accepte une chaîne. La version du chart
helmCharts.repo Accepte une chaîne. L'URL utilisée pour localiser le chart
helmCharts.releaseName Accepte une chaîne. Remplace RELEASE_NAME dans le résultat du modèle de chart
helmCharts.namespace Accepte une chaîne. Définit l'espace de noms cible pour une version (.Release.Namespace dans le modèle)
helmCharts.valuesInline Valeurs à utiliser à la place des valeurs par défaut qui accompagnent le chart
helmCharts.valuesFile Accepte une chaîne. ValuesFile est un chemin d'accès local ou une URL distante vers un fichier de valeurs à utiliser à la place des valeurs par défaut qui accompagnent le chart. Les valeurs par défaut sont dans CHART_HOME/NAME/values.yaml.
helmCharts.valuesMerge Accepte merge, override, (default), ou replace. ValuesMerge spécifie comment traiter ValuesInline par rapport à Values.
helmCharts.includeCRDs Accepte true ou false. Spécifie si Helm doit également générer CustomResourceDefinitions. La valeur par défaut est false.

Exemples de charts Helm

Les exemples des sections suivantes présentent différentes manières d'utiliser les charts Helm.

Effectuer le rendu d'un chart Helm distant

Config Sync est compatible avec le rendu des charts Helm distants sur les clusters disposant d'un accès Internet public.

Le kustomization.yaml suivant effectue le rendu d'un cert-manager distant en définissant les champs helmCharts suivants :

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

Effectuer le rendu d'un chart Helm local

Config Sync est compatible avec le rendu des charts Helm locaux. Pour utiliser une version personnalisée d'un chart Helm, vous pouvez extraire la version publiée depuis le dépôt de charts Helm (par exemple, ArtifactHub), effectuer les modifications localement, puis transférer les modifications dans votre dépôt.

Le kustomization.yaml suivant effectue le rendu d'un chart cert-manager local. Le répertoire par défaut des charts Helm est charts, et comme ce chart est vérifié dans le répertoire charts, vous n'avez pas besoin de spécifier .helmCharts.repo ou .helmCharts.version.

# ./kustomizaiton.yaml
...
helmCharts:
- name: cert-manager
  releaseName: my-cert-manager
  namespace: cert-manager
...

Effectuer le rendu de plusieurs charts Helm

Config Sync accepte le rendu de plusieurs charts Helm dans un fichier kustomiztion.yaml, que le chart soit distant ou local.

Le kustomization.yaml suivant effectue le rendu d'un chart Helm local (cert-manager) :

# ./kustomizaiton.yaml
...
helmCharts:
- name: cert-manager
  releaseName: my-cert-manager
  namespace: cert-manager
- name: prometheus
  repo: https://prometheus-community.github.io/helm-charts
  version: 14.3.0
  releaseName: my-prometheus
  namespace: monitoring
...

Exemple de format

L'exemple suivant montre

helmGlobals:
  chartHome: string
  configHome: string
helmCharts:
- name: string
  version: string
  repo: string
  releaseName: string
  namespace: string
  valuesInline: map[string]interface{}
  valuesFile: string
  valuesMerge: string
  includeCRDs: bool

Étape suivante