Guida introduttiva: Sviluppare nel servizio Azure Kubernetes con Helm

Helm è uno strumento per la creazione di pacchetti open source che consente di installare e gestire il ciclo di vita delle applicazioni Kubernetes. Analogamente agli strumenti di gestione pacchetti Linux come APT e Yum, Helm gestisce i grafici Kubernetes, che sono pacchetti di risorse Kubernetes preconfigurati.

In questa guida introduttiva si usa Helm per creare un pacchetto ed eseguire un'applicazione nel servizio Azure Kubernetes. Per informazioni sull'installazione di un'applicazione esistente con Helm, vedere Installare applicazioni esistenti con Helm nel servizio Azure Kubernetes.

Prerequisiti

Creare un Registro Azure Container

È necessario archiviare le immagini del contenitore in un Registro Azure Container per eseguire l'applicazione nel cluster del servizio Azure Kubernetes usando Helm. Il nome del registro deve essere univoco in Azure e contenere da 5 a 50 caratteri alfanumerici. Sono consentiti solo caratteri minuscoli. Lo SKU Basic è un punto di ingresso con costi ottimali a fini di sviluppo, che assicura l'equilibrio tra spazio di archiviazione e velocità effettiva.

  1. Creare un gruppo di risorse di Azure con il comando az group create. L'esempio seguente crea un gruppo di risorse denominato myResourceGroup nella località stati uniti orientali.

    az group create --name myResourceGroup --location eastus
    
  2. Creare un Registro Azure Container con un nome univoco chiamando il comando az acr create . L'esempio seguente crea un record di controllo di accesso denominato myhelmacr con lo SKU Basic.

    az acr create --resource-group myResourceGroup --name myhelmacr --sku Basic
    

    L'output dovrebbe essere simile all'output di esempio condensato seguente. Prendere nota del valore loginServer per il Registro Azure Container da usare in un passaggio successivo.

    {
      "adminUserEnabled": false,
      "creationDate": "2023-12-26T22:36:23.998425+00:00",
      "id": "/subscriptions/<ID>/resourceGroups/myResourceGroup/providers/Microsoft.ContainerRegistry/registries/myhelmacr",
      "location": "eastus",
      "loginServer": "myhelmacr.azurecr.io",
      "name": "myhelmacr",
      "networkRuleSet": null,
      "provisioningState": "Succeeded",
      "resourceGroup": "myResourceGroup",
      "sku": {
        "name": "Basic",
        "tier": "Basic"
      },
      "status": null,
      "storageAccount": null,
      "tags": {},
      "type": "Microsoft.ContainerRegistry/registries"
    }
    

Creare un cluster del servizio Azure Kubernetes

Il nuovo cluster del servizio Azure Kubernetes deve accedere al Registro Azure Container per eseguire il pull delle immagini del contenitore ed eseguirle.

  • Creare un cluster del servizio Azure Kubernetes usando il comando az aks create con il parametro --attach-acr per concedere al cluster l'accesso al Registro Azure Container. L'esempio seguente crea un cluster del servizio Azure Kubernetes denominato myAKSCluster e concede l'accesso al Registro Azure Container myhelmacr. Assicurarsi di sostituire myhelmacr con il nome del Registro Azure Container.

    az aks create --resource-group myResourceGroup --name myAKSCluster --location eastus --attach-acr myhelmacr --generate-ssh-keys
    

Connettersi al cluster del servizio Azure Kubernetes

Per connettere un cluster Kubernetes in locale, usare il client da riga di comando Kubernetes kubectl. kubectl è già installato se si usa Azure Cloud Shell.

  1. Per installare kubectl in locale, usa il comando az aks install-cli.

    az aks install-cli
    
  2. Configura kubectl per connetterti al cluster Kubernetes usando il comando az aks get-credentials. Il comando seguente ottiene le credenziali per il cluster AKS denominato myAKSCluster in myResourceGroup.

    az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
    

Scaricare l'applicazione di esempio

Questa guida introduttiva usa l'applicazione Azure Vote.

  1. Clonare l'applicazione da GitHub usando il comando git clone.

    git clone https://github.com/Azure-Samples/azure-voting-app-redis.git
    
  2. Passare alla directory azure-vote usando il comando cd.

    cd azure-voting-app-redis/azure-vote/
    

Compilare ed eseguire il push dell'applicazione di esempio in Registro Azure Container

  • Compilare ed eseguire il push dell'immagine nel Registro Azure Container usando il comando az acr build . L'esempio seguente compila un'immagine denominata azure-vote-front:v1 e la inserisce nel Registro Azure Container myhelmacr. Assicurarsi di sostituire myhelmacr con il nome del Registro Azure Container.

    az acr build --image azure-vote-front:v1 --registry myhelmacr --file Dockerfile .
    

Nota

