Esercitazione: Aggiornare un cluster del servizio Azure Kubernetes

Nell'ambito del ciclo di vita dell'applicazione e del cluster, potrebbe essere necessario eseguire l'aggiornamento alla versione più recente disponibile di Kubernetes. È possibile aggiornare il cluster del servizio Azure Kubernetes usando l'interfaccia della riga di comando di Azure, Azure PowerShell o il portale di Azure.

In questa esercitazione, parte sette di sette, si aggiorna un cluster del servizio Azure Kubernetes. Scopri come:

  • Identificare le versioni correnti e disponibili di Kubernetes.
  • Aggiornare i nodi Kubernetes.
  • Convalidare la corretta esecuzione dell'aggiornamento.

Operazioni preliminari

Nelle esercitazioni precedenti è stata inserita in un pacchetto un'applicazione in un'immagine del contenitore e l'immagine del contenitore è stata caricata in Registro Azure Container. È stato anche creato un cluster del servizio Azure Kubernetes e ne è stata distribuita un'applicazione. Se questi passaggi non sono stati completati e si vuole seguire questa procedura, iniziare con Esercitazione 1 - Preparare l'applicazione per il servizio Azure Kubernetes.

Se si usa l'interfaccia della riga di comando di Azure, questa esercitazione richiede l'interfaccia della riga di comando di Azure versione 2.34.1 o successiva. Eseguire az --version per trovare la versione. Se è necessario eseguire l'installazione o l'aggiornamento, vedere Installare l'interfaccia della riga di comando di Azure.

Se si usa Azure PowerShell, questa esercitazione richiede Azure PowerShell versione 5.9.0 o successiva. Eseguire Get-InstalledModule -Name Az per trovare la versione. Se è necessario eseguire l'installazione o l'aggiornamento, vedere Installare Azure PowerShell.

Ottenere le versioni disponibili del cluster

  • Prima di eseguire l'aggiornamento, verificare quali versioni di Kubernetes sono disponibili per il cluster usando il comando az aks get-upgrades.

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

    L'output di esempio seguente mostra la versione corrente come 1.28.9 ed elenca le versioni disponibili in upgrades:

      {
        "agentPoolProfiles": null,
        "controlPlaneProfile": {
          "kubernetesVersion": "1.28.9",
          ...
          "upgrades": [
            {
              "isPreview": null,
              "kubernetesVersion": "1.29.4"
            },
            {
              "isPreview": null,
              "kubernetesVersion": "1.29.2"
            }
          ]
        },
        ...
      }
    

Aggiornare un cluster del servizio Azure Container

I nodi del servizio Azure Kubernetes vengono accuratamente delimitati e svuotati per ridurre al minimo le potenziali interruzioni per l'esecuzione di applicazioni. Durante questo processo, il servizio Azure Kubernetes esegue i passaggi seguenti:

  • Aggiunge un nuovo nodo del buffer (o tutti i nodi configurati in sovratensione massima) al cluster che esegue la versione di Kubernetes specificata.
  • Blocca e svuota uno dei nodi precedenti per ridurre al minimo le interruzioni per l'esecuzione delle applicazioni. Se si usa la sovratensione massima, blocca e svuota contemporaneamente tanti nodi quanti sono i nodi del buffer specificati..
  • Quando il nodo precedente è completamente svuotato, viene ricreata l'immagine per ricevere la nuova versione e diventa il nodo del buffer per il nodo seguente da aggiornare.
  • Questo processo viene ripetuto fino a quando non vengono aggiornati tutti i nodi del cluster.
  • Al termine del processo, l'ultimo nodo del buffer viene eliminato, mantenendo il numero di nodi dell'agente esistente e il bilanciamento della zona.

Nota

Se non viene specificata alcuna patch, il cluster esegue automaticamente l'aggiornamento alla patch GA più recente della versione secondaria specificata. Ad esempio, l'impostazione --kubernetes-version su 1.28 comporta l'aggiornamento del cluster a 1.28.9.

