Esercizio - Creare un chart Helm per la distribuzione

Completato

In questa unità viene creato un grafico Helm da distribuire in servizio Azure Kubernetes (servizio Azure Kubernetes) usando GitHub Actions. Per creare il grafico Helm, completare le attività seguenti:

  • Controllare l'installazione di Helm.
  • Creare un grafico.
  • Configurare il grafico.
  • Creare una distribuzione.
  • Creare un file YAML vuoto.
  • Aggiungere contenuto al file YAML.
  • Creare un servizio.
  • Creare un ingresso.
  • Creare un nome di zona DNS.

Controllare l'installazione di Helm e aggiornare il repository

L'interfaccia della riga di comando Helm è già installata in Azure Cloud Shell. Se Cloud Shell non è già aperto, accedere a Cloud Shell e assicurarsi che Bash sia impostato come terminale di Cloud Shell.

  1. Eseguire helm version per assicurarsi che la versione Helm visualizzata sia maggiore di 3.

  2. Passare al repository con fork per questo modulo eseguendo cd mslearn-aks-deployment-pipeline-github-actions.

  3. Eseguire git pull origin main per eseguire il pull delle modifiche dalle unità precedenti.

Creare un grafico Helm

Generare un modello Helm boilerplate nella directory kubernetes del repository.

  1. In Cloud Shell passare alla directory kubernetes :

    cd kubernetes
    
  2. Usare helm create per creare una nuova directory denominata contoso-website nella directory kubernetes :

    helm create contoso-website
    
  3. Passare alla nuova directory con cd.

    cd contoso-website
    
  4. Eliminare i grafici e le cartelle dei modelli in questa directory.

    rm -r charts templates
    
  5. Creare una nuova cartella modelli vuota.

    mkdir templates
    
  6. Per iniziare a creare carichi di lavoro nel grafico vuoto, creare un nuovo set di file YAML spostando i file esistenti in kubernetes nella nuova cartella templates :

    mv ../*.yaml ./templates
    

È ora disponibile un nuovo grafico Helm. Configurare quindi il grafico.

Configurare il chart

  1. Eseguire cd ../.. per passare alla radice del repository.

  2. Eseguire code . per aprire l'editor di codice nella directory corrente.

  3. Nel menu a sinistra espandere la cartella kubernetes/contoso-website e aprire il file Chart.yaml . Chart.yaml è il file che denomina il grafico ed è la posizione in cui Helm cerca informazioni sul grafico.

  4. Rimuovere tutto il contenuto del file ad eccezione delle prime tre righe e della versione del grafico e modificare la descrizione in modo che il file sia simile all'esempio seguente:

    apiVersion: v2
    name: contoso-website
    description: Chart for the Contoso company website
    version: 0.1.0
    
  5. Salvare il file selezionando l'angolo superiore destro della barra degli strumenti dell'editor e quindi selezionando Salva oppure premendo CTRL+S.

Creare una distribuzione

Aggiungere modelli per questa distribuzione.

  1. Dal menu a sinistra aprire il file deployment.yaml nella cartella kubernetes/templates .

  2. Nella sezione principale metadata aggiungere una nuova chiave denominata namespace con il valore {{ default "staging" .Release.Namespace }}. La sezione dovrebbe essere simile all'esempio metadata seguente:

    metadata:
      name: contoso-website
      namespace: {{ default "staging" .Release.Namespace }}
    

    Per impostazione predefinita, il flusso di lavoro distribuisce questa risorsa nello spazio dei staging nomi, ma se il helm install comando ha un'opzione Namespace , il flusso di lavoro usa invece tale spazio dei nomi.

  3. template/containers/specNella sezione sostituire !IMAGE! con le latest versioni o tag del cluster del servizio Azure Kubernetes.

    È consigliabile suddividere le registryparti , imagee tag del nome dell'immagine per usarle più facilmente. Aggiungere tre nuove variabili di modello che usano i valori di Values.image.registry, Values.image.namee Values.image.tag.

    - image: {{ .Values.image.registry }}.azurecr.io/{{ .Values.image.name }}:{{ default "latest" .Values.image.tag }}
    

    Il file deployment.yaml dovrebbe essere simile all'esempio seguente:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: contoso-website
      namespace: {{ default "staging" .Release.Namespace }}
    spec:
      selector:
        matchLabels:
          app: contoso-website
      template:
        metadata:
          labels:
            app: contoso-website
        spec:
          containers:
            - image: {{ .Values.image.registry }}.azurecr.io/{{ .Values.image.name }}:{{ default "latest" .Values.image.tag }}
              name: contoso-website
              resources:
                requests:
                  cpu: 100m
                  memory: 128Mi
                limits:
                  cpu: 250m
                  memory: 256Mi
              ports:
                - containerPort: 80
                  name: http
    
  4. Salvare il file.

Aggiungere contenuto al file values.yaml

In precedenza, è stato usato {{ .Release.Namespace }}, quindi Release è un ambito di variabile. Ogni ambito variabile ha variabili e valori predefiniti diversi. Il file values.yaml è un altro ambito di variabile. Helm usa il file values.yaml per recuperare tutti i valori del modello che iniziano con {{ .Values }}.

Questo file deve avere la stessa struttura del file usato per chiamare le variabili. Esaminare rapidamente il file deployment.yaml modificato per visualizzare la struttura. Si noti che è stato usato .Values.image.registry, .Values.image.namee .Values.image.tag nel file deployment.yaml .

  1. Nella radice della directory contoso-website aprire il file values.yaml .

  2. Eliminare tutto il contenuto del file, in modo da avere un file YAML vuoto.

  3. Aggiungere il contenuto seguente al file vuoto, sostituendo il segnaposto con il <ACR-NAME> nome Registro Azure Container.

    image:
      registry: <ACR-NAME>
      name: contoso-website
      tag: latest
    

    Questi valori sono l'impostazione predefinita se non si passa un valore diverso come parametro usando l'opzione --set del comando Helm.

  4. Salvare il file.

Creare un servizio

  1. Aprire il file service.yaml nella cartella templates .

  2. metadata Nella sezione del file aggiungere una nuova chiave denominata namespace che usa lo stesso valore usato nel file deployment.yaml.

       namespace: {{ default "staging" .Release.Namespace }}
    

    Il file service.yaml dovrebbe essere simile all'esempio seguente:

    apiVersion: v1
    kind: Service
    metadata:
      name: contoso-website
      namespace: {{ default "staging" .Release.Namespace }}
    spec:
      ports:
        - port: 80
          protocol: TCP
          targetPort: http
          name: http
      selector:
        app: contoso-website
      type: ClusterIP
    
  3. Salvare il file.

Creare un ingresso

  1. Aprire il file ingress.yaml .

  2. metadata Nella sezione del file aggiungere di nuovo il namespace valore usato nel file deployment.yaml.

  3. Passare alla chiave host. È possibile creare host separati per le distribuzioni di staging e produzione, in modo che gli utenti non possano accedere allo spazio dei staging nomi usando gli URL di produzione. Concatenare lo spazio dei nomi nel nome host. Il componente aggiuntivo di routing delle applicazioni HTTP nel cluster AKS gestisce la risoluzione dei nomi.

           - host: contoso-{{ default "staging" .Release.Namespace }}.!DNS!
    
  4. Sostituire !DNS! con una nuova variabile di modello per il nome della zona DNS.

           - host: contoso-{{ default "staging" .Release.Namespace }}.{{ .Values.dns.name }}
    

    Il file ingress.yaml finale sarà simile all'esempio seguente:

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: contoso-website
      namespace: {{ default "staging" .Release.Namespace }}
      annotations:
        kubernetes.io/ingress.class: addon-http-application-routing
    spec:
      rules:
        - host: contoso-{{ default "staging" .Release.Namespace }}.{{ .Values.dns.name }}
          http:
            paths:
              - backend:
                  service:
                    name: contoso-website
                    port:
                      name: http
                path: /
                pathType: Prefix
    
  5. Salvare il file.

Aggiungere un valore del nome di zona DNS

  1. Aprire il file values.yaml e aggiungere una dns.name chiave dopo la image chiave. Sostituire <ACR-NAME> con il nome del Registro Container e <DNS-NAME> con il nome della zona DNS del servizio Azure Kubernetes dall'output dello script di installazione. Il file sarà simile all'esempio seguente:

    image:
      registry: <ACR-NAME>
      name: contoso-website
      tag: latest
    
    dns:
      name: <DNS-NAME>
    

    Se non si ha il nome della zona DNS dall'output dello script di installazione originale, eseguire la query seguente dell'interfaccia della riga di comando di Azure in un'altra finestra di Cloud Shell per ottenerla, sostituendo il segnaposto con il <resource-group-name> nome del gruppo di risorse.

    az aks show -g <resource-group-name> -n contoso-website -o tsv --query addonProfiles.httpApplicationRouting.config.HTTPApplicationRoutingZoneName
    
  2. Salvare il file.

Eseguire il push delle modifiche

Chiudere l'editor di Cloud Shell selezionando l'angolo superiore destro della barra degli strumenti dell'editor e quindi selezionando Chiudi editor.

Per eseguire il push di tutte le modifiche apportate al fork, eseguire i comandi seguenti in Cloud Shell in ordine:

git add .
git commit -m "Add helm"
git push -u origin main

Quando richiesto, specificare il pat creato in precedenza come password.

Passare all'unità successiva per distribuire il grafico Helm e l'applicazione nel servizio Azure Kubernetes usando GitHub Actions.