Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

Configurazione di Kubernetes con Kustomize

Lo scopo di questo documento è aiutarti a iniziare a utilizzare Kustomize, comprendere i casi d'uso previsti e trovare risorse per utilizzarlo con altri strumenti di Google Cloud.

Kustomize è uno strumento di trasformazione della configurazione di Kubernetes che consente di personalizzare i file YAML non utilizzati, lasciando inalterati i file originali. Kustomize può anche generare risorse come ConfigMap e Secret da altre rappresentazioni. Kustomize è creato per l'API Kubernetes, in modo che possa comprendere e modificare gli oggetti in stile Kubernetes.

Informazioni su Kustomize

Realizzato da Google e dalla community Kubernetes, Kustomize si allinea ai principi di Kubernetes di utilizzo degli oggetti Kubernetes per definire i file di configurazione e gestire queste configurazioni in modo dichiarativo. L'oggetto di configurazione Kustomize è chiamato Kustomization, che descrive come generare o trasformare altri oggetti Kubernetes. Una brustomizzazione è definita in modo dichiarativo in un file denominato kustomization.yaml, che può essere generato e modificato da Kustomize stesso.

In Kustomize, puoi definire una kustomizzazione comune e riutilizzabile (chiamata base) e applicarla a più altre kustomizzazioni (chiamate overlay), che possono sovrascrivere selettivamente le impostazioni definite nella base per produrre varianti. Kustomize poi trasforma e genera le risorse, un processo chiamato idratazione o rendering, in base alla configurazione definita nelle basi e negli overlay di kustomizzazione. Le risorse visualizzate vengono quindi scritte nell'output standard o nei file, lasciando inalterati i file YAML originali, in modo che una base possa essere riutilizzata da molti overlay diversi.

immagine

Questo approccio senza modelli è potente quando si tratta di facilità d'uso e riutilizzabilità delle basi di kustomization. Consente di personalizzare la configurazione di Kubernetes praticamente in qualsiasi modalità, senza che tu debba fornire un ampio set di valori per ogni singolo caso d'uso.

Vantaggi Kustomize

I vantaggi della gestione delle configurazioni di Kubernetes con Kustomize includono:

  • Kustomize è senza modelli. Quando utilizzi file di modelli e di valori, quasi tutte le specifiche di un file YAML possono diventare un parametro che richiede un valore e i file di valori possono diventare molto grandi. Invece di modellare la configurazione come testo o esprimere la configurazione come codice, Kustomize manipola i dati di configurazione. Il file YAML non elaborato è leggibile e riutilizzabile a prescindere dal fatto che venga visualizzato da Kustomize o meno. Il modello Kustomize è diverso; non è necessario parametrizzare tutto, il che semplifica il riutilizzo delle configurazioni comuni.

  • Kustomize può essere eseguito in modo nativo dall'interfaccia a riga di comando di Kubernetes. Kustomize è integrato in kubectl, dalla versione 1.14. Pertanto, se utilizzi kubectl, non è necessario installare o gestire Kustomize come dipendenza separata.

  • Kustomize è puramente dichiarativo. Essendo uno strumento nativo di Kubernetes, Kustomize si allinea all'approccio di Kubernetes alla configurazione dichiarativa. Anziché descrivere imperativamente come lo strumento deve personalizzare le risorse, dichiari ciò che vuoi e Kustomize lo fornisce.

  • Kustomize ti consente di riutilizzare la stessa configurazione di base per gestire più configurazioni diverse. Puoi utilizzare un unico file di base in diversi ambienti, ad esempio sviluppo, gestione temporanea, produzione, e avere overlay minimi e unici per personalizzare la base per ogni ambiente.

  • Kustomize è facile da usare. C'è una curva di apprendimento poco profonda; puoi iniziare con una configurazione molto semplice e creare gradualmente funzionalità più complesse in alto, un livello alla volta.

  • Kustomize è estensibile e personalizzabile. Kustomize supporta un framework di plug-in per la scrittura dei tuoi generatori e trasformatori in uno stile di funzioni container container ed eseguibili Kubernetes (KRM). Per scoprire di più su come creare i tuoi plug-in, consulta la guida ufficiale di Kustomize Plugins Guide.