Per altre informazioni, vedere Aggiornamenti delle versioni secondarie di Kubernetes supportati nel servizio Azure Kubernetes.

È possibile aggiornare manualmente il cluster o configurare gli aggiornamenti automatici del cluster. È consigliabile configurare gli aggiornamenti automatici del cluster per assicurarsi che il cluster esegua sempre la versione più recente di Kubernetes.

Aggiornare manualmente il cluster

  • Aggiornare il cluster usando il comando az aks upgrade.

    az aks upgrade \
        --resource-group myResourceGroup \
        --name myAKSCluster \
        --kubernetes-version KUBERNETES_VERSION
    
  • Verrà richiesto di confermare l'operazione di aggiornamento e di confermare che si vuole aggiornare il piano di controllo e tutti i pool di nodi alla versione selezionata di Kubernetes:

     Are you sure you want to perform this operation? (y/N): y
    Since control-plane-only argument is not specified, this will upgrade the control plane AND all nodepools to version 1.29.2. Continue? (y/N): y
    

    Nota

    È possibile aggiornare solo una versione secondaria per volta. Ad esempio, è possibile eseguire l'aggiornamento da 1.14.x a 1.15.x, ma non è possibile eseguire direttamente l'aggiornamento da 1.14.x a 1.16.x. Per eseguire l'aggiornamento da 1.14.x a 1.16.x, è prima necessario eseguire l'aggiornamento da 1.14.x a 1.15.x, quindi eseguire un altro aggiornamento da 1.15.x a 1.16.x.

    L'output di esempio seguente mostra il risultato dell'aggiornamento a 1.29.2. Si noti che ora kubernetesVersion è 1.29.2:

    {
      ...
      "agentPoolProfiles": [
        {
          ...
          "count": 3,
          "currentOrchestratorVersion": "1.29.2",
          "maxPods": 110,
          "name": "nodepool1",
          "nodeImageVersion": "AKSUbuntu-2204gen2containerd-202405.27.0",
          "orchestratorVersion": "1.29.2",
          "osType": "Linux",
          "upgradeSettings": {
            "drainTimeoutInMinutes": null,
            "maxSurge": "10%",
            "nodeSoakDurationInMinutes": null,
            "undrainableNodeBehavior": null
          },
          "vmSize": "Standard_DS2_v2",
          ...
        }
      ],
      ...
      "currentKubernetesVersion": "1.29.2",
      "dnsPrefix": "myAKSClust-myResourceGroup-19da35",
      "enableRbac": false,
      "fqdn": "myaksclust-myresourcegroup-19da35-bd54a4be.hcp.eastus.azmk8s.io",
      "id": "/subscriptions/<Subscription ID>/resourcegroups/myResourceGroup/providers/Microsoft.ContainerService/managedClusters/myAKSCluster",
      "kubernetesVersion": "1.29.2",
      "location": "eastus",
      "name": "myAKSCluster",
      "type": "Microsoft.ContainerService/ManagedClusters"
      ...
    }
    

Configurare gli aggiornamenti automatici del cluster

  • Impostare un canale di aggiornamento automatico nel cluster usando il comando az aks update con il parametro --auto-upgrade-channel impostato su patch.

    az aks update --resource-group myResourceGroup --name myAKSCluster --auto-upgrade-channel patch
    

Per altre informazioni, vedere Aggiornare automaticamente un cluster del servizio Azure Kubernetes.

Aggiornare le immagini dei nodi del servizio Azure Kubernetes

Il servizio Azure Kubernetes fornisce regolarmente nuove immagini del nodo. Le immagini dei nodi Linux vengono aggiornate ogni settimana e le immagini dei nodi Windows vengono aggiornate ogni mese. È consigliabile aggiornare frequentemente le immagini del nodo per usare le funzionalità e gli aggiornamenti della sicurezza più recenti del servizio Azure Kubernetes. Per altre informazioni, vedere aggiornare le immagini dei nodi nel servizio Azure Kubernetes. Per configurare gli aggiornamenti automatici delle immagini dei nodi, vedere Aggiornare automaticamente le immagini del sistema operativo del nodo del cluster del servizio Azure Kubernetes.

