Configurazione di Kubernetes con Kustomize

Kustomize è una piattaforma di trasformazione della configurazione che consente di personalizzare i file YAML senza modelli file originali, lasciando invariati quelli originali. Kustomize può anche generare risorse come come ConfigMap e Secret da altre rappresentazioni. Kustomize è progettato per API Kubernetes, in modo da poter comprendere e modificare gli oggetti di tipo Kubernetes.

Se vuoi utilizzare i grafici Helm con Config Sync, sono supportati due : eseguire il rendering di Helm tramite Kustomize o usare l'API Helm. Dettagli di questa pagina 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.

Quando utilizzi Kustomize per eseguire il rendering dei grafici Helm, si applicano le seguenti differenze:

  • I registri Helm privati e basati su OCI non sono supportati. Con l'API Helm, sono supportati sia i registri privati sia quelli basati su OCI.
  • I valori Helm possono essere gestiti nella fonte attendibile. Con l'API Helm, i valori vengono gestiti nell'ambito dell'API RootSync o RepoSync.
  • È supportato il rendering di più grafici Helm in un oggetto RootSync o RepoSync. Con l'API Helm, puoi visualizzare un solo grafico Helm in un oggetto RootSync o RepoSync.

Requisiti di Config Sync per Kustomize

Per eseguire automaticamente il rendering delle configurazioni Kustomize e dei grafici Helm, assicurati che L'ambiente Config Sync soddisfa i seguenti requisiti:

  • Utilizza un'unica fonte attendibile non strutturata. Il rendering automatico non è supportato per origini gerarchiche.
  • Per attivare il processo di rendering, la tua fonte attendibile deve avere un File di configurazione di Kustomization (kustomization.yaml, kustomization.yml o Kustomization) nella directory principale della directory. Se la directory principale non ha un file di configurazione di Kustomization, Config Sync sincronizza le configurazioni così come sono senza rendering.
  • Includi le configurazioni nel file kustomization.yaml. Se non includi da questi file, le configurazioni non vengono sincronizzate con il cluster.
  • Prima di Config Sync 1.19.0, tutte le configurazioni devono essere incluse nella directory principale di Kustomization. A partire dalla versione 1.19.0, Config Sync supporta i file esterni alla directory principale.

Rendering delle configurazioni di Kustomize

Il seguente esempio mostra come configurare la fonte attendibile per utilizzare le configurazioni di Kustomize con il rendering automatico.

Architettura di esempio 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 di ConfigMap.

Il seguente diagramma mostra la struttura delle 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 della fonte attendibile 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 # Starting from 1.19.0, Config Sync allows external resources located outside of the Kustomization root directory.

configMapGenerator:
- name: my-configmap
  namespace: my-namespace
  files:
    - ../external-data.txt # Starting from 1.19.0, Config Sync allows external files located outside of the Kustomization root directory.

Il seguente 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 kustomization.yaml si trova nella directory base ed è la base di Kustomize:

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

Puoi esplorare un repository di esempio nella directory configurazione dei criteri specifici per lo spazio dei nomi in GitHub.

Esegui il rendering dei grafici Helm tramite Kustomize

Questa sezione spiega come eseguire il rendering dei grafici Helm tramite Kustomize. Versioni di Helm e Kustomize in bundle elenca 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 a 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 della personalizzazione, a una directory contenente una sottodirectory per ogni grafico da includere nella personalizzazione. Il valore predefinito di questo campo è charts.
helmGlobals.configHome Accetta una stringa. Definisce un valore che Kustomize deve passare a Helm con la variabile di ambiente HELM_CONFIG_HOME. Kustomize non tenta di leggere o scrivere questa directory. Se omesso, viene utilizzato TMP_DIR/helm, 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 di 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 associati al grafico
helmCharts.valuesFile Accetta una stringa. ValuesFile è un percorso locale o un URL remoto a un file di valori da utilizzare anziché i valori predefiniti associati al 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 ai valori.
helmCharts.includeCRDs Accetta true o false. Specifica se Helm deve anche generare CustomResourceDefinitions. Il valore predefinito è false.

Visualizza un grafico Helm remoto

Config Sync supporta il rendering dei grafici Helm remoti sui cluster con l'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
...

Esegui il rendering di un grafico Helm locale

Config Sync supporta il rendering locale Grafici Helm. Per utilizzare una versione personalizzata di un grafico Helm, puoi eseguire il pull una versione rilasciata dal grafico Helm (ad esempio ArtifactHub), apportare modifiche localmente e quindi applica le modifiche alla tua fonte 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 kustomization.yaml mostra un grafico cert-manager locale. La directory predefinita per i grafici Helm è charts e poiché questo grafico è controllato nella directory charts, non è necessario 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:
  # Starting from 1.19.0, Config Sync allows loading from an external directory outside of the Kustomization root.
  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 kustomization.yaml file, indipendentemente dal fatto che il grafico sia remoto o locale.

Il seguente 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