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
- Apri l'editor di Cloud Shell visitando il seguente URL
https://ide.cloud.google.com
- Nella finestra del terminale, crea una directory di lavoro per questo tutorial
mkdir kustomize-lab
- 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.
- Per iniziare, crea una cartella in cui inserire i file di configurazione di base
mkdir -p chat-app/base
- Crea un semplice
deployment.yamlKubernetes 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
- 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
- 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.
- Aggiorna il file
kustomization.yamlper 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
- 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.
- Inizia creando cartelle per i diversi ambienti
mkdir -p chat-app/dev
mkdir -p chat-app/prod
- 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
- 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.
- 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
- 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.
- 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
- 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.
- Crea la cartella shared-kustomize
mkdir shared-kustomize
- Crea un semplice
deployment.yamlnella 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
- Crea un file kustomization.yaml nella cartella condivisa
cat <<EOF > shared-kustomize/kustomization.yaml
bases:
- deployment.yaml
EOF
- 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
- 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>