Visualizzare gli eventi di aggiornamento

Nota

Quando si aggiorna il cluster, nei nodi possono verificarsi gli eventi Kubernetes seguenti:

  • Sovratensione (surge): creare un nodo di picco.
  • Svuotamento: rimuovere i pod dal nodo. Ogni pod ha un timeout di cinque minuti per completare la rimozione.
  • Aggiornamento: l'aggiornamento di un nodo ha avuto esito positivo o negativo.
  • Eliminazione: eliminare un nodo di picco.
  • Visualizzare gli eventi di aggiornamento negli spazi dei nomi predefiniti usando il comando kubectl get events.

    kubectl get events --field-selector source=upgrader
    

    L'output di esempio seguente mostra alcuni degli eventi precedenti elencati durante un aggiornamento:

    LAST SEEN   TYPE      REASON    OBJECT                                   MESSAGE
    ...
    5m          Normal    Drain     node/aks-nodepool1-96663640-vmss000000   Draining node: aks-nodepool1-96663640-vmss000000
    5m          Normal    Upgrade   node/aks-nodepool1-96663640-vmss000000   Deleting node aks-nodepool1-96663640-vmss000000 from API server
    4m          Normal    Upgrade   node/aks-nodepool1-96663640-vmss000000   Successfully reimaged node: aks-nodepool1-96663640-vmss000000
    4m          Normal    Upgrade   node/aks-nodepool1-96663640-vmss000000   Successfully upgraded node: aks-nodepool1-96663640-vmss000000
    4m          Normal    Drain     node/aks-nodepool1-96663640-vmss000000   Draining node: aks-nodepool1-96663640-vmss000000
    ...
    

Convalidare un aggiornamento

  • Verificare che l'aggiornamento sia riuscito usando il comando az aks show.

    az aks show --resource-group myResourceGroup --name myAKSCluster --output table
    

    L'output di esempio seguente mostra che il cluster del servizio Azure Kubernetes esegue KubernetesVersion 1.27.3:

    Name          Location    ResourceGroup    KubernetesVersion    CurrentKubernetesVersion  ProvisioningState    Fqdn
    ------------  ----------  ---------------  -------------------  ------------------------  -------------------  ----------------------------------------------------------------
    myAKSCluster  eastus      myResourceGroup  1.29.2               1.29.2                    Succeeded            myaksclust-myresourcegroup-19da35-bd54a4be.hcp.eastus.azmk8s.io
    

Eliminare il cluster

Poiché questa esercitazione è l'ultima parte della serie, è possibile eliminare il cluster del servizio Azure Kubernetes per evitare di incorrere in addebiti per Azure.

  • Rimuovere il gruppo di risorse, il servizio contenitore e tutte le risorse correlate usando il comando az group delete.

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

Nota

Quando si elimina il cluster, l'entità servizio Microsoft Entra usata dal cluster del servizio Azure Kubernetes non viene rimossa. Per istruzioni su come rimuovere l'entità servizio, vedere le considerazioni sull'entità servizio servizio Azure Kubernetes e la sua eliminazione. Se è stata usata un'identità gestita, l'identità viene gestita dalla piattaforma e non richiede il provisioning o la rotazione di segreti.

Passaggi successivi

In questa esercitazione è stato aggiornato Kubernetes in un cluster del servizio Azure Container. Contenuto del modulo:

  • Identificare le versioni correnti e disponibili di Kubernetes.
  • Aggiornare i nodi Kubernetes.
  • Convalidare la corretta esecuzione dell'aggiornamento.

Per altre informazioni sul servizio Azure Kubernetes, vedere panoramica servizio Azure Kubernetes. Per indicazioni su come creare soluzioni complete con il servizio Azure Kubernetes, vedere le linee guida per la soluzione del servizio Azure Kubernetes.