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 il suo utilizzo con altri strumenti Google Cloud.

Kustomize è uno strumento di trasformazione della configurazione Kubernetes che ti consente di personalizzare i file YAML non previsti, lasciando intatti i file originali. Kustomize può anche generare risorse come ConfigMap e Secret di altre rappresentazioni. Kustomize è progettato 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 di Kubernetes, Kustomize si allinea ai principi di Kubernetes dell'utilizzo degli oggetti Kubernetes per definire i file di configurazione e gestire queste configurazioni in modo dichiarativo. L'oggetto di configurazione Kustomize è denominato Kustomization, che descrive come generare o trasformare altri oggetti Kubernetes. Una Kustomization è definita in modo dichiarativo in un file denominato kustomization.yaml, che può essere generato e modificato da Kustomize stesso.

In Kustomize, puoi definire una kustomization comune e riutilizzabile (chiamata base) e applicarla a varie altre kustomize (chiamate overlay), che possono sovrascrivere selettivamente le impostazioni definite nella base per produrre varianti. Kustomize trasforma e genera risorse, un processo chiamato idratazione o rendering, in base alla configurazione definita nelle basi e negli overlay di kustomization. Queste risorse visualizzate vengono quindi scritte nell'output standard o nei file, lasciando intatti 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. Ti consente di personalizzare la configurazione di Kubernetes in quasi tutti i modi che desideri, senza dover fornire un ampio set di valori per ogni singolo caso d'uso.

Vantaggi di Kustomize

I vantaggi della gestione delle configurazioni Kubernetes con Kustomize includono i seguenti:

  • Kustomize è privo di modelli. Quando utilizzi i modelli e i file dei valori, quasi tutte le specifiche di un file YAML possono diventare un parametro che richiede un valore e i file dei 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 se viene visualizzato o meno da Kustomize. 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. Di conseguenza, se utilizzi kubectl, non c'è bisogno di installare o gestire Kustomize come dipendenza separata.

  • Il Kustomize è puramente dichiarativo. Essendo uno strumento nativo di Kubernetes, Kustomize si allinea all'approccio Kubernetes alla configurazione dichiarativa. Invece di descrivere in modo imperativo il modo in cui 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 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, un livello alla volta.

  • Kustomize è estensibile e personalizzabile. Kustomize supporta un framework di plug-in per la scrittura dei tuoi generatori e trasformatori secondo lo stile delle funzioni KRM (Kubernetes Resource Model) eseguibili e containerizzate. Per scoprire di più su come creare i tuoi plug-in, consulta la guida ufficiale ai plug-in di Kumomize.

Installazione locale

Per installare Kustomize nel tuo ambiente locale, esegui questo comando:

gcloud components install kustomize

Assistenza Kustomize in Google Cloud

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

A partire da Anthos Config Management versione 1.9.0, Config Sync utilizza automaticamente Kustomize per visualizzare le risorse in un repository se contiene un file kustomization. Per ulteriori informazioni su questa funzionalità, consulta la pagina 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 Kuttomization in modo che gli stessi file di configurazione di base possano essere riutilizzati in più configurazioni di kustomization. A tal fine, possono utilizzare i concetti di base e overlay.

  • Una base è una directory contenente un file denominato kustomization.yaml, che può elencare un insieme di risorse con alcune personalizzazioni che verranno applicate all'elemento. Una base deve essere dichiarata nel campo resources di un file kustomization.
  • Un overlay è una directory che fa riferimento a un'altra directory di kustomization come la sua o 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, la base invia le relative risorse come input all'overlay per trasformarsi in base alla specifica dell'overlay.

Di seguito è riportato un esempio di base di kustomization:

# 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 kustomization. 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. 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 fornisce diversi comandi imperativi che ti consentono di gestire il tuo file kustomization.

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

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

    kustomize edit -h
    
  • Per ricevere assistenza specifica per i comandi secondari, aggiungi l'argomento secondario come argomento. Ad esempio:

    kustomize edit add -h
    

Passaggi successivi

Documentazione ufficiale

Per ulteriori informazioni sui campi supportati nel file kustomization.yaml, consulta 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 informazioni sulle funzionalità fornite da Kustomize.