È anche possibile importare grafici Helm nel Registro Azure Container. Per altre informazioni, vedere Eseguire il push e il pull dei grafici Helm in un registro Contenitori di Azure.

Creare il grafico Helm

  1. Generare il grafico Helm usando il comando helm create.

    helm create azure-vote-front
    
  2. Aggiornare azure-vote-front/Chart.yaml per aggiungere una dipendenza per il grafico redis dal repository del grafico https://charts.bitnami.com/bitnami e aggiornare appVersion a v1, come illustrato nell'esempio seguente:

    Nota

    Le versioni dell'immagine del contenitore illustrate in questa guida sono state testate per funzionare con questo esempio, ma potrebbero non essere la versione più recente disponibile.

    apiVersion: v2
    name: azure-vote-front
    description: A Helm chart for Kubernetes
    
    dependencies:
      - name: redis
        version: 17.3.17
        repository: https://charts.bitnami.com/bitnami
    
    ...
    # This is the version number of the application being deployed. This version number should be
    # incremented each time you make changes to the application.
    appVersion: v1
    
  3. Aggiornare le dipendenze del grafico Helm usando il comando helm dependency update.

    helm dependency update azure-vote-front
    
  4. Aggiornare azure-vote-front/values.yaml con le modifiche seguenti.

    • Aggiungere una sezione redis per impostare i dettagli dell'immagine, la porta del contenitore e il nome della distribuzione.
    • Aggiungere un backendName per connettere la parte front-end alla distribuzione redis.
    • Modificare image.repository in <loginServer>/azure-vote-front.
    • Modificare image.tag in v1.
    • Modificare service.type in LoadBalancer.

    Ad esempio:

    replicaCount: 1
    backendName: azure-vote-backend-master
    redis:
      image:
        registry: mcr.microsoft.com
        repository: oss/bitnami/redis
        tag: 6.0.8
      fullnameOverride: azure-vote-backend
      auth:
        enabled: false
    
    image:
      repository: myhelmacr.azurecr.io/azure-vote-front
      pullPolicy: IfNotPresent
      tag: "v1"
    ...
    service:
      type: LoadBalancer
      port: 80
    ...
    
  5. Aggiungere una sezione env ad azure-vote-front/templates/deployment.yaml per passare il nome della distribuzione redis.

    ...
          containers:
            - name: {{ .Chart.Name }}
              securityContext:
                {{- toYaml .Values.securityContext | nindent 12 }}
              image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
              imagePullPolicy: {{ .Values.image.pullPolicy }}
              env:
              - name: REDIS
                value: {{ .Values.backendName }}
    ...
    

Eseguire il grafico Helm

  1. Installare l'applicazione usando il grafico Helm usando il comando helm install.

    helm install azure-vote-front azure-vote-front/
    
  2. Ci vogliono alcuni minuti perché il servizio restituisca un indirizzo IP pubblico. Monitorare lo stato di avanzamento usando il comando kubectl get service con l'argomento --watch.

    kubectl get service azure-vote-front --watch
    

    Quando il servizio è pronto, il valore EXTERNAL-IP passa da <pending> a un indirizzo IP. Premere CTRL+C per arrestare il processo di controllo kubectl.

      NAME               TYPE           CLUSTER-IP    EXTERNAL-IP     PORT(S)        AGE
      azure-vote-front   LoadBalancer   10.0.18.228   <pending>       80:32021/TCP   6s
      ...
      azure-vote-front   LoadBalancer   10.0.18.228   52.188.140.81   80:32021/TCP   2m6s
    
  3. Passare al servizio di bilanciamento del carico dell'applicazione in un browser usando <EXTERNAL-IP> per visualizzare l'applicazione di esempio.

Eliminare il cluster

  • Rimuovere il gruppo di risorse, il cluster del servizio Azure Kubernetes, il Registro Azure Container, le immagini del contenitore archiviate nel Registro Azure Container e tutte le risorse correlate usando il comando az group delete con il parametro --yes per confermare l'eliminazione e il parametro --no-wait da restituire al prompt dei comandi senza attendere il completamento dell'operazione.

    az group delete --name myResourceGroup --yes --no-wait
    

Nota

Se il cluster del servizio Azure Kubernetes è stato creato con un'identità gestita assegnata dal sistema (l'opzione di identità predefinita in questa guida introduttiva), l'identità viene gestita dalla piattaforma e non richiede la rimozione.

Se è stato creato il cluster del servizio Azure Kubernetes con un'entità servizio, l'entità servizio non viene rimossa quando si elimina il cluster. Per rimuovere l'entità servizio, vedere le considerazioni sull'entità servizio servizio Azure Kubernetes e la sua eliminazione.

Passaggi successivi

Per altre informazioni sull'uso di Helm, vedere la documentazionedi Helm.