Informazioni su questo codelab
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
- 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 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.
- Per iniziare, creerai una cartella in cui inserire i file di configurazione di base
mkdir -p chat-app/base
- 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
- 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 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
.
- 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
- 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.
- Inizia creando cartelle per i diversi ambienti
mkdir -p chat-app/dev
mkdir -p chat-app/prod
- 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
- 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.
- 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
- 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.
- 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
- 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.
- Crea la cartella shared-kustomize
mkdir shared-kustomize
- 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
- 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
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
- 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>