Distribuire con Helm
Le immagini di gestione temporanea e di produzione sono state compilate ed eseguite correttamente nell'istanza di Registro Azure Container. È il momento di automatizzare tutti i passaggi e di rendere la pipeline funzionante automaticamente.
Attualmente, è necessario modificare manualmente i file ogni volta che si esegue la pipeline, in modo da non poter essere distribuiti automaticamente. Per risolvere questo problema, è possibile usare un grafico Helm per gestire le distribuzioni. In questa unità vengono illustrati i grafici e i modelli Helm.
Chart Helm
Helm è uno strumento di creazione di pacchetti open source simile ai gestori di pacchetti Linux come APT e Yum. Helm consente di installare e gestire il ciclo di vita delle applicazioni Kubernetes.
Si usa Helm per gestire i grafici Kubernetes, che sono gruppi di uno o più carichi di lavoro in pacchetto con file di configurazione e un file di descrizione del grafico. Quando vengono inseriti in un pacchetto in un chart, i file possono essere facilmente distribuiti come unità in un cluster Kubernetes.
Uno dei vantaggi dell'uso di Helm consiste nel non dover distribuire i file singolarmente. È possibile eseguire un singolo comando per distribuire il grafico. È anche possibile distribuire più chart dipendenti, con una risoluzione automatica delle dipendenze.
Ecco la struttura di una tipica directory del grafico Helm:
- Il file Chart.yaml contiene il nome, la descrizione e la versione del grafico.
- La directory dei grafici include grafici dipendenti.
- La directory templates contiene tutti i file manifesto.
- Il file values.yaml contiene i valori predefiniti per i modelli Helm.
Modelli Helm
Una caratteristica distintiva dello strumento Helm è la possibilità di creare e gestire modelli per eseguire distribuzioni automatizzate. I modelli consentono l'automazione e l'aggiunta di file manifesto a una pipeline CI/CD. Un file modello è un file manifesto che contiene i segnaposto per i valori delle variabili.
Esaminare l'esempio seguente del file deployment.yaml nella directory kubernetes del fork del sito Web:
apiVersion: apps/v1
kind: Deployment
metadata:
name: contoso-website
spec:
selector:
matchLabels:
app: contoso-website
template:
metadata:
labels:
app: contoso-website
spec:
containers:
- image: !IMAGE!
name: contoso-website
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: 250m
memory: 256Mi
ports:
- containerPort: 80
name: http
Il flusso di lavoro sostituisce il segnaposto con l'istanza !IMAGE!
del Registro Container e il nome dell'immagine. In un flusso di lavoro manuale è possibile eseguire il comando seguente per sostituire il !IMAGE!
segnaposto e quindi stampare il risultato. Per eseguire manualmente il codice, è possibile inviare tramite pipe il comando a kubectl apply -f -
per creare i carichi di lavoro:
$ sed 's+!IMAGE!+'"$ACR_NAME"'/contoso-website+g' kubernetes/deployment.yaml
Questa soluzione manuale, tuttavia, non è elegante o efficiente. Con la creazione di modelli nativi Helm, è possibile sostituire !IMAGE!
usando invece la {{.Values.containerImage}}
variabile .
...
template:
...
spec:
containers:
- image: {{.Values.containerImage}}
...
Eseguire quindi helm install
per puntare all'immagine e passare la cartella dei grafici :
$ helm install contoso-website ./chart-location --set containerImage="$ACR_NAME/contoso-website"
Helm offre anche funzioni modello per una logica più complessa, ad esempio per includere valori predefiniti e obbligatori nell'ambiente. Passare all'unità successiva per creare un grafico Helm per rendere più efficiente la pipeline CI/CD.