Scalabilità con Kustomize

Scalabilità con Kustomize

Informazioni su questo codelab

subjectUltimo aggiornamento: apr 20, 2022
account_circleScritto da un Googler

1. Obiettivi

Kustomize è uno strumento che introduce un modo senza modelli per personalizzare la configurazione delle applicazioni, semplificando l'uso di applicazioni pronte all'uso. È disponibile come utilità autonoma ed è integrato in kubectl tramite kubectl apply -k o può essere utilizzato come interfaccia a riga di comando standalone. Per maggiori dettagli, scopri di più all'indirizzo kustomize.io.

In questo tutorial imparerai ad alcuni dei concetti fondamentali di Kustomize e lo utilizzerai per gestire le variazioni nelle applicazioni e negli ambienti.

Imparerai a:

  • Utilizza il client a riga di comando kustomize
  • Esegui l'override degli elementi comuni
  • Applica patch a strutture YAML più grandi
  • Utilizza più livelli di overlay

2. Preparazione dell'area di lavoro

  1. Apri l'editor di Cloud Shell visitando il seguente URL

https://ide.cloud.google.com

  1. Nella finestra del terminale, crea una directory di lavoro per questo tutorial

mkdir kustomize-lab

  1. Passa alla directory e imposta l'area di lavoro IDE

cd kustomize-lab && cloudshell workspace .

3. Utilizzo del client a riga di comando kustomize

Il potere di kustomize deriva dalla capacità di sovrapporre e modificare i file YAML di base di Kubernetes con valori personalizzati. Per fare ciò, kustomize richiede un file di base con istruzioni sulla posizione dei file e su cosa sostituire. Kustomize è incluso nell'ecosistema Kubernetes e può essere eseguito con vari metodi.

In questa sezione creerai una configurazione kustomize di base ed elaborerai i file con il client della riga di comando kustomize standalone.

  1. Per iniziare, creerai una cartella in cui inserire i file di configurazione di base

mkdir -p chat-app/base

  1. Crea un semplice deployment.yaml di Kubernetes nella cartella di base

cat <<EOF > chat-app/base/deployment.yaml

kind: Deployment

apiVersion: apps/v1

metadata:

name: app

spec:

template:

`metadata:`

 
`name: chat-app`

`spec:`

 
`containers:`

 
`- name: chat-app`

   
`image: chat-app-image`

EOF

  1. Crea la base kustomization.yaml

Kustomize cerca un file denominato kustomization.yaml come punto di ingresso. Questo file contiene riferimenti ai vari file di base e di override, nonché valori di override specifici.

Crea un file kustomization.yaml che faccia riferimento a deployment.yaml come risorse di base.

cat <<EOF > chat-app/base/kustomization.yaml

bases:

- deployment.yaml

EOF

  1. Esegui il comando kustomize sulla cartella di base. In questo modo vengono visualizzati i file YAML del deployment senza modifiche, il che è previsto perché non hai ancora incluso alcuna variante.

kustomize build chat-app/base

Questo client autonomo può essere combinato con il client kubectl per applicare l'output direttamente come nell'esempio seguente. In questo modo, l'output del comando build viene inviato direttamente al comando kubectl apply.

(Non eseguire, incluso solo come riferimento)

kustomize build chat-app/base | kubectl apply -f -

Questa tecnica è utile se è necessaria una versione specifica del client kubestomize.

In alternativa, kustomize può essere eseguito con gli strumenti integrati nello stesso kubectl. Come nell'esempio seguente.

(Non eseguire, incluso solo come riferimento)

kubectl apply -k chat-app/base

4. Ignorare gli elementi comuni

Ora che l'area di lavoro è configurata e hai verificato che kustomize funziona, è il momento di eseguire l'override di alcuni valori di base.

Immagini, spazi dei nomi ed etichette sono molto comunemente personalizzati per ogni applicazione e ambiente. Poiché vengono comunemente modificate, Kustomize ti consente di dichiararle direttamente in kustomize.yaml, eliminando la necessità di creare molte patch per questi scenari comuni.

Questa tecnica viene spesso utilizzata per creare un'istanza specifica di un modello. Un set base di risorse ora può essere utilizzato per più implementazioni semplicemente modificando il nome e lo spazio dei nomi.

In questo esempio, aggiungerai uno spazio dei nomi, un prefisso del nome e alcune etichette a kustomization.yaml.

  1. Aggiorna il file kustomization.yaml in modo che includa etichette e spazi dei nomi comuni.

Copia ed esegui i seguenti comandi nel tuo terminale

cat <<EOF > chat-app/base/kustomization.yaml

bases:

- deployment.yaml

namespace: my-namespace

nameprefix: my-

commonLabels:

app: my-app

EOF

  1. Esegui il comando build

L'esecuzione della build a questo punto mostra che il file YAML risultante ora contiene lo spazio dei nomi, le etichette e i nomi con prefisso sia nelle definizioni del servizio che del deployment.

kustomize build chat-app/base

Nota come l'output contiene etichette e spazi dei nomi che non sono nel file YAML del deployment. Nota anche come è stato cambiato il nome da chat-app a my-chat-app

(Output, non copiare)

kind: Deployment

metadata:

labels:

`app: my-app`

name: my-chat-app

namespace: my-namespace

5. Applicazione di patch di strutture YAML più grandi

