Configurazione di Kubernetes con Kustomize

Kustomize è uno strumento di trasformazione della configurazione di Kubernetes che ti consente di personalizzare i file YAML non basati su modelli, lasciando intatti i file originali. Kustomize può anche generare risorse come ConfigMap e Secret da altre rappresentazioni. Kustomize è progettato per l'API Kubernetes, quindi può comprendere e modificare gli oggetti in stile Kubernetes.

Se vuoi utilizzare i grafici Helm con Config Sync, sono supportati due metodi: il rendering di Helm tramite Kustomize o l'utilizzo dell'API Helm. Questa pagina descrive i requisiti per il rendering dei grafici Helm tramite Kustomize. Per ulteriori informazioni sull'utilizzo dell'API Helm, consulta Sincronizzare i grafici Helm da Artifact Registry.

Requisiti e limitazioni

Prima di configurare il rendering automatico con Kustomize, esamina i seguenti requisiti e limitazioni:

  • Le origini gerarchiche non sono supportate.
  • Le basi remote da origini di riferimento private non sono supportate.
  • I registri Helm privati e basati su OCI non sono supportati, a meno che tu non utilizzi l'API Helm.
  • I valori Helm possono essere gestiti nell'origine di riferimento. Con l'API Helm, i valori vengono gestiti come parte dell'API RootSync o RepoSync.
  • È supportato il rendering di più grafici Helm in un oggetto RootSync o RepoSync. Con l'API Helm, puoi eseguire il rendering di un solo grafico Helm in un oggetto RootSync o RepoSync.
  • Assicurati che il file di configurazione di Kustomization (kustomization.yaml, kustomization.yml o Kustomization) si trovi nella directory principale e che tutte le configurazioni siano archiviate in questo file, non in file separati nell'origine di riferimento.

Eseguire il rendering delle configurazioni Kustomize

L'esempio seguente mostra come configurare l'origine di riferimento per utilizzare le configurazioni Kustomize con il rendering automatico.

Esempio di architettura per le configurazioni Kustomize

Questa directory include quattro overlay (team-a, team-b, team-c e external-team) che fanno riferimento alla stessa base e un file utilizzato dal generatore ConfigMap.

Il seguente diagramma mostra la struttura della directory:

├── example
│   ├── 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
├── external-team
│   └── kustomization.yaml
└── external-data.txt

Il seguente file kustomization.yaml si trova nella directory principale dell'origine di riferimento e contiene riferimenti ai quattro overlay con un generatore ConfigMap da un file locale:

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

configMapGenerator:
- name: my-configmap
  namespace: my-namespace
  files:
    - ../external-data.txt

Il seguente file kustomize.yaml si trova nella directory team-a ed è l'overlay per team-a:

# ./example/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

Il seguente file kustomization.yaml si trova nella directory base ed è la base Kustomize:

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

Puoi esplorare un repository di esempio nella directory configuring namespace-specific policies in GitHub.

Eseguire il rendering dei grafici Helm tramite Kustomize

Questa sezione spiega come eseguire il rendering dei grafici Helm tramite Kustomize. Le versioni di Helm e Kustomize in bundle elencano le versioni di Kustomize e Helm in bundle con la versione corrispondente di Config Sync.

Campi del grafico Helm

Puoi aggiungere i seguenti campi del grafico Helm ai file kustomization.yaml per supportare il rendering dei grafici Helm tramite Kustomize:

Campo Descrizione
helmGlobals Parametri applicati a tutti i grafici Helm
helmGlobals.chartHome Accetta una stringa. Un percorso, relativo alla radice di Kustomization, a una directory contenente una sottodirectory per ogni grafico da includere in the Kustomization. Il valore predefinito di questo campo è charts.
helmGlobals.configHome Accetta una stringa. Definisce un valore che Kustomize deve passare a Helm con la HELM_CONFIG_HOME variabile di ambiente. Kustomize non tenta di leggere o scrivere questa directory. Se omesso, TMP_DIR/helm viene utilizzato, dove TMP_DIR è una directory temporanea creata da Kustomize per Helm.
helmCharts Un array di parametri del grafico Helm
helmCharts.name Accetta una stringa. Il nome del grafico. Questo campo è obbligatorio.
helmCharts.version Accetta una stringa. La versione del grafico
helmCharts.repo Accetta una stringa. L'URL utilizzato per individuare il grafico
helmCharts.releaseName Accetta una stringa. Sostituisce RELEASE_NAME nell'output del modello del grafico
helmCharts.namespace Accetta una stringa. Imposta lo spazio dei nomi di destinazione per una release (.Release.Namespace nel modello)
helmCharts.valuesInline Valori da utilizzare al posto dei valori predefiniti che accompagnano il grafico
helmCharts.valuesFile Accetta una stringa. ValuesFile è un percorso locale o un URL remoto a un file di valori da utilizzare al posto dei valori predefiniti che accompagnano il grafico. I valori predefiniti si trovano in CHART_HOME/NAME/values.yaml.
helmCharts.valuesMerge Accetta merge, override, (default), o replace. ValuesMerge specifica come trattare ValuesInline rispetto a Values.
helmCharts.includeCRDs Accetta true o false. Specifica se Helm deve generare anche CustomResourceDefinitions. Il valore predefinito è false.

Eseguire il rendering di un grafico Helm remoto

Config Sync supporta il rendering dei grafici Helm remoti sui cluster che hanno accesso a internet pubblico.

Il seguente kustomization.yaml esegue il rendering di un cert-manager remoto impostando i seguenti campi helmCharts:

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

Eseguire il rendering di un grafico Helm locale

Config Sync supporta il rendering dei grafici Helm locali. Per utilizzare una versione personalizzata di un grafico Helm, puoi estrarre la versione rilasciata dal grafico Helm (ad esempio, ArtifactHub), apportare modifiche localmente e poi eseguire il push delle modifiche nell'origine di riferimento.

Il seguente diagramma mostra la struttura della directory:

├── base
│   ├── charts
│   │   └── cert-manager
│   └── kustomization.yaml
├── overlays
│   └── stage
│       └── kustomization.yaml
└── base_value_overrides.yaml

Il seguente file kustomization.yaml esegue il rendering di un grafico cert-manager locale. La directory predefinita per i grafici Helm è charts e, poiché questo grafico è archiviato nella directory charts, non devi specificare .helmCharts.repo o .helmCharts.version.

# ./overlays/stage/kustomization.yaml
...
# This field is optional if your Helm charts are located in the default 'charts' directory.
helmGlobals:
  chartHome: ../../base/charts
helmCharts:
- name: cert-manager
  releaseName: my-cert-manager
  namespace: cert-manager
  # Specify a local path or a remote URL to a values file instead of using the default values in CHART_HOME/NAME/values.yaml.
  valuesFile: ../../base_value_overrides.yaml
...

Eseguire il rendering di più grafici Helm

Config Sync supporta il rendering di più grafici Helm in un unico file kustomization.yaml, indipendentemente dal fatto che il grafico sia remoto o locale.

Il seguente file kustomization.yaml esegue il rendering di un grafico Helm locale (cert-manager):

# ./kustomization.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
...

Passaggi successivi