Scalabilità con Kustomize

1. Obiettivi

Kustomize è uno strumento che introduce un modo senza modelli per personalizzare la configurazione delle applicazioni, semplificando l'utilizzo di applicazioni pronte all'uso. È disponibile come utilità autonoma ed è integrata in kubectl tramite kubectl apply -k oppure può essere utilizzata come interfaccia a riga di comando autonoma. Per ulteriori dettagli, visita kustomize.io.

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

Imparerai a:

  • Utilizza il client a riga di comando kustomize
  • Sostituisci gli elementi comuni
  • Applicare patch a strutture YAML più grandi
  • Utilizzare più livelli di overlay

2. Preparazione del workspace

  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 lo spazio di lavoro IDE

cd kustomize-lab && cloudshell workspace .

3. Utilizzo del client a riga di comando kustomize

La potenza di Kustomize deriva dalla possibilità di sovrapporre e modificare i file YAML di base di Kubernetes con valori personalizzati. Per farlo, Kustomize richiede un file di base con le istruzioni su dove si trovano i file e cosa sostituire. Kustomize è incluso nell'ecosistema Kubernetes e può essere eseguito in vari modi.

In questa sezione creerai una configurazione di base di Kustomize ed elaborerai i file con il client a riga di comando Kustomize autonomo.

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

mkdir -p chat-app/base

  1. Crea un semplice deployment.yaml 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 nella cartella di base. In questo modo, i file YAML del deployment vengono generati senza modifiche, come previsto, poiché non hai ancora incluso varianti.

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 di build viene trasmesso in streaming direttamente al comando kubectl apply.

(Do Not Execute - Included for reference only)

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

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

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

(Do Not Execute - Included for reference only)

kubectl apply -k chat-app/base

4. Sostituzione di elementi comuni

Ora che lo spazio di lavoro è configurato e hai verificato che kustomize funzioni, è il momento di sostituire alcuni dei valori di base.

Immagini, spazi dei nomi ed etichette vengono personalizzati molto spesso per ogni applicazione e ambiente. Poiché vengono modificate di frequente, 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. Ora è possibile utilizzare un unico set di risorse di base 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 al tuo kustomization.yaml.

  1. Aggiorna il file kustomization.yaml per includere etichette e spazi dei nomi comuni.

Copia ed esegui i seguenti comandi nel 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 di 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 nelle definizioni di servizio e deployment.

kustomize build chat-app/base

Nota come l'output contenga etichette e spazi dei nomi che non sono presenti nel file YAML di deployment. Tieni presente anche che il nome è stato modificato 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 a strutture YAML più grandi

Kustomize offre anche la possibilità di applicare patch che sovrascrivono le risorse di base. Questa tecnica viene spesso utilizzata per fornire variabilità tra applicazioni e ambienti.

In questo passaggio, creerai varianti dell'ambiente per una singola applicazione che utilizzano 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 di staging con il seguente 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

Tieni presente che le patch riportate sopra non contengono il nome dell'immagine container. Questo valore è fornito nel file base/deployment.yaml creato nel passaggio precedente. Tuttavia, queste patch contengono variabili di ambiente univoche per lo sviluppo e la produzione.

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

Riscrivi il file kustomization.yaml di base, rimuovi lo spazio dei nomi e il prefisso del nome, in quanto si tratta solo della configurazione di base senza variazioni. Questi campi verranno spostati nei file di ambiente tra un attimo.

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

bases:

- deployment.yaml

commonLabels:

app: chat-app

EOF

  1. Implementa i file YAML di Kustomize per la directory dev

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

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

bases:

- ../base

namespace: dev

nameprefix: dev-

commonLabels:

env: dev

patches:

- deployment.yaml

EOF

Prendi nota dell'aggiunta della sezione patches: del file. Ciò indica che kustomize deve sovrapporre questi file alle risorse di base.

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

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 dell'ambiente, puoi eseguire il processo di personalizzazione per applicare patch ai file di base.

Esegui questo comando per visualizzare il risultato unito.

kustomize build chat-app/dev

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

6. Utilizzo di più livelli di overlay

Molte organizzazioni hanno un team che aiuta a supportare i team dell'app e a gestire la piattaforma. Spesso questi team vogliono includere dettagli specifici da inserire in tutte le app in tutti gli ambienti, ad esempio un agente di logging.

In questo esempio, creerai una cartella shared-kustomize e risorse che verranno incluse da tutte le applicazioni, indipendentemente dall'ambiente in cui vengono implementate.

  1. Crea la cartella shared-kustomize

mkdir shared-kustomize

  1. Crea un 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 per utilizzare shared-kustomize come base. Quindi, applica la patch al proprio file deployment.yaml. Le cartelle dell'ambiente verranno patchate di nuovo.

Copia ed esegui i seguenti comandi nel 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 lo sviluppo

kustomize build chat-app/dev

Tieni presente che l'output contiene i risultati uniti della base dell'app, dell'ambiente dell'app e delle cartelle shared-kustomize. Nello specifico, nella sezione dei contenitori puoi visualizzare i valori di tutte e tre le posizioni.

(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>