Kustomize offre inoltre la possibilità di applicare patch che si sovrappongono alle risorse di base. Questa tecnica viene spesso utilizzata per fornire variabilità tra applicazioni e ambienti.

In questo passaggio creerai varianti di ambiente per una singola applicazione che utilizza le stesse risorse di base.

  1. Inizia creando cartelle per i diversi ambienti

mkdir -p chat-app/dev

mkdir -p chat-app/prod

  1. Scrivi la patch dello stage con questo comando

cat <<EOF > chat-app/dev/deployment.yaml

kind: Deployment

apiVersion: apps/v1

metadata:

name: app

spec:

template:

`spec:`

 
`containers:`

 
`- name: chat-app`

   
`env:`

   
`- name: ENVIRONMENT`

     
`value: dev`

EOF

  1. Ora scrivi la patch di produzione con il seguente comando

cat <<EOF > chat-app/prod/deployment.yaml

kind: Deployment

apiVersion: apps/v1

metadata:

name: app

spec:

template:

`spec:`

 
`containers:`

 
`- name: chat-app`

   
`env:`

   
`- name: ENVIRONMENT`

     
`value: prod`

EOF

Nota che le patch riportate sopra non contengono il nome dell'immagine container. Questo valore è fornito nel file base/deployment.yaml che hai creato nel passaggio precedente. Tuttavia, queste patch contengono variabili di ambiente univoche per dev e prod.

  1. Implementa i file YAML kustomize per la directory di base

Riscrivi il file kustomization.yaml di base, rimuovi lo spazio dei nomi e il prefisso del nome poiché questa è solo la configurazione di base senza variazione. Questi campi verranno spostati nei file dell'ambiente tra poco.

cat <<EOF > chat-app/base/kustomization.yaml

bases:

- deployment.yaml

commonLabels:

app: chat-app

EOF

  1. Implementa i file YAML kustomize per la directory dev

Ora implementa le varianti per dev e prod eseguendo i comandi seguenti nel terminale.

cat <<EOF > chat-app/dev/kustomization.yaml

bases:

- ../base

namespace: dev

nameprefix: dev-

commonLabels:

env: dev

patches:

- deployment.yaml

EOF

Nota l'aggiunta della sezione patches: del file. Questo indica che kustomize deve sovrapporre questi file alle risorse di base.

  1. Implementare i file YAML kustomize per la directory di produzione

cat <<EOF > chat-app/prod/kustomization.yaml

bases:

- ../base

namespace: prod

nameprefix: prod-

commonLabels:

env: prod

patches:

- deployment.yaml

EOF

  1. Esegui kustomize per unire i file

Una volta creati i file di base e di ambiente, puoi eseguire il processo di kustomize per applicare le patch ai file di base.

Esegui questo comando per dev per vedere il risultato unito.

kustomize build chat-app/dev

Tieni presente che l'output contiene risultati uniti, come le etichette delle configurazioni di base e dev, nonché il nome dell'immagine container della base e la variabile di ambiente delle cartelle dev.

6. Utilizzo di più livelli di overlay

Molte organizzazioni dispongono di un team che aiuta a supportare i team dedicati alle app e a gestire la piattaforma. In molti casi questi team desiderano includere dettagli specifici da includere in tutte le app in tutti gli ambienti, ad esempio un agente Logging.

In questo esempio creerai una cartella e risorse shared-kustomize che saranno incluse da tutte le applicazioni e indipendentemente dall'ambiente di cui viene eseguito il deployment.

  1. Crea la cartella shared-kustomize

mkdir shared-kustomize

  1. Crea una semplice deployment.yaml nella cartella condivisa

cat <<EOF > shared-kustomize/deployment.yaml

kind: Deployment

apiVersion: apps/v1

metadata:

name: app

spec:

template:

`spec:`

 
`containers:`

 
`- name: logging-agent`

   
`image: logging-agent-image`

EOF

  1. Crea un file kustomization.yaml nella cartella condivisa

cat <<EOF > shared-kustomize/kustomization.yaml

bases:

- deployment.yaml

EOF

  1. Fai riferimento alla cartella shared-kustomize dalla tua applicazione

Poiché vuoi che la cartella shared-kustomize sia la base per tutte le tue applicazioni, devi aggiornare chat-app/base/kustomization.yaml in modo che utilizzi shared-kustomize come base. Quindi applica la patch al suo deployment.yaml. Alle cartelle di ambiente verrà poi applicata una nuova patch.

Copia ed esegui i seguenti comandi nel tuo terminale

cat <<EOF > chat-app/base/kustomization.yaml

bases:

- ../../shared-kustomize

commonLabels:

app: chat-app

patches:

- deployment.yaml

EOF

  1. Esegui kustomize e visualizza i risultati uniti per dev

kustomize build chat-app/dev

Tieni presente che l'output contiene risultati uniti provenienti dall'app base, dall'ambiente dell'app e dalle cartelle shared-kustomize. In particolare, nella sezione dei container sono visualizzati i valori di tutte e tre le località.

(output non copiare)

<pre>

`containers:`

     
`- env:`

       
`- name: ENVIRONMENT`

         
`value: dev`

       
`name: chat-app`

     
`- image: image`

       
`name: app`

     
`- image: logging-agent-image`

       
`name: logging-agent`

</pre>