Installazione locale

Per installare Kustomize nel tuo ambiente locale, esegui il comando seguente:

gcloud components install kustomize

Supporto Kustomize in Google Cloud

Kustomize è preinstallato in Cloud Shell ed è supportato in Skaffold. Inoltre, è supportato come generatore per Cloud Build.

Config Sync utilizza automaticamente Kustomize per eseguire il rendering delle risorse in un repository se contiene un file kustomization. Per scoprire di più su questa funzionalità, consulta Utilizzare un repository con configurazioni Kustomize e grafici Helm.

Comprendere Kustomize

Basi e overlay

L'approccio alla trasformazione di configurazione di Kustomize sfrutta l'uso dei livelli di Kustomization in modo che gli stessi file di configurazione di base possano essere riutilizzati in più configurazioni di Kustomization. Ciò si ottiene con i concetti di basi e overlay.

  • Una base è una directory contenente un file chiamato kustomization.yaml, che può elencare un insieme di risorse con alcune personalizzazioni che verranno applicate. Una base dovrebbe essere dichiarata nel campo resources di un file kustomization.
  • Un overlay è una directory che fa riferimento a un'altra directory kustomization come alla sua o a una delle sue basi.

Una base può essere considerata come un passaggio preliminare in una pipeline, senza conoscere gli overlay a cui fa riferimento. Al termine dell'elaborazione, una base invia le relative risorse sotto forma di input all'overlay per trasformarsi in base alla specifica dell'overlay.

Di seguito è riportato un esempio di base di kustomizzazione:

# base/kustomization.yaml
resources:
- deployment.yaml
namePrefix: bar-
#base/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
spec:
  template:
    metadata:
    spec:
      containers:
      - image: nginx
        name: nginx

Questa base potrebbe essere riutilizzata da più overlay di kustomizzazione. Di seguito è riportato un esempio di overlay che potrebbe fare riferimento a questa base:

# overlay/kustomization.yaml
resources:
- ../base
- configmap.yaml
namePrefix: foo-
#overlay/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: cm
data:
  red: blue

L'esecuzione del comando kustomize build overlay produce il seguente output:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: foo-bar-nginx
spec:
  template:
    metadata:
    spec:
      containers:
      - image: nginx
        name: nginx
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: foo-cm
data:
  red: blue

Il deployment ha ricevuto il prefisso del nome bar-dalla Kustomization di base, quindi un altro prefisso del nome foo- dalla Kustomization di overlay. L'oggetto ConfigMap ha ricevuto il prefisso foo- solo perché è stato dichiarato nell'overlay, pertanto è stato elaborato solo dall'overlay.

Genera secret e ConfigMap

Puoi generare Secret e ConfigMap da un file utilizzando i campi secretGenerator o configMapGenerator nel file kustomization. Ad esempio:

# kustomization.yaml
configMapGenerator:
- name: my-app
  files:
  -.properties

genera il seguente output YAML:

apiVersion: v1
kind: ConfigMap
metadata:
  name: my-app-g82klmn92h
data:
  .properties: |-
      red=blue

Modifica il file kustomization

Kustomize offre diversi comandi imperativi che ti aiutano a gestire il tuo file kustomization.

  • Per aggiungere tutti i file YAML nella directory attuale al campo resources di Kustomization, esegui il comando seguente:

    kustomize edit add resource *.yaml
    
  • Per visualizzare la pagina di guida della modifica di kustomize e per vedere tutti i sottocomandi che offre, esegui il comando seguente:

    kustomize edit -h
    
  • Per ricevere assistenza specifica per i sottocomandi, aggiungi il sottocomando come argomento. Ad esempio:

    kustomize edit add -h
    

Passaggi successivi

Documentazione ufficiale

Per ulteriori informazioni sui campi supportati nel file kustomization.yaml, puoi visitare la documentazione ufficiale di Kustomize, che fornisce descrizioni ed esempi dei vari campi che puoi utilizzare.

Funzionalità non supportate

Per un elenco delle funzionalità che non sono intenzionalmente supportate da Kustomize, puoi leggere le funzionalità selezionate di Kustomize.