Distribuire con Helm

Completato

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:

Screenshot that shows an example of a Helm chart tree.

  • 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.

Verificare le conoscenze

1.

Che cos'è Helm?

2.

Cosa rende Helm particolarmente utile in una pipeline CI/CD?